[英]Run time error '6' OverFlow (Excel VBA)
我遇到此错误,我要加载成千上万个csv文件,每次只能加载约数百个文件。 谁能告诉我错误在哪里?
Option Explicit
Function ImportData()
Dim wkbCrntWorkBook As Workbook
Dim wkbSourceBook As Workbook
Dim rngSourceRange1 As Range
Dim rngSourceRange2 As Range
Dim rngDestination1 As Range
Dim rngDestination2 As Range
Dim intColumnCount As Integer
Set wkbCrntWorkBook = ActiveWorkbook
Dim SelectedItemNumber As Integer
Dim YesOrNoAnswerToMessageBox As String
Dim Highest As Double
Highest = 0
Dim counter As Integer
Dim h1 As Integer
Dim h2 As Integer
h1 = 1
h2 = 7
Do
SelectedItemNumber = SelectedItemNumber + 1
With Application.FileDialog(msoFileDialogOpen)
.Filters.Clear
.Filters.Add "Command Separated Values", "*.csv", 1
'.Filters.Add "Excel 2007", "*.xlsx; *.xlsm; *.xlsa", 2
'.Filters.Add "Excel 2002-03", "*.xls", 3
.AllowMultiSelect = True
.Show
For SelectedItemNumber = 1 To .SelectedItems.Count
If .SelectedItems.Count > 0 Then
Workbooks.Open .SelectedItems(SelectedItemNumber)
Set wkbSourceBook = ActiveWorkbook
Set rngSourceRange1 = ActiveCell.Offset(1, 0)
Set rngSourceRange2 = ActiveCell.Offset(1, 6)
For counter = 0 To 300
Columns("H:H").NumberFormat = "0.00"
'Highest = Application.WorksheetFunction.Max(Range("H1:H300"))
If Highest <= ActiveCell.Offset(h1, h2).Value Then
Highest = ActiveCell.Offset(h1, h2).Value
End If
h1 = h1 + 1
Next
wkbCrntWorkBook.Activate
Set rngDestination1 = ActiveCell.Offset(1, 0)
Set rngDestination2 = ActiveCell.Offset(1, 1)
ActiveCell.Offset(1, 2).Value = Highest
For intColumnCount = 1 To rngSourceRange1.Columns.Count
If intColumnCount = 1 Then
rngSourceRange1.Columns(intColumnCount).Copy rngDestination1
Else
rngSourceRange1.Columns(intColumnCount).Copy rngDestination1.End(xlDown).End(xlDown).End(xlUp).Offset(1)
End If
Next
For intColumnCount = 1 To rngSourceRange2.Columns.Count
If intColumnCount = 1 Then
rngSourceRange2.Columns(intColumnCount).Copy rngDestination2
Else
rngSourceRange2.Columns(intColumnCount).Copy rngDestination2.End(xlDown).End(xlDown).End(xlUp).Offset(1)
End If
Next
ActiveCell.Offset(1, 0).Select
wkbSourceBook.Close False
End If
Next SelectedItemNumber
End With
YesOrNoAnswerToMessageBox = MsgBox("Continue?", vbYesNo)
Loop While YesOrNoAnswerToMessageBox = vbYes
Set wkbCrntWorkBook = Nothing
Set wkbSourceBook = Nothing
Set rngSourceRange1 = Nothing
Set rngSourceRange2 = Nothing
Set rngDestination1 = Nothing
Set rngDestination2 = Nothing
YesOrNoAnswerToMessageBox = Empty
SelectedItemNumber = Empty
Highest = Empty
counter = Empty
h1 = Empty
h2 = Empty
intColumnCount = Empty
End Function
要从“未回答的问题”列表中删除此问题,我将以“社区Wiki”样式回答此问题,以避免将他人的工作视为功劳。
正如Tim Williams在评论中回答的那样,答案的一部分是使用Long
变量而不是Integer
变量,以确保在进行大量迭代时不会超出允许的变量值。
正如user1828786的最后一条评论所表明的,答案的另一部分是扫描代码中的逻辑错误,以确保针对您进行的每个循环都重置了计数器变量。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.