Excel 使用VBProject.VBComponents调用宏进行vba疑难解答

Excel 使用VBProject.VBComponents调用宏进行vba疑难解答,excel,vba,Excel,Vba,我希望能够将字符串传递给函数,并让它调用宏,其中宏名称=传递的字符串 我使用的是Excel 16,打开了对象库和扩展性引用,并启用了必要的信任中心设置。请在下面找到我的代码: Dim b As Object Set b=Workbooks("PERSONAL.XLSB").VBProject.VBComponents(macroNameString) Call b 代码在“调用b”时停止,错误为“错误438:对象不支持此属性或方法”。请告知你将如何处理这个问题。谢谢大家! 要使用的正确语法是:

我希望能够将字符串传递给函数,并让它调用宏,其中宏名称=传递的字符串

我使用的是Excel 16,打开了对象库和扩展性引用,并启用了必要的信任中心设置。请在下面找到我的代码:

Dim b As Object
Set b=Workbooks("PERSONAL.XLSB").VBProject.VBComponents(macroNameString)
Call b

代码在“调用b”时停止,错误为“错误438:对象不支持此属性或方法”。请告知你将如何处理这个问题。谢谢大家!

要使用的正确语法是:

Application.Run "'PERSONAL.xlsb'!" & macroNameString

其中,
macroNameString
是要运行的
子模块的名称(而不是它所在的
模块)。

正确的语法是:

Application.Run "'PERSONAL.xlsb'!" & macroNameString


其中,
macroNameString
是要运行的
的名称(不是它所在的
模块)。

尝试使用
应用程序。运行
而不是
调用
。更多信息:@JustynaMK感谢您的支持
Application.Run
会产生相同的错误。很抱歉,我忘了添加
Call
只能在从同一工作簿运行时使用,为了从其他工作簿运行,您需要使用
Application.Run
。不知道如何将它与您的
b
参数结合起来,因为它现在是这样的-我个人会将b的数据类型更改为
String
,并将其值设置为
b=“PERSONAL.XLSB!macroNameString”
根据Shai Rado的回答,我已经取消了前两行代码。现在我正在使用
Application.Run“'PERSONAL.xlsb'!”和macroNameString
,它仍然会抛出一个错误,尽管是不同的错误(1004)。@JustynaMK感谢您的帮助。我重新启动了Excel,Shai的解决方案成功了(耸耸肩)。我猜整个“你是否关闭并再次打开”有时也适用于Office…尝试使用
应用程序。运行
而不是
调用
。更多信息:@JustynaMK感谢您的支持
Application.Run
会产生相同的错误。很抱歉,我忘了添加
Call
只能在从同一工作簿运行时使用,为了从其他工作簿运行,您需要使用
Application.Run
。不知道如何将它与您的
b
参数结合起来,因为它现在是这样的-我个人会将b的数据类型更改为
String
,并将其值设置为
b=“PERSONAL.XLSB!macroNameString”
根据Shai Rado的回答,我已经取消了前两行代码。现在我正在使用
Application.Run“'PERSONAL.xlsb'!”和macroNameString
,它仍然会抛出一个错误,尽管是不同的错误(1004)。@JustynaMK感谢您的帮助。我重新启动了Excel,Shai的解决方案成功了(耸耸肩)。我猜整个“你把它关了又开了”有时也适用于办公室…谢谢你的意见。此代码返回“运行时错误“1004”:无法运行宏“Personal.xlsb”!nameISent。该宏可能在此工作簿中不可用,或者所有宏都可能被禁用。作为参考,我正在使用的宏/函数以及我正在调用的宏/函数都是从Personal.xlsb运行的,宏已启用,子模块和模块的名称相同,并且手动运行宏可以工作。@提问者1001您可以发布其余的代码吗?相关部分?@questioner1001尝试更改子模块的名称(不要与模块相同),感谢您的持续帮助。我更改了子模块的名称。
Application.Run“'PERSONAL.xlsb'!”和ModuleName
会导致相同的1004错误,其中ModuleName是模块的名称
Application.Run“'PERSONAL.xlsb'!”¯oNameString
以macroNameString作为子名称会导致弹出标准的“查看宏”列表,并提示您选择并运行。此函数的作用是跳过此步骤。这个输出使我相信,使用子名称作为VBA的输入需要更高的特异性,或者使用模块名称是正确的(但有一些潜在的问题),感谢您的帮助!我重新启动了Excel,您原始答案中的代码行运行正常。哦,谢谢你的意见。此代码返回“运行时错误“1004”:无法运行宏“Personal.xlsb”!nameISent。该宏可能在此工作簿中不可用,或者所有宏都可能被禁用。作为参考,我正在使用的宏/函数以及我正在调用的宏/函数都是从Personal.xlsb运行的,宏已启用,子模块和模块的名称相同,并且手动运行宏可以工作。@提问者1001您可以发布其余的代码吗?相关部分?@questioner1001尝试更改子模块的名称(不要与模块相同),感谢您的持续帮助。我更改了子模块的名称。
Application.Run“'PERSONAL.xlsb'!”和ModuleName
会导致相同的1004错误,其中ModuleName是模块的名称
Application.Run“'PERSONAL.xlsb'!”¯oNameString
以macroNameString作为子名称会导致弹出标准的“查看宏”列表,并提示您选择并运行。此函数的作用是跳过此步骤。这个输出使我相信,使用子名称作为VBA的输入需要更高的特异性,或者使用模块名称是正确的(但有一些潜在的问题),感谢您的帮助!我重新启动了Excel,您原始答案中的代码行运行正常。哎呀。