繁体   English   中英

VBA:将 arguments 传递给用户表单时出现问题

VBA: Problem with passing arguments to userform

提示:本站收集StackOverFlow近2千万问答,支持中英文搜索,鼠标放在语句上弹窗显示对应的参考中文或英文, 本站还提供   中文繁体   英文版本   中英对照 版本,有任何建议请联系yoyou2525@163.com。

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

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

我尝试了以下方法:

  • 直接在用户表单中计算

  • 全局变量

这没有奏效:

  • 将 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

Object 变量或未设置块变量

如果涉及到Property Let counter()它会抛出一个编译错误:

需要 Object(错误 424)

1 个回复
Property Let counter(c As Integer) Set miCounter = c End Property

一个object 是必需的,只是因为Set关键字。 这不是引用赋值,而是值赋值。

像这样查看它:

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

只是不要真正输入Let关键字(虽然它起作用),它已经过时了:)

另请注意, Property Let/Set过程参数的隐式修饰符始终为 Byval - 这与Byval中的其他任何内容不同,其中隐式修饰符为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指令返回时运行,但在 object 引用被提供给With块之前(请注意,这对于任何 class 都是如此,而不仅仅是表单) - 这远远早于.counter = 3分配,规则拇指,您想在该处理程序中初始化实例 state,而不是使用它。

请考虑改用Activate处理程序。 那个将在.Show调用之后立即运行。

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

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

2 Excel VBA用户窗体组合框问题

我在使用Excel文档中的用户窗体中的组合框时遇到了困难。 组合框未出现在用户窗体中,或者组合框保持空白,当我在其中输入任何字符时,项目列表将出现,但显示2到3次,而不是一次。 当我选择一个项目时,所选项目不会出现在框中。 好像Excel ^^随机抽取一个,无论我从列表中选择哪个项目,它始 ...

3 VBA:在 UserForm 的函数之间传递变量

我正在创建一个 vba 用户表单,在完成表单后,带有表单详细信息的字符串变量将粘贴到工作簿中的另一个工作表中。 在使用单击 addBtn 后,我想将值dStr粘贴到新工作表中。 将不胜感激任何帮助。 我在其他地方读到过,您可以将变量设置为 public,但也不确定如何设置。 ...

4 将数组从模块传递到 VBA 中的用户窗体列表框

我正在尝试将模块中的预定义数组传递给用户表单列表框。 我已将数组分配为 UserForm 中的公共变量,并尝试从模块中分配它。 这是模块的代码 这是用户窗体的代码 当我逐步执行代码时,当用户窗体到达模块中的 ListArray 分配时,它会打开,但是在用户窗体中,数组被分配为空,并且在到达列表框生成 ...

5 VBA模块和传递参数

我有一个模块,可以从应用程序的任何部分调用该模块,以检查用户系统上是否安装了特定字体;如果没有,请安装该字体并在继续之前再次检查 主要应用 模块“ RequiredFont” 我的第一个问题是: 是使参数可用于所有函数和子函数,并在每次调用时传递它们的最好方法吗? ...

6 Excel VBA:传递参数

我正在使用VB处理一些Excel功能 - 但我在一些例子中遇到了困难。 当前版本是Excel 2007,使用空白工作簿; 我已经添加了一个模块并尝试了如下函数: 但是,我收到错误#VALUE! 在我的单元格中,在做Addtwo时(5,5)。 当试图做Addtwo(B2,B3)时, ...

7 在VBA中散列和传递参数

我有vba代码,我需要满足特定字符串模式的单元格计数。 例如: 此代码搜索特定的文本,如果满意,则给出指定单元格中该文本的计数。 我需要为30多个单元实现相同的代码。 因此,如何创建哈希并在此处传递“关键字”作为参数,如果满足该条件,则应在单元格中更新计数。 ...

8 通过 VBA 传递多个 arguments?

我的 VBA 不能使用超过第一个参数。 这是我的子 header: Sub filterPivotTables(ParamArray argumentsArray() As Variant, sheetName As String,pivotTableName As String,pivotFie ...

2020-06-02 01:06:28 1 36   excel/ vba
9 VBA-UserForm上控制字体的怪异问题

我有一个VBA UserForm (在Word文档中),在Frame控件中有一些CheckBox控件。 我所有的CheckBox控件都设置为使用Tahoma字体(控件的默认设置),但是其中之一显示为Verdana。 也就是说,它在属性对话框中显示Tahoma,但是实际上用于显示文本的字体 ...

10 Excel电子表格转换为UserForm VBA问题

我制作了一张工作表,现在已经转换为用户窗体,但是我使用的VB代码不再起作用,我将复制使用的旧代码和新的代码,不断告诉我“找不到债务人”,我们将不胜感激。 旧代码: 新代码: 我使用了另一个代码处理同一问题的另一个UserForm; 旧代码: 新代码: ...

2010-09-04 10:21:16 1 1122   excel/ vba
暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2022 STACKOOM.COM