2012-02-01 99 views
0

我想編寫以下Excel的VBA - 表使用工作表名稱的變量(Arrary( 「Sheet2中」, 「表Sheet 3」))

表(Arrary( 「Sheet2中」, 「表Sheet 3」))選擇。通過爲表格名稱創建一個變量來替換「Sheet2」,「Sheet3」。

Sub SelectMultipleSheets() 

    Dim sSheets as String 
    Dim intSheet As Integer 

    sSheets = "" 

    For intSheet = 1 To Sheets.count 

     If Sheets(intSheet).Name <> "Sheet1" And intSheet <= Sheets.count Then 

      Sheets(intSheet).Cells.Hyperlinks.Delete 'deleting hyperlinks 

      sSheets = sSheets & Chr(34) & Sheets(intSheet).Name & Chr(34) & "," 

     End If 

    Next 

    sSheets = Left(sSheets, Len(sSheets) - 1) 
    Sheets(Array(sSheets)).Select 

End Sub 

我得到一個錯誤信息「下標不在範圍內。我該如何解決這個問題?謝謝

回答

2

當你在這一行

sSheets = sSheets & Chr(34) & Sheets(intSheet).Name & Chr(34) & "," 

你實際上是創建一個逗號分隔字符串變量和Excel沒有辦法知道的,你實際上意味着逗號分隔字符串列表建立數組列表參數。

你可以通過直接創建數組來解決它,就像這樣。

Option Explicit 

Sub SelectMultipleSheets() 
    Dim intSheet As Integer 
    Dim arSheets() As String 
    Dim intArrayIndex As Integer 

    intArrayIndex = 0 

    For intSheet = 1 To Sheets.Count 

     If Sheets(intSheet).Name <> "Sheet1" Then 

      Sheets(intSheet).Cells.Hyperlinks.Delete 'deleting hyperlinks 

      ReDim Preserve arSheets(intArrayIndex) 
      arSheets(intArrayIndex) = Sheets(intSheet).Name 
      intArrayIndex = intArrayIndex + 1 
     End If 
    Next 

    Sheets(arSheets).Select 

End Sub 
0

它不能那麼做,即使它看起來像它應該工作。相反,下面的代碼利用Select'sReplace參數來添加到循環中的選擇,boolNoSelectionYet變量確保它不會添加到循環開始之前存在的選擇,例如,如果在例程啓動時選擇Sheet1,不想讓它保持選中狀態。

Sub SelectMultipleSheets() 
Dim intSheet As Integer 
Dim boolNoSelectionYet As Boolean 

boolNoSelectionYet = True 
For intSheet = 1 To Sheets.Count 
    If Sheets(intSheet).Name <> "Sheet1" Then 
     Sheets(intSheet).Cells.Hyperlinks.Delete 
     Sheets(intSheet).Select (boolNoSelectionYet) 
     boolNoSelectionYet = False 
    End If 
Next 
End Sub 

請注意,我刪除了If聲明的第二部分,因爲您的For Next循環確保intSheet不會超過工作表的數量。