【问题标题】:Setting up procedures in Excel for hotkey use在 Excel 中设置程序以供热键使用
【发布时间】:2018-02-28 20:35:35
【问题描述】:

我希望将以下过程嵌入到启用宏的 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 以导入另一个工具。

【问题讨论】:

    标签: excel vba


    【解决方案1】:
    1. 将过程Sub SaveWorksheetsAsCSV() 放入模块中。
    2. 在前面写上Public这个词Public Sub SaveWorksheetsAsCSV()
    3. 确保只写一次

    然后它将在任何工作表上独立工作。 这很好,让它留下来:

    Private Sub Workbook_Open()
        Application.OnKey "+%s", "SaveWorksheetsAsCSV"
    End Sub
    

    根据您(用户用户)使用 Excel 的方式,编写类似的Workbook_Close() 过程可能是个好主意:

    Private Sub Workbook_Close()
        Application.OnKey "+%s"
    End Sub
    

    【讨论】:

    【解决方案2】:

    设置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 进行设置。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-04-21
      • 2017-09-16
      • 1970-01-01
      • 1970-01-01
      • 2018-12-21
      相关资源
      最近更新 更多