我有一个宏:
宏在第 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")
该行表示调用
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
宏/功能/其他任何东西请注意,这是Rubberduck 的众多事情之一。 (我管理的一个开源 VBIDE 插件项目)可以警告您:
关于vba - 代码独立工作,但不作为整个程序的一部分,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50396926/