vba - 代码独立工作,但不作为整个程序的一部分

标签 vba excel

我有一个宏:

  • 创建一个新工作簿
  • 导入 .csv 文件
  • 格式化数据(将 consol 数据拆分为单独的工作表和其他操作)
  • 将单个工作表导出到不同的工作簿中。

  • 宏在第 4 步之前运行良好。

    我在第 4 步收到编译错误*。

    当我在第 4 步之后将工作簿另存为另一个工作簿,然后仅运行第 5 步时。它运作良好。

    我在创建新书时尝试了 .xls 和 .xlsx 两种格式,但错误仍然存​​在。

    我无法找到错误的根本原因。

    附录:

    用于创建新工作簿的代码
    Sub AddNew()
    Application.DisplayAlerts = False
        Dim thisWb As Workbook
        Set thisWb = ActiveWorkbook
        Workbooks.Add
        ActiveWorkbook.SaveAs Filename:=thisWb.Path & "\FA Registers by Location.xlsx"
    Application.DisplayAlerts = True
    End Sub
    

    用于将单个工作表导出到工作簿中的代码(步骤 4)
    Sub SplitWorkbook()
    Dim FileExtStr As String
    Dim FileFormatNum As Long
    Dim xWs As Worksheet
    Dim xWb As Workbook
    Dim FolderName As String
    Application.ScreenUpdating = False
    Set xWb = Application.ThisWorkbook
    DateString = Format(Now, "yyyy-mm-dd hh-mm-ss")
    FolderName = xWb.Path & "\" & xWb.Name & " " & DateString
    MkDir FolderName
    For Each xWs In xWb.Worksheets
        xWs.Copy
        If Val(Application.Version) < 12 Then
            FileExtStr = ".xls": FileFormatNum = -4143
        Else
            Select Case xWb.FileFormat
                Case 51:
                    FileExtStr = ".xlsx": FileFormatNum = 51
                Case 52:
                    If Application.ActiveWorkbook.HasVBProject Then
                        FileExtStr = ".xlsm": FileFormatNum = 52
                    Else
                        FileExtStr = ".xlsx": FileFormatNum = 51
                    End If
                Case 56:
                    FileExtStr = ".xls": FileFormatNum = 56
                Case Else:
                    FileExtStr = ".xlsb": FileFormatNum = 50
            End Select
        End If
        xFile = FolderName & "\" & Application.ActiveWorkbook.Sheets(1).Name & FileExtStr
        Application.ActiveWorkbook.SaveAs xFile, FileFormat:=FileFormatNum
        Application.ActiveWorkbook.Close False
    Next
    MsgBox "You can find the files in " & FolderName
    Application.ScreenUpdating = True
    End Sub
    
  • 编译错误 DateString = Format(Now, "yyyy-mm-dd hh-mm-ss")

  • Compile Error

    请注意,不包括完整的代码。如果您想查看代码的任何部分,请询问。

    最佳答案

    DateString = Format(Now, "yyyy-mm-dd hh-mm-ss")
    


    该行表示调用 VBA.Strings.Format功能,对吧?尝试完全限定它:
    DateString = VBA.Strings.Format(Now, "yyyy-mm-dd hh-mm-ss")
    

    如果这解决了您的问题,那么您就是标识符阴影的受害者,并且有一个 Format在范围内的某处函数,它没有相同数量的参数。

    VBA 按以下顺序解析标识符:
  • 在当前范围/程序内
  • 在当前模块内
  • 当前项目内
  • 在引用的库中,按照它们在添加/删除引用对话框中出现的顺序

  • 因此,如果您有 Public Sub Format()在你项目的某个地方,然后是任何不合格的Format调用将被解析为 Format过程,以及任何要调用 VBA.Strings.Format 的调用站点将抛出您所看到的非常编译器错误 - 因为提供的参数与已解析的 Format 中定义的参数不匹配的签名。

    所以你有两个选择:
  • 重命名您的 Format宏/功能/其他任何东西
  • 在任何地方使用完全合格的成员(member)电话

  • 请注意,这是Rubberduck 的众多事情之一。 (我管理的一个开源 VBIDE 插件项目)可以警告您:

    "Shadowed declaration" Rubberduck inspection result

    关于vba - 代码独立工作,但不作为整个程序的一部分,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50396926/

    相关文章:

    javascript - 使用 VBA 单击网页按钮

    javascript - Excel VBA addWatermarkFromText 的格式

    VBA “Save to PDF” 即使取消也能保存

    excel - 如何使用 VBA 将图像嵌入到 Outlook 电子邮件中

    excel - 此代码的第一个 if 语句中的 else 部分在哪里

    Excel VBA 格式(<日期>, "mmmmm-yy")未按预期工作

    html - 从文件名更改的网站下载 Excel 文件

    vba - 如何在VBA中输入UTF-8

    vba - 选择行直到空单元格

    excel - 将图形提取为图像