为Windows和Mac指定VBA中用户文件夹的路径

时间:2016-10-19 12:14:34

标签: macos vba excel-vba excel-vba-mac excel

我正在编写一个使用VBA从Excel生成文件的工具。生成的文件将写入用户文档文件夹中的文件夹(如果存在)。

e.g。 C:\Users\<username>\Documents\Some Folder\

如果最后一个文件夹不存在,则VBA会创建它。我使用以下行来确保该文件夹的位置适用于组织中分布的不同Windows用户:

If Len(Dir(Environ("USERPROFILE") & "\Documents\Some Folder", vbDirectory)) = 0 Then
    MkDir Environ("USERPROFILE") & "\Documents\Some Folder"
End If
Open Environ("USERPROFILE") & "\Documents\Some Folder\" & "file.php" For Output As #1
Print #1, output
Close

我现在的问题是我还必须为Mac OSX用户提供服务。目前我无法访问Mac进行测试,但我假设上述工作没有成功。

我可以用什么指向用户文档中的子文件夹,如何包含有条件地使用Windows系列或Mac系列的代码?

3 个答案:

答案 0 :(得分:8)

有条件编译允许您根据您使用的操作系统编译不同的代码。有关条件编译,请参阅this page

在您的情况下,您需要附上Mac的Windows特定代码:

#if Mac then
'here Mac only code
#else
'here Windows only code
#end if

我自己没有Mac测试,但根据this site,您可以使用MacScript function获取请求的文件夹路径,并在参数中传递正确的脚本。

答案 1 :(得分:6)

您有两种选择:

<强> 1。使用Application.PathSeparator ... See the MSDN here

代码:

Dim PS as String
PS = Application.PathSeparator
If Len(Dir(Environ("USERPROFILE") & PS & "Documents" & PS & "Some Folder", vbDirectory)) = 0 Then
    MkDir Environ("USERPROFILE") & PS & "Documents" & PS & "Some Folder"
End If
Open Environ("USERPROFILE") & PS & "Documents" & PS & "Some Folder" & PS & "file.php" For Output As #1
Print #1, output
Close

<强> 2。创建IF THEN以检查OS

代码:

Sub SaveDoc()
    Dim wksSheet As Worksheet

    If InStr(1, Application.OperatingSystem, "Windows") > 0 Then
      'Code with Windows Path Separator
      Exit Sub

    Else
      'Code with Mac Path Separator
      Exit Sub
    End If

End Sub

答案 2 :(得分:0)

这对我有用。我在PC上书写,但有一些Mac用户。

$('.btn').click(function(){
$(this).toggleClass("click");
      $('.sidebar').toggleClass("show");
    });
      $('.feat-btn').click(function(){
        $('nav ul .feat-show').toggleClass("show");
        $('nav ul .first').toggleClass("rotate");
      });
      $('.serv-btn').click(function(){
        $('nav ul .serv-show').toggleClass("show1");
        $('nav ul .second').toggleClass("rotate");
      });
      $('nav ul li').click(function(){
        $(this).addClass("active").siblings().removeClass("active");
      });