我希望下面的过程嵌入在启用宏的Excel(xlsm)文件中。
Sub SaveWorksheetsAsCSV()
Dim WS As Excel.Worksheet
Dim CurrentWorkbook As String
Dim CurrentFormat As Long
CurrentWorkbook = ThisWorkbook.FullName
CurrentFormat = ThisWorkbook.FileFormat
Application.DisplayAlerts = False
For Each WS In ThisWorkbook.Worksheets
WS.Copy
ActiveWorkbook.SaveAs Filename:=CurrentWorkbook & "-" & WS.Name & ".csv", FileFormat:=xlCSV
ActiveWorkbook.Close savechanges:=False
ThisWorkbook.Activate
Next
Application.DisplayAlerts = True
End Sub
我希望将过程分配给热键(Shift + Alt + S),因此我也嵌入了此过程。
Private Sub Workbook_Open()
Application.OnKey "+%s", "SaveWorksheetsAsCSV"
End Sub
我将这两个过程放在“Microsoft Excel Objects”文件夹的“ThisWorkbook”中,因为我希望在打开文件后,可以从任何工作表中使用热键的保存为CSV过程。
我可以使用Alt + F8调出宏列表并运行ThisWorkbook.SaveWorksheetsAsCSV,所有工作表都按预期保存为CSV文件。但是当我使用热键(Shift + Alt + S)时,我收到错误消息“无法运行宏...”我相当肯定这不是一个权限,因为测试我打开“启用所有宏”在宏安全设置中。
有人可以帮我正确设置吗?此XLSM文件将用作人们将复制和修改然后转换为CSV以导入另一个工具的模板。
Sub SaveWorksheetsAsCSV()
放在一个模块中。Public
这个词Public Sub SaveWorksheetsAsCSV()
然后它将独立于任何工作表。这很好,让它留下来:
Private Sub Workbook_Open()
Application.OnKey "+%s", "SaveWorksheetsAsCSV"
End Sub
根据您(用户用户)使用Excel的方式,编写类似的Workbook_Close()
过程可能是个好主意:
Private Sub Workbook_Close()
Application.OnKey "+%s"
End Sub
设置Application.MacroOptions
https://msdn.microsoft.com/en-us/vba/excel-vba/articles/application-macrooptions-method-excel
Public Sub SetMacroOptions()
Application.MacroOptions _
Macro:="SaveWorksheetsAsCSV", _
Description:="Saves the sheet as a CSV", _
HasShortCutKey:=True, _
ShortcutKey:="s"
End Sub
不确定是否可以使用此方法使用Alt进行设置。