直到循环在VBScript中给出未知的运行时错误

我试图从一个networking驱动器上的.csv文件中的一些数据使用VBScript从一个不同的networking驱动器上启用macros的工作簿中的工作表,但我得到以下错误:

“未知的运行时错误”

目标是将data工作簿中的data工作表中的所有数据复制到spreadsheet工作簿中的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循环,其中Do Until存在(并且没有错误),但是我在VBScript中查找了循环,并将其看作是清理和简化代码的机会。

编辑:错误说如下:

excel.vbs(10,1) Microsoft VBScript runtime error: Unknown runtime error

解:

我查看了保存我的.vbs脚本的目录,发现spreadsheet.xlsm文件的副本已经保存在那里。 我删除了电子表格,然后再次运行代码,并且工作得很好(没有将其保存到脚本目录,并更新了networking驱动器上的电子表格)。

这个问题又回来了,我的第一个解决scheme实际上并没有工作。 我发现原因是由于我的索引继续debugging。 在我的代码中,我使用了i = j = 1来初始化两个Do Until循环的variables,这显然在这里不起作用(诅咒你,C背景!)

app2是Excel Application对象的引用,它没有Cells集合。 我想你的意思是使用ws2

 Do Until ws2.cells(i,1).value = "" 'Find how many rows there are i = i + 1 Loop 

你在代码中犯了这个错误。

我相信这个问题将会和Excel中的BLANK不一样。 所以你直到碰到一个空白的单元格时才会运行,直到你点击一个返回“”的单元格(这通常用于在公式中创build一个空白外观的单元格,即:如果条件失败,显示 ””)。

你会想要使用IsEmpty条件,如下所示: Excel:如何检查一个单元格是否为空的VBA?