7

Withプロパティ/メソッドではなく、オブジェクト自体が必要な場合、内部で使用するオブジェクトを参照するにはどうすればよいですか?

With ThisWorkbook.Sheets("MySheet")
    Call MySub(ThisWorkbook.Sheets("MySheet")) ' works OK, but duplicated
    Call MySub(this) ' does not works
    .Range(...).Value2 = 1
    ...
End With

+ ここでの正しい用語は何ですか? これについてGoogleクエリを作成し、いくつかの有用な結果を取得する方法さえ知りません(withは一般的な単語であるため)...


更新:明確にするために、with ... as handleオブジェクト指向のthisキーワードではなく、Python構文のようなハンドルの観点から考えていました

4

3 に答える 3

4

これを試して

Sub Sample()
    Dim ws As Worksheet

    Set ws = ThisWorkbook.Sheets("MySheet")

    With ws
        MySub ws
        '~~> Rest of the code
    End With
End Sub

また

Sub Sample()
    Dim ws As Worksheet

    Set ws = ThisWorkbook.Sheets("MySheet")

    MySub ws

    With ws    
        '~~> Rest of the code
    End With
End Sub

編集

「これ」が存在しないという情報はありますか?– DeathApril 19 分前

this基本的に、クラスの現在のインスタンスを参照する C# のキーワードです。thisVBの に相当するものはMe.

このMeキーワードは、コードが現在実行されているクラスまたは構造体の特定のインスタンスを参照する方法を提供します。たとえば、ユーザーフォームで使用できます

Me.textBox1.Text = "Blah Blah"

VBAでは、 にMeも使用できますthisworkbook。たとえば、このコードをThisWorkbookコード領域に貼り付けると、ワークブックの名前が表示されます

Sub Sample()
    Debug.Print Me.Name
End Sub

同様に、シート コード エリアから上記のコードを実行すると、シート名が取得されます。

HTH

于 2012-06-29T17:40:39.927 に答える
4

そもそも使わないでどうするwithの?これにより、コードがはるかに読みやすくなり、メモリを使用しなくなり (withステートメントで一時変数を割り当てる必要があるため)、混乱が少なくなります。

Dim WS as WorkSheet
WS = ThisWorkBook.Sheets("MySheet")
Call vymaz_obrazky(WS)
WS.Range(...).Value2 = 1

上記のコードでは、総コストは 1 行のコード (DIMステートメント) の追加であり、全体でキーストロークが 9 回少なくなります。(DIMステートメントは19回のキーストローク、WS3行に変更すると6回のキーストロークですが、with(4)と重複(30)を節約したため、約9回のキーストロークを節約できます。)

于 2012-06-29T17:41:33.793 に答える