1

そのようなばかげた質問をして申し訳ありません..しかし、私の人生のために私はそれを得ることができません..私はどこでも検索しました...これは同じエラーを与える私のコードの再作成です。これは私が再現できる最も基本的な例です。

なぜラベルを宣言しなければならないのかわかりませんか?(またはオブジェクト)

私が達成しようとしているのは、メインフォームを使用してすべてのモジュールを呼び出すことです。

これがフォームです

'frmMain.frm
Option Explicit

Public Sub btnOpen_Click()
    GetNum
End Sub

これはモジュールです

'modGet.bas
Option Explicit

Public Sub GetNum()
    Dim a As String
    Dim b As String

    a = "hello"
    b = "world"
->  Label1.Caption = a    'ERROR, Compile Error, Variable not Defined. (vb6)
    Label2.Caption = b
End Sub

はい、「btnOpen」という名前のボタンを持つフォームがあります。「Label1」と「Label2」という名前の2つのラベルがあります。

私が追加した場合..

Dim Label1 As Object  'in MODULE

別のエラーが発生します。エラー'91'オブジェクト変数またはブロック変数が設定されていません

すべてを1つのFORMに入れると、機能します。(ただし、別々のモジュールを使用したい)「OPTIONEXPLICIT」とコメントアウトしました...同じエラー。

別のテストで、TextBoxのエラーが発生しました。

TextBox1.Text = x

これに対する答えが得られたら、すべてに適用できます...それも単純で、immaは愚かだと確信しています。:-(

私の主なものの1つは、WMIのクエリです。これにより、ラベルのエラー「91」が発生します(これはFor Eachループにあります)。

Label1.Caption = objItem.Antecedent

誰かが私を助けてくれたら...

4

2 に答える 2

4

Label1とLabel2、およびその問題に関する他のコントロールがmodGet.basのスコープに存在しないため、エラーが発生します。これらは、フォームからのみ参照(アクセスまたは設定されたプロパティ)できます。追加時に発生する別のエラーDim Label1 As Objectは、Label1をLabelではなくObjectとして定義し、オブジェクトにCaptionプロパティがないために発生します。GetNum subを.basモジュールに入れる正当な理由がない限り、それをフォームに移動すると機能するはずです。

2番目の例を変更しました。実行がフォームに戻るときに文字列をテキストボックスに割り当てることができるように、渡された文字列を変更します。カプセル化の考え方に反するため、別のモジュールのフォームのコントロールを変更することには反対です。

'modGet.bas
Option Explicit

Public Function GetHello() As String
    Dim strHello As String

    strHello = "Hello"
    GetHello = strHello

End Function

'frmMain.frm
'Option Explicit

Public Sub btnOpen_Click()
    Label1.Caption = GetHello()
End Sub

少し違う。

'MyModule.bas
Public Sub HelloWorld ByRef Value1 As String, ByVal Value2 As String)

    On Error GoTo errHelloWorld

    Value1 = "Hello"
    Value2 = "World"

    Exit Sub

errHelloWorld:
    ' deal with the error here

End Sub

'frmMain.frm
Option Explicit

Private Sub frmMain_Load()
    Dim strText1 As String
    Dim strText2 As String

    HelloWorld(strText1, strText2)
    Text1.Text = strText1
    Text2.Text = strText2
End Sub

2番目の例でも基本的なエラー処理を追加しました

于 2013-03-01T23:26:56.100 に答える
4

使用する

form1.label1.caption = a

ただし、form1がロードされていることを確認してください

于 2013-03-02T08:26:42.927 に答える