1

「Sheet1」および/または「Sheet2」があるかどうかを確認するために、プログラムにワークブックを検索させようとしています。ある場合は、「Results」と「DataEntries」に名前を変更したいと思います (以下のコードを参照)。シートが以前の実行で既に名前が付けられている場合) 新しい名前でコードを続行します。[ユーザーが初めてプログラムを実行したとき、ワークブックには既定でシート 1 とシート 2 が含まれている場合があります。私のプログラムは以前の実行を保存するため、ユーザーが以前にプログラムを実行したことがある場合、シート 1 とシート 2 には既に新しい正しい名前が付けられている可能性があります)。

私のコードの最初の行は次のとおりです。

Dim ws As Excel.Worksheet
    For Each ws In ActiveWorkbook.Sheets
        If ws.Name = Sheet1 Then
            Sheet1.Name = Results
        ElseIf ws.Name = Sheet2 Then
            Sheet2.Name = DataEntries
        End If
    Exit For
    Next ws

Results.Cells.Clear
DataEntries.Cells.Clear

プログラムを実行しようとすると、この正確な順序で次のエラーが表示されます。

1) オブジェクトはこのプロパティまたはメソッドをサポートしていません

2) オブジェクト '_Worksheet' のメソッド 'Name' が失敗しました

3) 必要なオブジェクト

4) 必要なオブジェクト

その後、プログラムは引き続き実行されます (ただし、必要なアクションは実行されません)。単純な構文の混乱に違いありませんが、この問題を解決できません。誰かが私を正しい方向に向けることができますか? 必要に応じて残りのコードを投稿しますが、必要ない場合もあります。

4

2 に答える 2

1

文字列の周りに引用符がなくExit For、間違った場所にありました:

Dim ws As Excel.Worksheet
For Each ws In ActiveWorkbook.Sheets
    If ws.Name = "Sheet1" Then
        Sheet1.Name = "Results"
    ElseIf ws.Name = "Sheet2" Then
        Sheet2.Name = "DataEntries"
        Exit For
    End If
Next ws

を適切な場所に配置すると、「 Sheet2 Exit For」が見つかって名前が変更された後にループが停止します。

于 2013-06-25T20:12:49.513 に答える