0

私が抱えている問題は、モデム名とポートについてVB6でWMIクエリを要求していることです。

FOR EACH LOOPがあり、それぞれに1つ以上の値があります(2つのポートが表示されるため、それぞれに2つの値があります)。LabelまたはTextBoxに割り当てることができるように、変数を割り当てるにはどうすればよいですか?

ループを介して変数を割り当てる方法と変数を呼び出す方法のVB6コードサンプルが欲しいですか?

これは私のコードです(MsgBoxを使用すると表示されますが、2回別々にポップアップしますが、変数を割り当てられるようにする必要があります)

For Each objItem In colItems
    MsgBox ("Test -" & objItem.Name)
Next

これを試してみたところ、番号がわかりましたが、参照方法がわかりません

For Each objItem In colItems
    Dim myCount
    myCount = myCount + 1

    Debug.Print objItem.Name & myCount  '** i just tested with Debug.Print
Next

Form1.TextBox1.Text = myCount(1)  '** THIS DOES NOT WORK
Form1.TextBox2.Text = myCount(2)

どうすれば割り当てることができますかobjItem.Name(2つの異なるオブジェクトが返されます)?これは私が得るものです:

1SAMSUNG Mobile Modem #2
2SAMSUNG Mobile Modem Diagnostic Serial Port (WDM) (COM1)

(1と2はmyCountからのものです)

myCountを使用せずに、各値に独自の変数を割り当てたいだけです。

4

3 に答える 3

1

100 個以下のオブジェクトがあり、各オブジェクトに 2 つの値があると仮定すると、値のペアを 2 次元配列に格納する 1 つの方法を次に示します。

Dim myVar(100,2) As String
Dim myCount as Integer
myCount = 0
For Each objItem In colItems
    If myCount Mod 2 = 0 Then     
        'read the first value
        myVar(myCount,1) = objItem.Name
    Else
        'read the second value then move to the next object
        myVar(myCount,2) = objItem.Name
        myCount = myCount + 1      
    End If
Next

'Now if you want to print the value of the fifth object:
MsgBox("(Object #5) has first value: " & myVar(5,1) )
MsgBox("And the second value is: " & myVar(5,2) )
于 2013-03-03T13:18:06.653 に答える
0

あなたの説明から、.Nameプロパティには、個別に保存したいいくつかのフィールドが含まれていると思いますか?

.Nameのフィールドがどのように区切られているかわからないので、以下の例では、スペースで区切られていると見なします。

Option Explicit

Private Type ModemData
  strField() As String
End Type

Private mudtModems() As ModemData

Private Sub ReadModems()
  Dim intCount As Integer
  Dim strName As String
  ReDim mudtModems(31) As ModemData
  intCount = 0
  For Each objItem In colItems
    strName = objItem.Name
    mudtModems(intCount).strField = Split(strName, " ")
    intCount = intCount + 1
  Next
  ReDim Preserve mudtModems(intCount - 1) As ModemData
End Sub

最初に32個のモデムを保持するアレイを作成し、最後にアレイを実際のサイズに変更します

各udtModemのstrField配列は、.Nameのフィールド数に応じて、さまざまな長さになります。

.Nameのフィールドを正しく分割するには、おそらく別のルーチンが必要になります。代わりにそのルーチンを使用してくださいSplit(strName, " ")

于 2013-03-04T06:40:36.140 に答える
0

実際には、すでに変数にデータがあります。その変数の名前は colItems です。colItems は Collection 型の変数です。 コレクションの詳細については、MSDN を参照してください。

コレクションに 2 つのアイテムが含まれており、コレクションが 1 ベースであることがわかっている場合は、次のようにコレクションを使用できます。

myTextbox1.Text = colItems(1).Name
myTextbox2.Text = colItems(2).Name

または、それらを変数に割り当てたい場合:

Dim myString1 as String
Dim myString2 as String

myString1 = colItems(1).Name
myString2 = colItems(2).Name

難しいのは、コレクションに含まれるアイテムの数がほとんどわからないことです。関数が返す要素の数を知る方法がないため、通常、使用している API の開発者はコレクションを提供しています。このような場合、コレクションが適しています。

関数からの戻り値としてコレクションが与えられた場合、それをいくつかのテキストボックスに表示するだけでは、データを処理するのに十分な方法になることはめったにありません。通常、ある種のリストボックスの方が適しています。Textbox を使用する正当な理由がある場合は、テキスト ボックスのコントロール配列が解決策として考えられます。

于 2013-03-04T09:15:09.520 に答える