2015-05-28 63 views
1

我在VBA初學者,我一直在抓我的頭,整天試圖找出什麼是錯我的代碼:下標越界,數組變量

Sub DataTransfer(): 
    Dim position As Integer, location (1 To 9) As String 
    location(1) = "BC" 
    location(2) = "Calgary" 
    location(3) = "Edmonton" 
    location(4) = "Major Projects" 
    location(5) = "Minneapolis" 
    location(6) = "Saskatchewan" 
    location(7) = "Seattle" 
    location(8) = "Toronto" 
    location(9) = "Winnipeg" 

    For position = 1 To 9 
     Worksheets(location(position)).Select 
     Cells(1, 2).Value = location(position) 
    Next position 
End Sub 

編輯:很抱歉的不確定性我的問題。我最終想要做的是實際上能夠將第三條最後一行(將城市名稱寫入工作表)更改爲我想要的任何函數,以便按照我認爲合適的方式修改工作表。這實際上是我開始解決問題的一個更大的子程序的一部分。這些工作表散佈在其他工作表之間,所以不幸的是,@ nutsch的解決方案不會真正實現我想要的(但是要感謝任何一種方式)。

我遇到的最大問題是,這個確切的代碼有時會按預期工作,其他時間會在第四行返回「下標超出範圍」錯誤。

+0

你確定所有的工作表命名正確嗎? – nutsch

+0

你得到這個錯誤是哪一行? – TMH8885

+0

歡迎來到Stack Overflow!我編輯過你的標題。請參閱:「[應該在其標題中包含」標籤「](http://meta.stackexchange.com/questions/19190/)」,其中的共識是「不,他們不應該」。 –

回答

0

我假設你試圖把工作表名稱放入它對應的工作表中?如果是這樣,問題是您正在使用Select而不是ActivateWorksheet焦點。

由於您使用的是Cells而沒有限定符,因此它指的是ActiveSheet,它在代碼中未被更改,因此成爲問題。

兩個解決方案:

  • 使用Activate像你想這將使Cells工作。
  • 通過在表單對象之前確認對Cells的調用。

選項1

Sub DataTransfer(): 
    Dim position As Integer, location(1 To 9) As String 
    location(1) = "BC" 
    location(2) = "Calgary" 
    location(3) = "Edmonton" 
    location(4) = "Major Projects" 
    location(5) = "Minneapolis" 
    location(6) = "Saskatchewan" 
    location(7) = "Seattle" 
    location(8) = "Toronto" 
    location(9) = "Winnipeg" 

    For position = 1 To 9 
     Worksheets(location(position)).Activate 
     Cells(1, 2).Value = location(position) 
    Next position 
End Sub 

選項2

Sub DataTransfer(): 
    Dim position As Integer, location(1 To 9) As String 
    location(1) = "BC" 
    location(2) = "Calgary" 
    location(3) = "Edmonton" 
    location(4) = "Major Projects" 
    location(5) = "Minneapolis" 
    location(6) = "Saskatchewan" 
    location(7) = "Seattle" 
    location(8) = "Toronto" 
    location(9) = "Winnipeg" 

    For position = 1 To 9 
     'this line really does nothign now 
     Worksheets(location(position)).Select 

     Worksheets(location(position)).Cells(1, 2).Value = location(position) 
    Next position 
End Sub 

我寧願選擇2,因爲它不需要激活Worksheet第一。應儘可能避免激活和選擇。它們放慢速度,使代碼與強健的相反。

最後,正如@nutsch指出的那樣,有更簡單的方法可以對此做些簡單的事情,但值得知道爲什麼你的代碼無法工作。

+0

謝謝,這些代碼工作喜歡魅力。但是,再次,當我將代碼複製粘貼到新的工作簿中時,它也按照它的意圖運行。我真的很困惑,爲什麼代碼有時會工作,有時不會。 –

0

可能是工作表名稱問題。你有多少工作表不需要更新?你能做

dim sht as worksheet 

for each sht in activeworkbook.sheets 
sht.cells(1,2)=sht.name 
next