Excel VBA:溢出错误

4

我刚开始学习VBA编程,遇到了一个问题,但不知道如何解决。我认为一切都正常。但是当我想运行这个宏时,出现了“运行时错误'6'溢出”的提示。

Sub Działaj()
Dim Tablica(1 To 5000) As String
Dim Dni()
Dim kolumna As Integer
Dim wiersz As Integer
Dim licznik As Integer
Dim PF As Boolean
Dim tmp As Integer
Dim i As Integer
Dim tmp2 As String
licznik = 2
tmp = 0
PF = False
kolumna = 22
wiersz = 2
Do
    If Worksheets("Początkowe").Cells(wiersz, kolumna).Value <> vbNullString Then
        For i = 1 To licznik
            If Worksheets("Początkowe").Cells(wiersz, kolumna).Value = Tablica(i) Then 'debugger shows problem here i guess
                PF = True
                tmp = i
            End If
        Next i
    End If
    If Worksheets("Początkowe").Cells(wiersz, kolumna).Value = "koniec" Then
        Exit Do
    End If
    wiersz = wiersz + 1
Loop
End Sub

有人能告诉我错在哪里吗?非常感谢。


1
一、你没有在Tablica(i)中设置任何值。二、如果你找不到值koniec,那么循环会一直进行,直到你超出整数变量wiersz的范围,大约32k。 - nutsch
1
你说的“你没有在Tablica(i)中设置任何值”是什么意思,能给我一个例子吗?不用担心“koniec”,它将出现在所有列的所有数据的末尾。 - Domin1992
1
抱歉,你关于“koniec”的说法也是正确的 :) 谢谢。 - Domin1992
你正在引用 If Worksheets("Początkowe").Cells(wiersz, kolumna).Value = Tablica(i),但在该行代码之前的任何时候,你都没有为数组分配一个值,因此此时的Tablica(i)是一个空字符串。 - nutsch
现在是的。我将从工作表中填充该表格数据。 - Domin1992
2个回答

7

如果在第32767行之前找不到koniec的值,则您的变量wiersz将达到最大值。如果您想继续超过该值,应将其重新定义为Long。

您还应提供循环退出方式,例如在最后一个使用的行处退出。我通常使用以下代码代替do ... loop

Dim lLastRow As Long, lWiersz As Long

lLastRow = Cells(Rows.Count, kolumna).End(xlUp).Row

For lWiersz= 1 To lLastRow


Next lWiersz

是的,谢谢,我忘记在表格末尾加上“koniec”了。我无法设置“if”来检查单元格是否为空,因为表格中间有一些单元格是空的。再次感谢您。 - Domin1992
在这种情况下,我通常使用for...next而不是do...loop,请参见附带的示例。 - nutsch

0

你需要将 Dim object integer to long 进行替换

像这样

Dim wiersz As Integer -->>> Dim wiersz As long

Dim licznik As Integer -->>> Dim licznik As long


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接