在Excel中设置过程以供热键使用

时间:2018-02-28 10:27:38

标签: excel excel-vba vba

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

2 个答案:

答案 0 :(得分:2)

  1. 将程序Sub SaveWorksheetsAsCSV()放入模块中。
  2. Public
  3. 前面写下Public Sub SaveWorksheetsAsCSV()字样
  4. 请确保仅将其写为一次
  5. 然后它将独立于任何工作表。 这很好,让它留下来:

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

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

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

答案 1 :(得分:1)

设置Public Sub SetMacroOptions() Application.MacroOptions _ Macro:="SaveWorksheetsAsCSV", _ Description:="Saves the sheet as a CSV", _ HasShortCutKey:=True, _ ShortcutKey:="s" End Sub
https://msdn.microsoft.com/en-us/vba/excel-vba/articles/application-macrooptions-method-excel

ARG HOST="welfare-dev testapi"
ENV HOST "${HOST}"
ARG SITENAME="Institusjon"
ENV SITENAME "${SITENAME}"
RUN cd ${TESTDIR}/sensiotools/sensiotools && cd test && \
  ./testapi-events.py --activate --sitename="${SITENAME}" --host="${HOST}" --dbcheck --debug --wait=0.5 && \
  ./testapi-events.py --deactivate --sitename="${SITENAME}" --host="${HOST}" --dbcheck --debug

不确定是否可以使用此方法使用 Alt 进行设置。