Excel中VB标超出范围修复宏
问题描述:
这里是navrecExcel中VB标超出范围修复宏
Public navrec(1 To 100000, 100) As Variant
navrec(r,c) = Cells(r,c)
声明我遇到标超出范围误差对上述环状线路以下程序
我试图内使用VB-Excel的有限工作知识修复此宏。我假设前面的循环范围'navreclr
& navreclc
正在引用太大的数据区域?
Sub import_navr()
EntityList = mywkb.Sheets("Source Files").Range("nrlist")
navreclr = 0
days = 0
fname = navrecloc
If Dir(fname) = "" Then
MsgBox ("Please save current PVAL. Macro will end")
End
End If
Workbooks.Open fname, ReadOnly:=True
Set tempbk = ActiveWorkbook
navreclr = Cells(1048576, 1).End(xlUp).Row
navreclc = Sheets(1).Cells(1, 1).End(xlToRight).Column
For r = 1 To navreclr
For c = 1 To navreclc
navrec(r, c) = Cells(r, c)
Next c
Next r
For c = 1 To navreclc
If navrec(1, c) = "ENTITY_ID" Then einr = c
If navrec(1, c) = "SHARE_CLASS" Then scnr = c
If navrec(1, c) = "LEDGER_ITEMS" Then linr = c
If navrec(1, c) = "BALANCE_CHANGE" Then bcnr = c
Next c
Set ofs = CreateObject("Scripting.FileSystemObject")
mywkb.Sheets("Source Files").Range("nrlist").Cells(1, 2) = ofs.GetFile(fname).Datelastmodified
tempbk.Close savechanges:=False
End Sub
答
问题是您的数组navrec
不是保存所有单元格的正确大小。您可以通过添加以下代码直接在上述循环解决这个问题(我已经包括下面的环):
ReDim navrec(navreclr, navreclc) As Variant
For r = 1 To navreclr
For c = 1 To navreclc
navrec(r, c) = Cells(r, c)
Next c
Next r
当你确定你的动态数组的维度,在这个例子中,一般最好是也要动态地声明数组,而不是使用常量大小。尽量不要过度使用内存,除非有充分理由这样做。
您还需要在全局模块中声明变量dimensionless,否则将会出现一个错误,指出“Array already dimensioned。”。
替换:
Public navrec(1 To 100000, 100) As Variant
与
Public navrec() As Variant
消除这种错误。
答
可以直接在一个操作中拾取的矩形阵列的值:
Set tempbk = Workbooks.Open(fname, ReadOnly:=True)
With tempbk.Sheets(1)
'get row/col counts
navreclr = .Cells(.Rows.Count, 1).End(xlUp).Row
navreclc = .Cells(1, .Columns.Count).End(xlToLeft).Column
'assign range value to array
nacrec = .cells(1).Resize(navreclr, navreclc).Value
End With
此过程是许多之一。 navrec的原始声明是'公共navrec(1到100000,100)作为Variant'我添加了您的调整,并且代码表明该变量已经被标注。我不确定是否应该编辑似乎是全球变数的公开声明。 – phillipsK 2014-10-06 23:32:18
查看我的文章更新。声明'navrec'无量纲,它将工作。 – 2014-10-06 23:41:33