2017-01-05 4 views
2
With Worksheets(Sheet1) '* Error here 
    'my code here 
End With 

マイシートCodeNameはsheet1です。
ここでエラーは型の不一致を示します。コード名を使用してシートを参照

誰かがエラーを削除しますか?

+0

をあなたはBUシートのコード名を何を意味するのですか?シート名を表す変数を使用しますか?あなたは例を挙げて説明できますか? –

+0

すべてのシートには、sheet1、sheet2などのコード名があります シートの名前を変更する場合 :sheet1〜 "abc" コード名は同じです。 – user007

+1

申し訳ありませんが、私はあなたに従っていません。ワークシートには2つの関連するプロパティがあります:1つは 'Sheet.Name'で、シート名を「Sheet1」から「abc」に変更した後、コード内で' Worksheets( "Sheet1" ) 'を' Worksheets( "abc") 'に変更します。もう一つは 'Index'です。これは同じです。あなたの名前を変更しても、 'sheet1'の例を使って、' Worksheets(1) 'であなたのコードに記述することができます。だから2つのうちどちらが** "コードネーム" **を意味しますか? –

答えて

5

1)インデックスによってシートを参照してください:

With Worksheets(1) 
    '<stuff here> 
End With 

`インデックス」 "ブック内のシートの順序" に依存しています。シートオーダーをシャッフルすると、これ以上同じシートを参照しないことがあります。

2)名前でシートを参照してください:

With Worksheets("Your Sheet Name") 
    '<stuff here> 
End With 

これは、ワークシートの.Name財産であり、Excelワークシート]タブでとVBAプロジェクトエクスプローラで、括弧内に表示名です。

3)コードネームでシートを参照してください:

あなたが実際にワークシートの.CodeNameプロパティを使用していたが示唆されました。上記の2つの例のように角括弧内の参照はできませんが、上記の回答に反して存在します!作成時にシートに自動的に割り当てられ、以前に作成されたCodeNames内の次の未使用の数値が「シート」になります。

CodeNameを使用することの利点は、(Index異なり)シート順序に依存せず、ユーザがExcelでシートの名前を変更することによって簡単にNameを変更した場合、それが変化しないことです。

不都合な点は、コードが複雑であいまいである可能性があることです。 CodeNameは読み取り専用ですので[1]これは改善できませんが、上記の利点を保証します!詳細については、参照先のドキュメントを参照してください。

それを使用しての最初の方法:直接...

With Sheet1 
    '<stuff here> 
End With 

それを使用しての第二の方法:間接的に、より多くの明快さや柔軟性を提供することがあり、ワークシートのCodeNameプロパティを使用する方法を示しています...

シートをループしてCodeNameプロパティを読み取ると、最初に希望のシートのIndexまたはNameプロパティを見つけることができます。次に、これを使用してシートを参照することができます。

Dim sh as WorkSheet 
Dim shName as String 
Dim shIndex as Integer 

' Cycle through all sheets until sheet with desired CodeName is found 
For Each sh in ThisWorkbook.WorkSheets 

    ' Say the codename you're interested in is Sheet1 
    If sh.CodeName = "Sheet1" Then 

     ' If you didn't want to refer to this sheet later, 
     ' you could do all necessary operations here, and never use shName 
     ' or the later With block 

     ' If you do want to refer to this sheet later, 
     ' you will need to store either the Name or Index (below shows both) 

     ' Store sheet's Name 
     shName = sh.Name 

     ' Store sheet's Index 
     shIndex = sh.Index 

     Exit For 

    End If 

Next sh 


' Check if match was found, do stuff as before if it was! 
If shName = "" Then 

    MsgBox "Could not find matching codename" 

Else 

    ' Equally to the next line, could use Worksheets(shIndex) 
    With Worksheets(shName) 
     '<stuff here> 
    End With 

End If 

[1] https://msdn.microsoft.com/en-us/library/office/ff837552.aspx

+0

これは非常に参考になり、 。しかし、私はそれを明確にすると良いかもしれないと思った: 'CodeName'は実行時にのみ**読み込み専用** **私はそれが重要な違いだと感じています。開発モードでは、既存のシートのプロパティウィンドウで 'codeName'を_手動で変更することができます。 (これは、VBA開発者ウインドウのビュータブを介してアクセスされます)。これにより、コーダーは、デフォルトの「シート番号」ではなく、より有益な「コード名」を常に使用するシートを提供できます。 – Mistella

+0

おかげさまで@Mistella、他の読者のための便利な説明 – Wolfie

-1

利用、二重引用符彼らは変数宣言されたかのようにあなたのコードに直接シートコードネームを使用する前とSheet1

With Worksheets("Sheet1") '* Error here 
    'my code here 
End With 
+0

**下付き文字が範囲外です** シートの名前が頻繁に変更されます。だから私はシートのコード名を使用したい。 – user007

+0

他のコードに問題があります。 'subscript out of range'を与える行を置くことができます – harun24hr

+0

同じ行にこのエラーがあります。 'with Worksheets( "sheet1")' – user007

3

後:

Sub UsingSheetCodeName() 
    With Sheet1 
     .[a1] = Sheet1.Name 
    End With 
End Sub 
+0

'With Sheet1'ステートメントの中にいるので、'。[a1] = .Name'を使用できます。 –

+0

@ShaiRado、そうです。私はコードネームを使用するさまざまな方法を示していました。 –

1

コード内でWorksheet.Indexを使用するには:

With Worksheets(1) ' << this is the index for Sheet1 
    .Range("A1").Value = "Test" ' modify the value in cell A1 
End With 
+0

'.Name =" "'シート名を指定する必要がない方法を教えてもらえますか? – user007

+0

名前を知る必要はまったくありません。変更する方法を示しています。このオプションは削除します。コードで何をしたいですか? –

+0

@ user007あなたは上記の私のコメントを読んだことがありますか?あなたの記事の中のあなたの質問にあなたの質問に回答した場合は、その答えを「答え」としてください(そのポストの隣にある小さな** V **をクリックしてください)、それはマークまたは鉱山です。 –

0

多分このコードは、異なる名前Sインデックス

Sub DisplaySheetnames() 

    Dim wks As Worksheet 
    For Each wks In Worksheets 
     Debug.Print "Index", wks.Index, "of sheet with name: " & wks.Name, "and", "codename " & wks.CodeName 
    Next 

End Sub 
関連する問題