Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/27.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
Excel Application.GetOpenFilename是否有Mac/PC版本?_Excel_Vba_Macos - Fatal编程技术网

Excel Application.GetOpenFilename是否有Mac/PC版本?

Excel Application.GetOpenFilename是否有Mac/PC版本?,excel,vba,macos,Excel,Vba,Macos,有没有通用的操作系统版本?我希望有这个代码在Mac和PC上工作,但这似乎只在PC上工作 strFile = Application.GetOpenFilename("Text Files (.csv),.csv", , "Please selec text file...") 它也适用于MAC(Excel 2011)。参见屏幕截图 跟进 在聊天室中讨论时,我怀疑错误不在Application.GetSaveAsFilename中,而是在其他地方。在本例中,它是Application.GetO

有没有通用的操作系统版本?我希望有这个代码在Mac和PC上工作,但这似乎只在PC上工作

strFile = Application.GetOpenFilename("Text Files (.csv),.csv", , "Please selec text file...")
它也适用于MAC(Excel 2011)。参见屏幕截图

跟进 在聊天室中讨论时,我怀疑错误不在Application.GetSaveAsFilename中,而是在其他地方。在本例中,它是
Application.GetOpenFilename

现在
Application.GetOpenFilename
肯定会给Mac带来问题。我建议你看看这个帖子,它也解决了你的问题


我发现我可以在PC和Mac电脑上使用
应用程序.GetSaveAsFileName

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
下面是
选择\u文件\u或\u文件\u 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
函数选择\u File\u或\u Files\u Mac()作为字符串()
将MyPath设置为字符串
将MyScript设置为字符串
将MyFile设置为字符串
Dim MySplit作为变体
长
作为字符串的Dim FName
将mybook设置为工作簿
出错时继续下一步
MyPath=MacScript(“返回(文档文件夹的路径)为字符串”)
'或使用MyPath=“Macintosh HD:Users:Ron:Desktop:TestFolder:”
'在下面的语句中,将“multiple”行中的true更改为false
如果您不想选择更多,请选择“允许为真”
“不止一个文件。此外,如果要筛选多个文件,请更改
“{”com.microsoft.Excel.xls”“}到
“{”“com.microsoft.excel.xls”“public.逗号分隔值文本”“}”
'例如,如果要筛选xls和csv文件。
MyScript=_
将applescript的文本项分隔符设置为“”。&vbNewLine&_
“将文件设置为(选择文件类型”&”_
“{”“public.逗号分隔值文本”“}”&_
提示“请选择一个或多个文件”“默认位置别名”“&”_
MyPath&“允许多选为true)作为字符串(&vbNewLine&_
将applescript的文本项分隔符设置为“”&vbNewLine&_
“返回文件”
MyFiles=MacScript(MyScript)
Dim returnList()作为字符串
错误转到0
如果我的文件是“”,那么
应用
.ScreenUpdate=False
.EnableEvents=False
以
'MsgBox MyFiles
MySplit=Split(MyFiles,“,”)
ReDim返回列表(LBound(MySplit)到UBound(MySplit))
对于N=LBound(MySplit)到UBound(MySplit)
returnList(N)=MySplit(N)
下一个
应用
.ScreenUpdate=True
.EnableEvents=True
以
选择\u文件\u或\u文件\u Mac=returnList
其他的
重拨返回列表(0到0)
returnList(0)=“False”
选择\u文件\u或\u文件\u Mac=returnList
如果结束
端函数

我希望这有帮助

查看MSDN上的解决方案-

您收到了什么错误消息?Excel 2011是否更新了最新的service pack(尽管我怀疑这是原因)?它已更新,错误为运行时错误“1004”:对象“\u应用程序”的方法:“GetSaveAsFilename”失败行中的
NewFile=Application.GetSaveAsFilename(初始文件名:=“未结订单日志-”&格式(日期,“dd-mm-yyyy”)&“.xlsx”,文件过滤器:=新文件类型)
好的,什么时候出错?行被执行的那一刻?或者当你按
取消
或者当你按
保存
时?你能给我们看完整子文件的代码吗?或者更好的是,你能上传你的文件吗?我可以在MAC上测试它,这只会持续几分钟…因为这是我工作的很多内容自从我来到这里,我就开始了。也就是说,单击“工作列表”选项卡,然后单击“更新采购订单跟踪”。在2021年,在新版本的Excel/new macbook上,我仍然必须这样做,但这是唯一有效的解决方案!要成为VBA noobies,只需创建一个新模块并将上述函数复制到其中。然后使用IF T随意修改其他代码hen代码行,但没有#