我正在尝试让一个在 Excel 2011 for Mac 中完美运行的宏在 Excel 2016 for mac 中运行。目标是让用户指定一个包含 .csv 文件的文件夹,然后宏循环遍历所有 .csv 文件,打开每个文件将信息从其中复制到另一个工作簿中。
尝试打开用户选择的文件夹中的第一个 .csv 文件时,宏失败,出现 1004 错误,找不到文件。
(旁注:在宏的早期,workbooks.open 与用户选择的文件完美配合)
宏太大了,所以我做了一个全新的更小的宏来解决这个问题。这是较小的测试代码,它具有相同的失败行为:
Sub Test()
Dim folderpath As Variant
Dim filename As Variant
Dim newfilename As Variant
Dim wb As Workbook
Dim newfolderpath As Variant
folderpath = MacScript("choose folder as string")
newfolderpath = Replace(folderpath, ":", "\")
MsgBox (newfolderpath)
filename = MacScript("Choose file as string")
newfilename = Replace(filename, ":", "\")
MsgBox (filename)
MsgBox (newfilename)
MsgBox (Dir(filename))
MsgBox (newfolderpath & Dir(filename))
Set wb = Workbooks.Open(newfolderpath & Dir(filename))
End Sub
所有消息框都提供预期值。
- newfolderpath= 带 \ 分隔符的整个路径。
- filename= 带 : 分隔符的完整路径和文件名。
- newfilename= 带 \ 分隔符的完整路径和文件名。
- Dir(文件名)= 只是文件名。
- newfolderpath & Dir(filename))= 整个路径和文件名,带 \
分隔符。
设置 wb 线给出:
Run-time error '1004'
'Hard DRIVE\USERS\DAVE\DESKTOP\CSVS\1.CSV'
找不到。
显然该文件就在那里,可以打开并且可以工作。
任何帮助是极大的赞赏。
好吧,我想我找到了答案,或者至少找到了适合我的项目的答案。
我回到宏前面的 workbooks.open(用户选择的文件),发现它正在将其读取为“/users/Dave/Desktop/csvs/1.csv”。因此,尽管 debug 和 msgbox 返回反斜杠,但它在某种程度上想要正斜杠(你是部分正确的,蒂姆)。此外,它明显截断了 Mac 硬盘驱动器的名称,并从用户目录开始。所以,我只是修改了变量以匹配这种格式,瞧,它起作用了。对于那些感兴趣的人,这是我最终使用的修改后的代码:
Sub Test()
Dim folderpath As Variant
Dim newfilename As Variant
Dim wb As Workbook
Dim newfolderpath As Variant
Dim newfp As Variant
folderpath = MacScript("choose folder as string")
newfolderpath = Replace(folderpath, ":", "/")
newfp = Right(newfolderpath, Len(newfolderpath) - InStr(newfolderpath, "/") + 1)
newfilename = Dir(newfp)
Set wb = Workbooks.Open(newfp & newfilename)
Exit Sub
感谢所有提供帮助的人。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)