Excel / VBA代码忽略输入的参数

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Excel / VBA代码忽略输入的参数相关的知识,希望对你有一定的参考价值。

我有一个VBA sub,应该在需要时加载用户代码模块。我的问题是,当我通过(“ModuleA”,“。bas”)时,代码将返回“ModuleB”。 ModuleB在指定的文件路径中不存在(已删除)。

当特定传递不同的值时,此代码如何返回不存在的文件? 'filepath'变量包含正确的路径,并且正确地传递给import语句。

此外,“删除”语句不会删除传递给它的模块。

我从来没有碰到这样的问题而且我不知道该怎么办。

我尝试过:重新启动excel / PC,重命名模块以更改路径,添加代码以删除子模块末尾的模块。

    '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''SJH
'LoadModule
'
'Loads in a module with a specified name from the BigData Directory
'
'extension includes the ., so .frm or .bas
'
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
Public Sub LoadModule(ByVal ModuleName As String, ByVal extension As String)
    ThisWorkbook.Activate
    Err.Clear
     'handle errors in-line...
    On Error Resume Next

    'include reference to "Microsoft Visual Basic for Applications Extensibility"
    Dim vbproj As VBIDE.VBProject
    Dim vbc As VBIDE.VBComponent
    Dim filepath As String

    filepath = ("\uslafnas01GE_LABBigData" & ModuleName & extension)
    Set vbproj = ActiveWorkbook.VBProject

    'Error will occur if component with this name is not in the project
    Set vbc = vbproj.VBComponents(ModuleName)

    If Err.Number <> 0 Then
        Err.Clear
        'so add it...
        vbproj.VBComponents.Import filepath
        If Err.Number <> 0 Then
           MsgBox ("Could not import " & ModuleName & " Module: " & filepath)
        End If
    Else
        'no error - vbc should be valid object
        'remove existing version first before adding new version
        vbproj.VBComponents.Remove vbc
        vbproj.VBComponents.Import filepath
        If Err.Number <> 0 Then
            MsgBox ("New " & ModuleName & " couldn't replace old " & ModuleName & " Module " & filepath)
        End If
    End If


    'Set vbc = Nothing
    'Set vbproj = Nothing


End Sub
答案

模块的名称不是由其文件名决定的,而是由隐藏的VB_Name属性决定的,如果您在记事本中打开模块,则可以看到该属性。

如果你在记事本中打开ModuleA.bas,我怀疑你会在Option Explicit上面看到这是第一行:

Attribute VB_Name = "ModuleB"

文件名无关紧要,这个属性决定了VBA模块的编程名称。

无法在VBE中(直接)查看或编辑模块和成员属性。

以上是关于Excel / VBA代码忽略输入的参数的主要内容,如果未能解决你的问题,请参考以下文章

带有 2 个对象参数的 Excel VBA 对象子调用给出编译错误:预期 =

Excel VBA 代码上的自动填充错误

使用 VBA 在 Excel 中的 SQL 表上使用参数化查询

Excel VBA在生成副本的工作表中插入本工作簿中的VBA模块代码

Excel vba 忘了密码 怎么办

求EXCEL VBA代码。单元格输入内容保存后自动锁定有内容单元格。下次打开后不可编辑。