Do Until循环在VBScript

时间:2015-07-22 13:32:23

标签: excel vbscript

我正在尝试使用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背景!)

2 个答案:

答案 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?