dimとsetinvbaの違いは何ですか



What Is Difference Between Dim



解決:

使用する理由はありませんオブジェクト参照を参照しない限り設定します。そのコンテキストでのみ使用することをお勧めします。他のすべての単純なデータ型の場合は、代入演算子を使用するだけです。それは良い考えですdim(dimension)ただし、すべての変数:

単純なデータ型の例は次のとおりです。整数、長さ、ブール値、ストリング。これらは単なるデータ型であり、独自のメソッドとプロパティはありません。



Dim i as Integer i = 5 Dim myWord as String myWord = '必要なものは何でも'

の例オブジェクトは範囲、ワークシート、またはワークブック。これらには独自のメソッドとプロパティがあります。

myRange as Range Set myRange = Sheet1.Range( 'A1')を暗くします

せずに最後の行を使おうとするとセットすると、VBはエラーをスローします。今、あなたはオブジェクトは、そのプロパティとメソッドにアクセスできると宣言しました。



myString = myRange.Value 
  • Dimは変数を宣言します。

    Dim r As Range
  • 設定 セット オブジェクト参照への変数。

    セットr = Range( 'A1')

しかし、これはあなたが本当に求めていることではないと思います。



時々私は使用します:

Dim r as Range r = Range( 'A1')

これは決して機能しません。それなしランタイムエラー#91を受け取るように設定します オブジェクト変数またはWithブロック変数が設定されていません 。これはあなたが しなければならない 使用する変数値をオブジェクト参照に割り当てるように設定します。次に、上記のコード 意思 仕事。

以下のコードはあなたが何であるかを示していると思います 本当 について尋ねる。型を宣言せずにr be a代わりにバリアント型。

Public Sub test()Dim r debug.print TypeName(r)Set r = Range( 'A1')debug.print TypeName(r)r = Range( 'A1')debug.print TypeName(r)End Sub

それでは、ここで何が起こっているのかを分析してみましょう。

  1. rはバリアントとして宣言されています

    `Dim r`'TypeName(r)は 'E​​mpty'を返します。これは、初期化されていないバリアントの値です。
  2. rはに設定されますセル「A1」を含む範囲

    Set r = Range( 'A1') 'TypeName(r)は' Range 'を返します
  3. rはに設定されます 価値 デフォルトのプロパティ Range( 'A1')。

    r = Range( 'A1') 'TypeName(r)は' String 'を返します

この場合、範囲のデフォルトのプロパティは次のとおりです。.Valueなので、次の2行のコードは同等です。

r = Range( 'A1')r = Range( 'A1')。Value

デフォルトのオブジェクトプロパティの詳細については、ChipPearsonの「クラスのデフォルトメンバー」を参照してください。


あなたも設定例:

他の時に私は使用します

セットr = Range( 'A1')

これは、最初にそれを宣言しないと機能しませんrは範囲またはバリアントオブジェクト...を使用して薄暗い声明-あなたが持っていない場合を除いてオプション明示が有効になっている必要があります。いつも。それ以外の場合は、宣言していない識別子を使用しており、それらはすべて暗黙的にバリアントとして宣言されています。


Dim:変数を定義しています(ここで:rはRange型の変数です)

設定:プロパティを設定します(ここでは、rの値をRange( 'A1')に設定します。これはタイプではなく値です)。

オブジェクトでsetを使用する必要があります。rが単純な型(int、stringなど)の場合は、次のように記述します。

Dim r As Integer r = 5