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
相关产品推荐
相关产品推荐

