如何在 VBA 中使用另一个宏/函数(UDF)调用对象/宏/用户窗体?

Posted

技术标签:

【中文标题】如何在 VBA 中使用另一个宏/函数(UDF)调用对象/宏/用户窗体?【英文标题】:How to call Object/macro/userform with another macro/Function(UDF) in VBA? 【发布时间】:2021-01-31 15:05:39 【问题描述】:

我想在 Excel VBA 中使用 VBA UDF/宏调用对象/子例程/用户窗体。我举个例子。

示例场景: 我有 03 命令按钮,用于根据 A1 和 B1 单元格值更改字体大小写。有了图片01,我的目的就解决了。在这里,我写了03次类似的模式代码。所以,现在我很想用用户定义的函数编写这段代码,然后像图片 02 一样回忆它。

请注意,我知道这可能可以通过 If...Elseif 语句(如 Image 03)来解决。但我不想通过这种方法获得解决方案,因为我有很多宏,我想调用然后使用像 Image 02 这样的简单函数。

【问题讨论】:

请不要放你代码的图片!曾经!请编辑您的问题并按原样粘贴代码。这是一个UDF函数的问题,恐怕它只能在被调用的单元格中返回。如果您能更好地解释您想要完成的任务,我们将向您展示另一种实现方式... 我们可能需要测试你的代码,没有人喜欢写代码看图片。 我尝试将代码复制粘贴到那里。但我不知道,代码行坏了,看起来很乱。那就是他们我已经分享了所有代码的谷歌驱动器。感谢您的快速回复。 @mohsin 可能是做你一开始应该做的事情的好时机,拿tour并观察formatting rules。 为了使代码看起来像在你的模块中一样,你应该把它放在```你的代码```字符之间。 1 键前的字符... 【参考方案1】:
private sub commandbutton1_click()
  CommonMacro "Sheet1.UcaseFont"
end sub

private sub commandbutton2_click()
  CommonMacro "Sheet1.LcaseFont"
end sub

private sub commandbutton3_click()
  CommonMacro "Sheet1.ProperCaseFont"
end sub

Function CommonMacro(byval MacroRun as string)
  ...
  Application.Run MacroRun
  ...
end function

【讨论】:

@mohsin 它对我有用,并且根据您显示的代码,它将对您有用。如果它不起作用,请解释它是如何不起作用的。 @mohsin 如果您不想提及Sheet1,则将UcaseFont 等宏从工作表模块中移出到标准模块中。对于 2,CommonMacro x. @mohsin 应该是Application.Run MacroRun,然后在宏中显示用户表单。 @mohsin Function CommonMacro(byval MacroRun as UserForm), CommonMacro New UserForm1? @mohsin ***.com/q/51397325/11683?

以上是关于如何在 VBA 中使用另一个宏/函数(UDF)调用对象/宏/用户窗体?的主要内容,如果未能解决你的问题,请参考以下文章

使用 UDF 的慢速宏、求解器和公式

从工作表将二维数组传递给 VBA/UDF 函数

在VBA中,怎样打开或者调用另一个EXCEL文件

在另一个 UDF 中调用 UDF

VBA (Ms-Access) 从宏调用成员函数

如何在 VBA 的另一个函数中调用我在 VBA 中创建的函数?