我已经搜索并尝试了6个小时,但无法解决问题。

我的想法:我想在Excel-VBA中显示一个用户窗体,其中包含一些单选按钮,一个列表元素和一个文本字段。 我想将一些参数传递给用户表单以使用它,因为我不想在用户表单代码(有效)内进行计算,也不想声明全局变量。

我尝试了以下有效的方法:

  • 直接在用户表单中计算

  • 全局变量

这没有用:

  • 将userform声明为变量并使用该变量

  • [Public|Private|Friend] Property Let (ByRef|ByVal)所有可能组合

  • Property Set在任何情况下都不起作用

来自我的主代码(模块)

Option Explicit

Sub main()
    With New usr_mainInput
        .counter = 3
        .Show
    End With
End Sub

我在用户表单中的代码

Option Explicit

Private miCounter As Integer

Property Get counter() As Integer
    counter = miCounter
End Property
Property Let counter(c As Integer)
    Set miCounter = c
End Property

Private Sub userform_initialize()
    Dim i As Integer
    For i = 1 To counter           'miCounter don't work as well
        Debug.Print i
    Next i
End Sub

Private Sub btn_ok_Click()
    Me.Hide
End Sub

未设置对象变量或带块变量

如果涉及到Property Let counter()它将丢弃编译错误:

所需的对象(错误424)

#1楼 票数:2 已采纳

 Property Let counter(c As Integer) Set miCounter = c End Property 

仅由于Set关键字而需要一个对象 这不是参考分配,而是值分配。

像这样查看它:

Property Let counter(c As Integer)
    Let miCounter = c
End Property

只是实际上不键入Let关键字(尽管它可以工作), 它已经过时了 :)

还要注意的是对隐性修饰Property Let/Set程序参数,始终是Byval -这比在VBA中THR隐改性剂是别的不同ByRef ; 考虑使ByVal修饰符明确。


 Private Sub userform_initialize() Dim i As Integer For i = 1 To counter 'miCounter don't work as well Debug.Print i Next i End Sub 

该循环永远不会迭代任何事情,因为Initialize处理程序在这里运行:

 With New usr_mainInput 

我的意思是,它在New usr_mainInput指令返回时运行, 但在将对象引用提供给With块之前 (请注意,这适用于任何类,而不仅是形式)-早于.counter = 3赋值! 根据经验,您想在该处理程序中初始化实例状态,而不要使用它。

考虑改用Activate处理程序。 该命令将在.Show调用后立即运行。

  ask by Patrick translate from so

未解决问题?本站智能推荐:

1回复

私人字符串变量未显示在文本标签vba中

我想将参数传递给用户表单。 我尝试的解决方案是设置用户窗体的家庭属性(名称为InformationMissing),并设置私有变量。 这是我的用户窗体的代码 我从另一个将MyProp属性设置为String(在这种情况下为“ aa”)的子项中使用此Userform: 我要在这里做的是在
1回复

VBA将用户窗体控件作为参数传递

我想让用户表单标签的.Caption由位于另一个模块中的 Sub 修改。 第一次调用该过程时,它返回Vs_Label = "something else"。 第二次调用该过程时,它返回Label_S.Capiton = "something"。 有人可以向我解释这里发生了什么吗?
1回复

VBA将参数传递给userform

我有一个用户表单,希望将其传递给它。 我尝试了几种不同的方法来执行此操作,但似乎没有用。 这是子代码: Option Explicit Sub Additional_Comments_Normal() Dim MSG1 As Integer Dim msg As String Di
1回复

如何将属性作为参数传递给用户窗体控件?

我的问题我正在创建一个函数,该函数允许我将用户窗体中控件的属性从一种状态转换为另一种状态,从而创建动画效果,例如自定义下拉列表。 但是,我似乎无法弄清楚是否有办法将特定属性作为参数传递,以保持函数更具动态性。 简化示例Private Sub test() ' Transition the he
6回复

VBA:如何将表单作为参数传递

我有一个简单的用户表单,上面有一个按钮。 我想将此表单传递给另一个模块中的函数 - 但即使在同一个模块中,它也无法按预期工作: 当我单击按钮时,它会将其打印到调试控制台: 所以在Test()子里面, Caption是空白的。 任何想法为什么这不起作用? 注意:如果我使用Variant作为参数类型,它
1回复

VBA_如何使用按钮在用户窗体之间传递不同的值

使用按钮在用户窗体(UF2和UF3)之间传输值时遇到了问题。 我的目的是使用不同的按钮来更改userform3的标签中的内容。 例如,如果我单击“ aaa to 3”,则出现userform3,标签中的文本将为“ aaa”。 这是Userform2: 代码在这里: 和User
2回复

在VBA上创建用户窗体

我正在按照该网站http://www.excel-easy.com/vba/userform.html上创建用户表单的确切步骤进行操作。 我遵循了所有步骤,但是无法正常工作。 请查看错误图片。 当我粘贴此代码时。 该代码将有错误 请先访问该网站 。
2回复

VBA:在用户窗体的函数之间传递变量

我正在创建一个 vba 用户窗体,在完成表单后,带有表单详细信息的字符串变量将粘贴到工作簿中的另一个工作表中。 我想在使用单击 addBtn 后将值dStr粘贴到新工作表中。 将不胜感激这方面的任何帮助。 我在别处读到你可以设置变量 public,但也不完全确定如何做到这一点。