2017-11-17 4 views
0

3つのタブを持つスプレッドシートがあります。最初の2つのタブを選択するには次のコードが必要です。私はほとんどそれを持っていますが、Sheets(Array(c)).Select部分はエラーを返します。基本的に私はシート(アレイ(「シート1」、「シート2」))として返すために最後のセクションを必要としています。すべてのヘルプは高く評価されVBAコードを使用してスプレッドシートで複数のタブを選択

Sub HideUnhide2() 
Dim a As String 
Dim b As Double 
Dim c As String 
Application.Calculation = xlManual 
     For I = 1 To 100 
      If Range("d5") <> "Entity:" Then Exit For 
      'Start 
      c = c & ", " & Chr(34) & ActiveSheet.Name & Chr(34) 


      'End 
      b = b + 1 

      ActiveSheet.Next.Select 
     Next I 
    ' End If 
      c = Right(c, Len(c) - 2) 
      MsgBox c 
      Sheets(Array(c)).Select 

Application.Calculation = xlAutomatic 
MsgBox "Total tabs updated = " & b 

End Sub 

を選択します。

+0

?選択した各シートで何かしますか? – Slai

+0

マクロレコーダーを学びます。マクロレコーダーを使用してください。マクロレコーダーが大好きです。それは私があなたに与えることができる最大の贈り物です。 – nicomp

+0

@Slaiはい、基本的にお互いの鏡像であるタブを持つ複数のスプレッドシートです。私はすべてを選択して更新する必要があります。 –

答えて

1

これはいかがですか?

Sub SelectTabs() 

    Dim numSheets As Integer 
    numSheets = 5 
    Dim aSheets() As String 
    ReDim aSheets(numSheets - 1) 

    For i = 0 To numSheets - 1 
     aSheets(i) = ActiveWorkbook.Worksheets(i + 1).Name 
    Next i 

    ActiveWorkbook.Worksheets(aSheets()).Select 

End Sub 
+0

投稿したコードは、異なる数のタブを持つ複数のスプレッドシートで使用する必要がある複雑なループの縮小バージョンです。基本的には、タブに「D5」という値の「Entity:」があるかどうかを確認するコードが必要です。そうであれば、この条件を満たす他のすべてのタブと一緒に選択します。タブの数が常に固定されている場合は、提案されたソリューションが機能しますが、番号が変わっても機能しない場合があります。私のオリジナルの投稿を見る完全なコードで単純なバージョンを修正しました。 –

+0

@BillSingh「スプレッドシート」とは、あなたが思うとは思っていません。オブジェクトモデルはそれらを 'Workbook'と呼びます。 「ワークシート」は「スプレッドシート」内の「タブ」である。 –

+0

@ Mat'sMug私はフォローしていません。あなたは詳細を教えていただけますか?私の問題は実際に配列に文字列を渡す方法にあり、問題はコードシート(​​Array(c))の最後の行にあります。あなたがこれについての視点を持っているかどうか私に教えてください。 –

0

Worksheet.Select Methodは、現在の選択を追加または交換したい場合は、指定できます:

Dim ws as Worksheet, replaceSelection As Boolean 
replaceSelection = True 

For Each ws In ThisWorkbook.Worksheets 
    If ws.Range("d5") = "Entity:" Then 
     ws.Select Replace:=replaceSelection 
     replaceSelection = False 
    End If 
Next 

を現在のシートから始めて選択するには:

Dim ws as Worksheet, replaceSelection As Boolean 
replaceSelection = True 

While Not ws Is Nothing 
    If ws.Range("d5") = "Entity:" Then 
     ws.Select Replace:=replaceSelection 
     replaceSelection = False 
    End If 
    Set ws = ws.Next 
Wend 
あなたがそれらを選択し必要なのですか、なぜ
+0

2番目のコードを実行しようとすると、実行したいマクロを尋ねます。私はすべてのマクロのリストを持つポップアップボックスを手に入れます。何が間違っているのですか?私はこのコードをスプレッドシートのモジュールに保存しています。 –

+1

@BillSingh VBAは、カーソルがメソッド内にない限り、実行したいマクロを推測できません – Slai

関連する問題