Excel VBA导出选中单元格范围为JSON时出现Sub or Function not defined错误
VBA导出Excel范围为JSON报「Sub or Function not defined」报错解决方案
问题排查步骤
- 第一步:检查丢失的VBA引用库
打开VBA编辑器(快捷键Alt+F11),点击顶部菜单「工具」→「引用」,查看可用引用列表中是否有带「丢失」前缀的项,如有则取消对应项的勾选,保存后重新运行代码即可。该问题是触发此报错的最常见原因:丢失的引用会导致VBA无法识别内置函数,误报过程未定义。 - 第二步:修正代码中的范围引用问题
原代码中第二个Range对象未指定所属工作表,当活动工作表不是Marketing时会触发异常,属于隐性错误,建议同步修正。 - 第三步:确认代码存放位置
代码需要存放在标准模块中,不要粘贴到工作表模块、工作簿模块内。插入标准模块的方法:在VBA编辑器左侧工程列表右键点击当前工作簿→「插入」→「模块」,将代码粘贴到新模块中再运行。
修正后的完整代码
Sub PrintJson() Dim fs As Object Dim jsonfile Dim rangetoexport As Range Dim rowcounter As Long Dim columncounter As Long Dim linedata As String Dim path As String Dim fname As String ' 修正范围引用,明确指定所属工作表 With Sheets("Marketing") Set rangetoexport = .Range("C6", .Range("C6").End(xlDown).End(xlToRight)) End With ' 兼容无数据的边界情况 If rangetoexport.Rows.Count < 2 Then MsgBox "所选范围内没有可导出的数据" Exit Sub End If ' 兼容工作簿在根目录的路径问题,避免重复斜杠 path = ThisWorkbook.path & IIf(Right(ThisWorkbook.path, 1) = "\", "", "\") fname = "export.json" Set fs = CreateObject("Scripting.FileSystemObject") Set jsonfile = fs.CreateTextFile(path & fname, True) linedata = "{""Output"": [" jsonfile.WriteLine linedata For rowcounter = 2 To rangetoexport.Rows.Count linedata = "" For columncounter = 1 To rangetoexport.Columns.Count linedata = linedata & """" & Replace(rangetoexport.Cells(1, columncounter), """", "\""") & """" & ":" & """" _ & Replace(rangetoexport.Cells(rowcounter, columncounter), """", "\""") & """" & "," Next linedata = Left(linedata, Len(linedata) - 1) If rowcounter = rangetoexport.Rows.Count Then linedata = "{" & linedata & "}" Else linedata = "{" & linedata & "}," End If jsonfile.WriteLine linedata Next linedata = "]}" jsonfile.WriteLine linedata jsonfile.Close Set fs = Nothing MsgBox "导出完成,文件路径:" & path & fname End Sub
内容的提问来源于stack exchange,提问作者raffaelo92
相关产品推荐
相关产品推荐

