我有一个宏:
宏运行良好,直到第4步。
我在第4步得到了编译错误*。
当我将step4之后的工作簿保存为另一个工作簿,然后仅运行步骤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
答案 0 :(得分:4)
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
过程以及任何调用{{1}的调用网站抛出你所看到的编译器错误 - 因为提供的参数不会与解析的VBA.Strings.Format
签名中定义的参数匹配。
所以你有两个选择:
Format
宏/功能/其他内容重命名为请注意,这是许多事情之一Rubberduck(我管理的开源VBIDE加载项目)可以警告您: