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”的按钮,我有 2 个名为“Label1”和“Label2”的标签

如果我添加..

Dim Label1 As Object  'in MODULE

我得到一个不同的错误..错误'91'对象变量或未设置块变量

如果我将所有内容放在 1 FORM 中,它可以工作..(但我想使用单独的模块)我注释掉了“OPTION EXPLICIT”......同样的错误。

在另一个测试中,我收到了 TextBox 的错误。

TextBox1.Text = x

一旦我得到了这个答案,我就可以将它应用于所有事情......我相信它也很简单而且我觉得很愚蠢。:-(

我的主要事情之一是查询 WMI,我得到标签的错误“91”(这是在 For Each 循环中)..但它同样的错误,就像它让我声明对象..(使用模块)

Label1.Caption = objItem.Antecedent

如果有人可以请帮助我...

4

2 回答 2

4

利用

form1.label1.caption = a

但请确保 form1 已加载

于 2013-03-02T08:26:42.927 回答
4

您收到错误是因为 Label1 和 Label2,以及您的其他控件不存在于 modGet.bas 的范围内。它们只能从表单中引用(访问或设置的属性)。添加时出现的不同错误Dim Label1 As Object是因为您将 Label1 定义为对象,而不是标签,并且对象没有 Caption 属性。除非您有充分的理由将 GetNum 子放在 .bas 模块中,否则将其移到表单中,它应该可以工作。

我修改了第二个例子。它将修改传递给它的字符串,当执行返回到表单时,您可以将字符串分配给您的文本框。我反对从另一个模块修改表单上的控件,因为它违背了封装的想法。

'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

我还在第二个示例中添加了基本错误处理

于 2013-03-01T23:26:56.100 回答