2

是否有通用的操作系统变体?我希望这段代码可以在 Mac 和 PC 上运行,但这似乎只能在 PC 上运行。

strFile = Application.GetOpenFilename("Text Files (.csv),.csv", , "Please selec text file...")
4

3 回答 3

5

我发现我可以Application.GetSaveAsFileName在 PC 和 Mac 上毫无问题地使用。

FName = Application.GetSaveAsFilename(fileFilter:=filterString, InitialFileName:=myInitialFileName)

但是我也发现这Application.GetOpenFilename在 Mac 上不起作用,所以我做了一些谷歌搜索并想出了这个功能作为 Mac 上的解决方法:

#If Mac Then
    tempfnameList = Select_File_Or_Files_Mac()
#Else
    tempfnameList = Application.GetOpenFilename(fileFilter:=filterString, Title:="Select File(s) to Open", MultiSelect:=True)
#End If

这里是实现Select_File_Or_Files_Mac

Function Select_File_Or_Files_Mac() As String()
    Dim MyPath As String
    Dim MyScript As String
    Dim MyFiles As String
    Dim MySplit As Variant
    Dim N As Long
    Dim FName As String
    Dim mybook As Workbook

    On Error Resume Next
    MyPath = MacScript("return (path to documents folder) as String")
    'Or use MyPath = "Macintosh HD:Users:Ron:Desktop:TestFolder:"

    ' In the following statement, change true to false in the line "multiple
    ' selections allowed true" if you do not want to be able to select more
    ' than one file. Additionally, if you want to filter for multiple files, change
    ' {""com.microsoft.Excel.xls""} to
    ' {""com.microsoft.excel.xls"",""public.comma-separated-values-text""}
    ' if you want to filter on xls and csv files, for example.
    MyScript = _
    "set applescript's text item delimiters to "","" " & vbNewLine & _
               "set theFiles to (choose file of type " & _
             " {""public.comma-separated-values-text""} " & _
               "with prompt ""Please select a file or files"" default location alias """ & _
               MyPath & """ multiple selections allowed true) as string" & vbNewLine & _
               "set applescript's text item delimiters to """" " & vbNewLine & _
               "return theFiles"

    MyFiles = MacScript(MyScript)
    Dim returnList() As String
    On Error GoTo 0

    If MyFiles <> "" Then
        With Application
            .ScreenUpdating = False
            .EnableEvents = False
        End With

        'MsgBox MyFiles
        MySplit = Split(MyFiles, ",")
        ReDim returnList(LBound(MySplit) To UBound(MySplit))
        For N = LBound(MySplit) To UBound(MySplit)

            returnList(N) = MySplit(N)

        Next N
        With Application
            .ScreenUpdating = True
            .EnableEvents = True
        End With
        Select_File_Or_Files_Mac = returnList
    Else
        ReDim returnList(0 To 0)
        returnList(0) = "False"
        Select_File_Or_Files_Mac = returnList
    End If
End Function

我希望这有帮助!

于 2012-12-15T21:52:29.960 回答
1

它也适用于 MAC (Excel 2011)。看屏幕截图

在此处输入图像描述

跟进 在聊天中进行讨论后,我怀疑错误不是与Application.GetSaveAsFilename其他错误有关。在这种情况下,它是Application.GetOpenFilename

现在Application.GetOpenFilename肯定会在 Mac 中出现问题。我建议您查看此线程,该线程也可以解决您的问题。

在 VBA 用户窗体中关闭打开的工作簿时出错

于 2012-09-04T12:41:30.620 回答
0

查看 MSDN 上的解决方案 - Programmatically Selecting Files in Excel for Windows and Excel for Mac

于 2013-02-16T04:31:50.570 回答