在四分之一循环后,VBA运行时错误1004“应用程序定义的错误或对象定义的错误”

时间:2018-07-18 09:27:24

标签: excel vba excel-vba

嗨,我是VBA的新手,我遇到了这个奇怪的错误,它会通过一个几乎每次都执行相同操作的循环而四分之一。

Sub tabele_to_database()
Dim ws As Worksheet
Dim Countries As New Collection
Dim things As New Collection
Dim Row As Boolean
Dim Coloum As Boolean
Dim i As Integer
Dim a As Integer

Set ws = ThisWorkbook.Sheets.Add(After:= _
        ThisWorkbook.Sheets(ThisWorkbook.Sheets.Count))

Row = True
Coloum = True
i = 2
While Row

    Countries.Add Sheets("payment terms").Cells(1, i).Value

    i = i + 1
    If IsEmpty(Sheets("payment terms").Cells(1, i)) Then
        Row = False
    End If
Wend

i = 2
While Coloum

    things.Add CStr(Sheets("payment terms").Cells(i, 1).Value)
    i = i + 1
    If IsEmpty(Sheets("payment terms").Cells(i, 1)) Then
        Coloum = False
    End If

Wend

a = 1

For Each thing In things

    For Each Country In Countries
        ws.Cells(1, a) = (thing + " " + Country)

        a = a + 1
    Next Country
Next thing



End Sub

错误在

 ws.Cells(1, a) = (thing + " " + Country)

整个过程大约四分之一。

变量为a = 257,这是它打印的列数 事情是第7排的东西,第36的国家是乡村,所以一切都很好

我知道事情不是好名字,但我在实习,对大多数事情一无所知。

这是工作,但我在实习,所以我一无所知,为此我“学习”了VBA。

预先感谢

3 个答案:

答案 0 :(得分:2)

尝试一下:

QDockWidget

将设置变量与字符串连接时,需要使用 ws.Cells(1, a) = (thing & " " & Country) 而不是&

编辑:正如Vityata所指出的那样,这是一个不错的提示,但是并不能解决当前的问题。

答案 1 :(得分:0)

像这样更改代码:

For Each thing In things
    For Each Country In Countries
        Debug.Print things + " " + Country
        ws.Cells(1, a) = thing + " " + Country
        a = a + 1
    Next Country
Next thing

因此,您将看到导致错误的确切原因。按 Ctrl + G 查看日志。

+不是一个很好的串联符号,但是如果thingCountry都是数字,则它可能“起作用”。 VBA中正确的串联是与&一起使用。

另一个可能的错误是使用Integer-为了确保vba的安全,请使用long。

答案 2 :(得分:0)

在旧的Excel版本上,列的上限为250个左右