2014-10-06 40 views
0

這裏是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 

回答

0

問題是您的數組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 

消除這種錯誤。

+0

此過程是許多之一。 navrec的原始聲明是'公共navrec(1到100000,100)作爲Variant'我添加了您的調整,並且代碼表明該變量已經被標註。我不確定是否應該編輯似乎是全球變數的公開聲明。 – phillipsK 2014-10-06 23:32:18

+0

查看我的文章更新。聲明'navrec'無量綱,它將工作。 – 2014-10-06 23:41:33

0

可以直接在一個操作中拾取的矩形陣列的值:

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