我正在尝试使用VBScript将网络驱动器上的.csv
文件中的某些数据提取到使用VBScript的不同网络驱动器上的启用宏的工作簿中的工作表中,但是我收到以下错误:
“未知的运行时错误。”
目标是将data
工作簿中的data
工作表中的所有数据复制到test1
工作簿中的spreadsheet
工作表。这是我的代码:
Set app1 = CreateObject("Excel.Application")
Set wb1 = app1.WorkBooks.Open("Q:\sample_dir\spreadsheet.xlsm")
Set ws1 = app1.ActiveWorkBook.WorkSheets("test1")
Set app2 = CreateObject("Excel.Application")
Set wb2 = app2.WorkBooks.Open("M:\sample_dir\data.csv")
Set ws2 = app2.ActiveWorkBook.WorkSheets("data")
i = 1
Do Until ws2.cells(i,1).value = "" 'Find how many rows there are
i = i + 1
Loop
For j = 1 to 5000 'Find how many columns there are
If ws2.cells(1,j).value = "" Then
Exit For
End If
Next
For k = 1 to i
For m = 1 to j
ws1.cells(k,m).value = ws2.cells(k,m).value
Next
Next
app1.ActiveWorkBook.Save
wb1.Close
wb2.Close
app1.Quit
app2.Quit
WScript.Quit
我最初使用的For
循环存在Do Until
(并且没有错误),但是我查看了VBScript中的循环并将其视为清理的机会并简化代码。
编辑:错误如下:
excel.vbs(10,1) Microsoft VBScript runtime error: Unknown runtime error
解决方案:
我查看了保存.vbs脚本的目录,发现spreadsheet.xlsm
文件的副本已保存在那里。我删除了该电子表格并再次运行代码,它工作正常(没有将其保存到脚本目录并更新了网络驱动器上的电子表格)。 德尔>
此问题再次出现,我的第一个解决方案实际上无法正常工作。我发现原因是由于我在继续调试时的索引。在我的代码中,我使用i = j = 1
来初始化两个Do Until
循环的变量,这显然在这里不起作用(诅咒你,C背景!)
答案 0 :(得分:0)
app2
是对Excel Application
对象的引用,该对象没有Cells
集合。我认为你的意思是使用ws2
:
Do Until ws2.cells(i,1).value = "" 'Find how many rows there are
i = i + 1
Loop
你在整个代码中犯了这个错误。
答案 1 :(得分:0)
我认为问题是“”与Excel中的BLANK不同。所以你没有跑,直到你击中一个空白单元格,你一直在运行,直到你击中一个返回“”的单元格(通常用于在公式中创建一个空白外观的单元格,即:如果条件失败,显示“”)。
您将要使用IsEmpty条件,如下所示: Excel: How to check if a cell is empty with VBA?