导出PDF时VBA未指定用户名

导出PDF时VBA未指定用户名,vba,authentication,pdf,save,Vba,Authentication,Pdf,Save,我有一个工作代码下面打开和保存一个PDF文件为1个特定的用户到文件文件夹。 我不知道的问题是如何用任何其他用户替换像SmithJoe这样的特定用户名。代码应该被更多的用户使用。现在,当TaylorRog尝试使用代码时,它就不起作用了。它只为史密斯乔工作。 是否有可能将特定用户“SmithJoe”替换为所有用户 Sheets(“ABC”).Range(“G8:j18”).ExportAsFixedFormat类型:=xlTypePDF,文件名:=\u“C:\Users\SmithJoe\Docum

我有一个工作代码下面打开和保存一个PDF文件为1个特定的用户到文件文件夹。 我不知道的问题是如何用任何其他用户替换像SmithJoe这样的特定用户名。代码应该被更多的用户使用。现在,当TaylorRog尝试使用代码时,它就不起作用了。它只为史密斯乔工作。 是否有可能将特定用户“SmithJoe”替换为所有用户

Sheets(“ABC”).Range(“G8:j18”).ExportAsFixedFormat类型:=xlTypePDF,文件名:=\u“C:\Users\SmithJoe\Documents\fileA.pdf”,质量:=\uxlqualityStandard,IncludeDocProperties:=True,IgnorePrintAreas:=False,\uOpenAfterPublish:=True


提前感谢

要获取Windows环境变量的内容,请使用函数
Environ

要获取用户名,请使用
Environ(“用户名”)

但请注意,在某些情况下,文件夹的名称与用户的名称不相等,或者文件夹的位置与
C:\Users
不同。最好使用
Environ(“USERPROFILE”)
——在您的情况下,应该返回
C:\Users\SmithJoe

但这当然不是全部。documents文件夹可以有不同的名称,也可以位于不同的位置。要保存,您需要查询文件夹。有几种方法可以做到这一点,我发现以下方法最简单:

Function GetSystemFolder(folderID) As String
    On Error Resume Next
    Dim f
    Set f = CreateObject("Shell.Application").namespace(folderID)
    On Error GoTo 0
    
    If Not f Is Nothing Then GetSystemFolder2 = f.Self.path
End Function
参数
folderID
告诉函数需要哪个文件夹,文档文件夹的值为5。可以找到所有ID的列表

你的代码可以是这样的

Const ssfPERSONAL = &H5
...
Dim pdfFilename as String
pdfFilename = GetSystemFolder(ssfPERSONAL) & "\fileA.pdf"

Sheets("ABC").Range("G8:j18").ExportAsFixedFormat Type:=xlTypePDF, 
       Filename:= pdfFilename , Quality:= xlQualityStandard, _
       IncludeDocProperties:=True, IgnorePrintAreas:=False, _ 
       OpenAfterPublish:=True
非常感谢

我可以再问一个问题吗?要使代码正常工作,我需要:

  • 创建此函数:

    函数GetSystemFolder(folderID)作为字符串

  • 使用代码创建子宏

    Const ssfPERSONAL=&H5 ... Dim PdfileName作为字符串 pdfFilename=GetSystemFolder(ssfPERSONAL)和“\fileA.pdf”等

  • 应该是什么内容而不是三个点<代码>常量ssfPERSONAL=&H5。。。Dim PdfielName作为字符串

    我试图自己解决它,但没有成功。
    谢谢。

    Environ(“USERPROFILE”)
    。您不应该发布其他问题作为答案。因此,它不是一个论坛,也没有线程。你问了一个问题(你问了),这个问题得到了回答(希望如此)。好的答案被投赞成票,坏的答案被投反对票,最合适的答案应该被你接受。如果你有一个新问题(即使是后续问题),提出一个新问题。