You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

VB调试时报未将对象引用设置到对象实例错误,该如何排查?

空引用报错修复方案

核心问题排查点

  • 未实例化Scripting.FileSystemObject对象:你仅声明了FSO变量,未创建实例就调用GetFolder方法,是最常见的触发原因。需在调用方法前补充实例化逻辑:
    若为VB.NET环境:FSO = New Scripting.FileSystemObject
    若为VBA环境:Set FSO = New Scripting.FileSystemObject(需提前引用「Microsoft Scripting Runtime」库)
  • 路径变量未赋值:代码中的Dossier_source、Dossier_destination两个全局/模块级变量无赋值逻辑,若变量值为Nothing,会导致路径相关操作触发空引用,需确认变量已被正确赋值为有效文件夹路径。
  • Fichier_ACAM对象未初始化:代码直接使用With Fichier_ACAM调用方法,若该对象未提前实例化,也会触发空引用,需补充该对象的初始化逻辑。
  • ActiveDrawing为空:如果OpenDrawing方法打开文件失败,ActiveDrawing属性会返回Nothing,此时调用SaveAsEx方法会触发报错,建议增加操作结果判断。

调试建议

你可以在Catch块中打印异常堆栈信息,快速定位报错行:

MessageBox.Show(String.Format("Erreur: {0}" & vbCrLf & "堆栈:{1}", ex.Message, ex.StackTrace))

修正后参考代码

Module Conversion
    Public Sub ConversionFromCurrentToOld()
        ' 提前赋值路径变量,此处仅为示例,需替换为实际路径
        Dim Dossier_source As String = "C:\源文件夹路径"
        Dim Dossier_destination As String = "C:\目标文件夹路径"
        ' 实例化FSO
        Dim FSO As New Scripting.FileSystemObject()
        Dim oFolder As Scripting.Folder
        Dim oFile As Scripting.File
        Dim compteur_fichier = 0
        ' 实例化Fichier_ACAM,此处需替换为实际对应的对象类型
        Dim Fichier_ACAM As New 对应对象类型()

        Try
            ' 先判断源文件夹是否存在,避免异常
            If Not FSO.FolderExists(Dossier_source) Then
                MessageBox.Show("源文件夹不存在")
                Exit Sub
            End If
            oFolder = FSO.GetFolder(Dossier_source)
            For Each oFile In oFolder.Files
                If UCase(Right(oFile.Name, 3)) = "ARD" Then
                    With Fichier_ACAM
                        .OpenDrawing(oFile.Path)
                        ' 判断打开结果是否正常,避免空引用
                        If .ActiveDrawing IsNot Nothing Then
                            .ActiveDrawing.SaveAsEx(FSO.BuildPath(Dossier_destination, oFile.Name), 18)
                            compteur_fichier += 1
                        End If
                    End With
                End If
                MsgBox("Test : " & compteur_fichier)
            Next
        Catch ex As Exception
            MessageBox.Show(String.Format("Erreur: {0}" & vbCrLf & "报错位置:{1}", ex.Message, ex.StackTrace))
        End Try
    End Sub
End Module

内容的提问来源于stack exchange,提问作者Julien BILLET

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.05 20:57:03