With Worksheets(Sheet1) '* Error here
'my code here
End With
マイシートCodeName
はsheet1です。
ここでエラーは型の不一致を示します。コード名を使用してシートを参照
誰かがエラーを削除しますか?
With Worksheets(Sheet1) '* Error here
'my code here
End With
マイシートCodeName
はsheet1です。
ここでエラーは型の不一致を示します。コード名を使用してシートを参照
誰かがエラーを削除しますか?
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
利用、二重引用符彼らは変数宣言されたかのようにあなたのコードに直接シートコードネームを使用する前とSheet1
With Worksheets("Sheet1") '* Error here
'my code here
End With
後:
Sub UsingSheetCodeName()
With Sheet1
.[a1] = Sheet1.Name
End With
End Sub
'With Sheet1'ステートメントの中にいるので、'。[a1] = .Name'を使用できます。 –
@ShaiRado、そうです。私はコードネームを使用するさまざまな方法を示していました。 –
コード内でWorksheet.Index
を使用するには:
With Worksheets(1) ' << this is the index for Sheet1
.Range("A1").Value = "Test" ' modify the value in cell A1
End With
'.Name =" "'シート名を指定する必要がない方法を教えてもらえますか? – user007
名前を知る必要はまったくありません。変更する方法を示しています。このオプションは削除します。コードで何をしたいですか? –
@ user007あなたは上記の私のコメントを読んだことがありますか?あなたの記事の中のあなたの質問にあなたの質問に回答した場合は、その答えを「答え」としてください(そのポストの隣にある小さな** V **をクリックしてください)、それはマークまたは鉱山です。 –
多分このコードは、異なる名前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
をあなたはBUシートのコード名を何を意味するのですか?シート名を表す変数を使用しますか?あなたは例を挙げて説明できますか? –
すべてのシートには、sheet1、sheet2などのコード名があります シートの名前を変更する場合 :sheet1〜 "abc" コード名は同じです。 – user007
申し訳ありませんが、私はあなたに従っていません。ワークシートには2つの関連するプロパティがあります:1つは 'Sheet.Name'で、シート名を「Sheet1」から「abc」に変更した後、コード内で' Worksheets( "Sheet1" ) 'を' Worksheets( "abc") 'に変更します。もう一つは 'Index'です。これは同じです。あなたの名前を変更しても、 'sheet1'の例を使って、' Worksheets(1) 'であなたのコードに記述することができます。だから2つのうちどちらが** "コードネーム" **を意味しますか? –