【问题标题】:VBA (excel) - How do I feed UserForm Textbox to function?VBA (excel) - 我如何提供用户窗体文本框来运行?
【发布时间】:2015-07-24 17:29:01
【问题描述】:

我有一个 sub 可以清除用户表单文本框中的值,但我尝试将其转换为函数,以便可以将它与多个用户表单一起使用。

这是我的 userForm 代码(命令按钮代码)

Private Sub pdclear_Click()
    Dim passform As UserForm
    Set passform = NoteEntryForm1

    Dim inputtext As TextBox
    Set inputtext = frmBigInputBox

Call clear(passform, inputtext)
End Sub

这是我的功能

Function clear(passform As UserForm, inputbox As TextBox)
      passform.inputbox.Value = vbNullString
End Function

尝试执行返回“类型不匹配”错误。

我将它设置为用户窗体和文本框。我做错了什么?

谢谢你:)

【问题讨论】:

  • 我不认为这是你的问题,但你不应该使用 VB 使用的名称。 IE Userform 用户表单或工作表工作表。有时它会混淆它。
  • 正如@DavidGM 指出的那样,将您的用户表单称为其他名称(不是“userForm1”,而是像“theForm”之类的)。
  • 是的,我想过。真是糟糕的形式。但是,这仍然不能使这件事起作用。
  • 以黄色突出显示的行是“Set inputtext = frmBigInputBox”

标签: vba excel textbox userform


【解决方案1】:

您将函数定义为具有两个参数。然后在函数中连接参数,就好像一个是另一个的成员一样。那会报错。要处理用户表单上的输入框,请使用:

Function clear(passform As UserForm, inputbox As TextBox)
    passform.Controls(inputbox.Name).Value = vbNullString
End Function

甚至更简单:

Function clear(inputbox As TextBox)
    inputbox.Value = vbNullString
End Function

(我无法对此进行测试,因为我在 Excel 中没有带有表单的测试模块。)

【讨论】:

  • 我认为函数中的内容并不重要。调用过程中发生类型不匹配。我不知道为什么或如何克服它。
  • 一个是另一个的成员。如果我专门命名控件,它就可以正常工作 NoteEntryForm1.frmBigInputBox.Value = vbNullString
  • 代替Dim passform As UserForm 尝试Dim passform As Object 和其他对象类型变量。
【解决方案2】:

错误Type Mismatch 非常清楚,您正在设置一个声明为TextBox 的变量,显然不是 TextBox。 我的建议:

  1. 使用函数TypeName(object)检查类型,并确保它实际上是TextBox

    Debug.Print TypeName(frmBigInputbox)
    
  2. 如果 TextBox 是 passform 的子级,则告诉 VBA:

    Set inputtext = passform.frmBigInputBox
    

【讨论】:

  • NoteEntryForm1.frmBigInputBox 肯定是一个文本框
  • 然而,Set inputtext = passform.frmBigInputBox 会触发相同类型的不匹配错误。 :(
猜你喜欢
  • 2022-07-02
  • 1970-01-01
  • 1970-01-01
  • 2020-03-02
  • 2014-04-16
  • 1970-01-01
  • 1970-01-01
  • 2018-02-15
  • 2014-02-09
相关资源
最近更新 更多