Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Vba Excel加载项将文件名更改为加载项的名称,但不应更改_Vba_Excel - Fatal编程技术网

Vba Excel加载项将文件名更改为加载项的名称,但不应更改

Vba Excel加载项将文件名更改为加载项的名称,但不应更改,vba,excel,Vba,Excel,我需要您帮助我使用VBA创建外接程序,然后我将其另存为外接程序,以便能够在所有Excel工作簿上使用,并将其发送给我的朋友 外接程序只是将活动工作表中的打印区域保存为与工作簿同名的PDF文件,它将PDF保存到桌面,并作为宏正常工作 但是,当我保存为PDF并使用它时,它会使用与加载项相同的名称保存PDF文件,而不是使用工作簿的名称 有什么建议吗 VBA代码是: Sub Save_as_pdf() Dim FSO As Object Dim s(1) As String Dim sNewFilePa

我需要您帮助我使用VBA创建外接程序,然后我将其另存为外接程序,以便能够在所有Excel工作簿上使用,并将其发送给我的朋友

外接程序只是将活动工作表中的打印区域保存为与工作簿同名的PDF文件,它将PDF保存到桌面,并作为宏正常工作

但是,当我保存为PDF并使用它时,它会使用与加载项相同的名称保存PDF文件,而不是使用工作簿的名称

有什么建议吗

VBA代码是:

Sub Save_as_pdf()
Dim FSO As Object
Dim s(1) As String
Dim sNewFilePath As String

    Set FSO = CreateObject("Scripting.FileSystemObject")

    s(0) = "C:\Users\" & Environ("UserName") & "\Desktop\" & ThisWorkbook.Name

    If FSO.FileExists(ThisWorkbook.FullName) Then
        '//Change Excel Extension to PDF extension in FilePath
        s(1) = FSO.GetExtensionName(s(0))

        If s(1) <> "" Then
            s(1) = "." & s(1)
            sNewFilePath = Replace(s(0), s(1), ".pdf")

            '//Export to PDF with new File Path
            ActiveSheet.ExportAsFixedFormat _
                Type:=xlTypePDF, _
                Filename:=sNewFilePath, _
                Quality:=xlQualityStandard, IncludeDocProperties:=True, _
                IgnorePrintAreas:=False, OpenAfterPublish:=True
        End If
    Else
        '//Error: file path not found
        MsgBox "Error: this workbook may be unsaved.  Please save and try again."
    End If

    Set FSO = Nothing

End Sub
Sub Save_as_pdf()
作为对象的Dim FSO
Dim s(1)作为字符串
将sNewFilePath设置为字符串
设置FSO=CreateObject(“Scripting.FileSystemObject”)
s(0)=“C:\Users\”环境(“用户名”)和“\Desktop\”此工作簿。名称
如果存在FSO.files(ThisWorkbook.FullName),则
“//将文件路径中的Excel扩展名更改为PDF扩展名
s(1)=FSO.GetExtensionName(s(0))
如果s(1)“,则
第(1)款=“”&第(1)款
sNewFilePath=Replace(s(0),s(1),“.pdf”)
“//使用新文件路径导出为PDF
ActiveSheet.ExportAsFixedFormat_
类型:=xlTypePDF_
文件名:=sNewFilePath_
质量:=xlQualityStandard,IncludeDocProperties:=True_
IgnorePrintAreas:=False,OpenAfterPublish:=True
如果结束
其他的
“//错误:找不到文件路径
MsgBox“错误:此工作簿可能未保存。请保存并重试。”
如果结束
设置FSO=无
端接头

要详细说明Matteo NNZ的上述评论:

ThisWorkbook
指当前从中执行代码的工作簿(在本例中为加载项)


ActiveWorkbook
指的是当前在同一Excel实例中处于活动状态的工作簿。

不要使用ThisWorkbook.Name(因为如果执行的代码是外接程序,则此工作簿就是外接程序),而要使用ActiveWorkbook.Name。它工作得很好,非常感谢:)@MatteoNNZ我在社区维基中添加了一个答案-如果你想将你的评论作为答案发布,以获得应得的选票/分数,我将删除这个。谢谢@SOofWXLS,不用担心,就这样吧。