簡體   English   中英

如何解決 vba 中的溢出錯誤?

[英]How can I solve an overflow error in vba?

我必須分析一個非常大的數據文件並獲取一些數據並將其放入另一個工作表中,它可以工作到我有大約 20,000 行,但之后它給了我一個溢出錯誤,我需要它來分析大約 200,000 行,是否可以?

Sub prueba()

Dim i As Double, j As Double, k As Double, l As Double
Dim i2 As Double
Dim lrow As Integer
Dim LastRow As Double


lrow = Cells(Rows.Count, 1).End(xlUp).Row
LastRow = Range("E" & Rows.Count).End(xlUp).Row

i = 1
While Sheet1.Cells(18, i) <> "Suma de Máximo"

    i = i + 1

Wend

j = 1
While Sheet1.Cells(18, j) <> "Suma de Stock"

    j = j + 1

Wend

k = 1
While Sheet1.Cells(18, k) <> "Sum of Mínimo"

    k = k + 1

Wend

If Sheet1.Cells(18, k) = "Sum of Mínimo" And Sheet1.Cells(18, j) = "Suma de Stock" Then

    For i2 = 18 To LastRow - 1

        If Sheet1.Cells(i2, k) <> Sheet1.Cells(i2, j) Then

            Sheet2.Cells(i2 - 17, 1) = Sheet1.Cells(i2, 1)
            Sheet2.Cells(i2 - 17, 2) = Sheet1.Cells(i2, 2)
            Sheet2.Cells(i2 - 17, 3) = Sheet1.Cells(i2, i)
            Sheet2.Cells(i2 - 17, 4) = Sheet1.Cells(i2, k)
            Sheet2.Cells(i2 - 17, 5) = Sheet1.Cells(i2, j)

        End If

    Next i2

End If

End Sub
Dim lrow As Integer

這是一個 16 位有符號整數類型,最大值為 32,767 (2^15-1):一旦將其分配給 32,768 或更高,它就會溢出。 任何工作表的行數都比這多很多倍,這使得Integer不適合用於存儲工作表行號的數據類型。

改用Long ,它是一個 32 位有符號整數類型,最大值為 2^31-1,這比 Excel 工作表的行數還多。

Double是一種浮點數據類型,用於行號沒有多大意義。 考慮使用有意義的名稱而不是單字母變量,但請注意,這些循環效率極低:

 k = 1 While Sheet1.Cells(18, k) <> "Sum of Mínimo" k = k + 1 Wend

當您需要快速定位具有特定內容的單元格時,請使用Range.Find

代替:

Dim i As Double, j As Double, k As Double, l As Double
Dim i2 As Double
Dim lrow As Integer
Dim LastRow As Double

和:

Dim i As Long, j As Long, k As Long, l As Long
Dim i2 As Long
Dim lrow As Long
Dim LastRow As Long

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM