如何分配 excel sheet 中的特定按钮来执行某些特定任务?

How to assign a specific button in excel sheet to do some specific task?

我想在此 excel sheet 上添加一个按钮,其名称应为“另存为 PDF”。

当我按下这个按钮时,它应该将 excel sheet 的所有数据保存为 PDF 路径 - M:\formats\‘File Name’

‘文件名’应为H8号单元格的值。

换句话说,当我单击“另存为 PDF”按钮时,它应该将 excel 文件以 pdf 格式保存到上述路径中,并使用单元格编号 H8 中写入的名称。

例如,如果名称 ANDREW PITTERSON 写在 H8 单元格中,那么它应该以相同的名称保存,即安德鲁·皮特森。

请看这张快照。

http://i.imgur.com/JJdlFSi.jpg 谢谢

这里有一篇 link 非常简单的文章,可以做这类事情。 http://www.contextures.com/excelvbapdf.html

我在 Excel 2013 年测试了代码示例,它运行良好。该代码询问用户将 PDF 保存在哪个目录中。

但是您的问题是您还想保存到特定位置(无需用户干预)并从单元格中获取文件名。

更新 - 您还希望在创建 PDF 后将文件另存为 XLSM。

下面的代码可以满足您的需求(所有功劳都归功于原作者,但我自己的强迫症导致我将 var 名称更改为我喜欢的格式)。

我猜 OP 想知道它是如何完成的,而不仅仅是知道答案,所以我试图让这个例子易于理解,而不是试图观察最佳实践 - 我'感谢您没有为此投反对票。

请注意,您必须先打开 Excel 代码 window,找到工具,然后 参考文献 和 select 'Microsoft Scripting Runtime' 然后单击确定。这让您可以使用许多有用的功能。

我将目录路径(硬编码)和文件名分开,以便我可以更清楚地获得 'BaseName'。显然,这可以在更少的行中完成,但存在使其更难遵循的风险。

Sub ExportAPDF_and_SaveAsXLSM()

    Dim wsThisWorkSheet As Worksheet
    Dim objFileSystemObject As New Scripting.FileSystemObject

    Dim strFileName As String
    Dim strBasePath As String

    strBasePath = "M:\formats\"
    strFileName = Range("H8")

    On Error GoTo errHandler

    Set wsThisWorkSheet = ActiveSheet

    wsThisWorkSheet.ExportAsFixedFormat _
        Type:=xlTypePDF, _
        Filename:=strBasePath & strFileName, _
        Quality:=xlQualityStandard, _
        IncludeDocProperties:=True, _
        IgnorePrintAreas:=False, _
        OpenAfterPublish:=False

    MsgBox "PDF file has been created."

    ' Now we need to get rid of the .PDF extension.  Many ways to code round this, but here is a built in function.
    strFileName = objFileSystemObject.GetBaseName(strFileName) & ".xlsm"

    wsThisWorkSheet.SaveAs Filename:=strBasePath & strFileName, FileFormat:=xlOpenXMLWorkbookMacroEnabled

    MsgBox "Workbook now saved in XLSM format."


exitHandler:
        Exit Sub
errHandler:
        MsgBox "Could not create PDF file"
        Resume exitHandler

End Sub

只需将按钮 (ActiveX Button) 添加到您的工作表中,然后从按钮代码 window 中调用此子程序(或者直接将代码粘贴到按钮代码 window 中)。

希望对您有所帮助。

添加: 要将文件另存为 XLSX(无宏),请将 SUB 末尾的代码替换为:

Application.DisplayAlerts = False
strFileName = objFileSystemObject.GetBaseName(strFileName) & ".xlsx"
wsThisWorkSheet.SaveAs Filename:=strBasePath & strFileName, FileFormat:=xlOpenXMLWorkbook
Application.DisplayAlerts = False