如何在Excel工作表中指定特定按钮来执行某些特定任务?

时间:2015-09-26 13:24:35

标签: excel excel-vba excel-formula excel-2010 excel-2007 vba

我想在这张excel表上有一个按钮,其名称应为“另存为PDF”。

当我按下此按钮时,它应该将excel表的所有数据保存为PDF格式的路径-M:\ formats \'File Name'

'文件名'应为单元格No H8的值。

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

例如,如果名称ANDREW PITTERSON是用H8单元格编写的,那么它应该以相同的名称保存。 ANDREW PITTERSON。

请看这个快照。

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

1 个答案:

答案 0 :(得分:0)

这是一篇简单文章的链接,可以做这类事情。 http://www.contextures.com/excelvbapdf.html

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

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

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

下面的代码完成了你所追求的目标(归功于原作者,但我自己的强迫症导致我将var名称更改为我喜欢的格式)。

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

请注意,您必须首先打开Excel代码窗口,进入工具,然后引用并选择“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按钮)添加到工作表中,然后从按钮代码窗口调用此子代码(或者直接将代码粘贴到按钮代码窗口中)。

希望有所帮助。

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

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