2017-05-02 14 views
2

Mac用のExcel 2011で完全に動作するマクロをExcel 2016で動作させようとしています。目的は、ユーザーに.csvファイルを含むフォルダを指定させてから、マクロがすべての.csvファイルをループし、各.csvファイルを開いて別のブックに情報をコピーすることです。Mac Excel 2016 VBA - Workbook.openは1004エラーを返します

ユーザーが選択したフォルダー内の最初の.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 

すべてのmsgboxは期待値を提供します。

  • newfolderpath = \セパレータを含むパス全体。
  • filename =区切り記号を含むパスとファイル名全体。
  • newfilename =パスとファイル名の\区切り記号。
  • Dir(ファイル名)=ファイル名のみ。
  • newfolderpath & Dir(ファイル名))=パスとファイル名全体に\ の区切り文字が付いています。 WBラインを設定し

います:

Run-time error '1004' 
'Hard DRIVE\USERS\DAVE\DESKTOP\CSVS\1.CSV' 

が見つかりませんでした。

明らかにファイルがあり、開くことができ、動作します。

ご協力いただきまして誠にありがとうございます。

+0

私はMaxのパス区切り記号が ":"か "/"のどちらかであると思っていましたが、バックスラッシュは本当に機能しますか? –

+0

'Dir'関数は{vba-mac}のパラメータとして' MacID( "TEXT") 'を必要としませんか? [this](http://stackoverflow.com/questions/10045474/dir-function-not-working-in-mac-excel-2011-vba)を参照してください。 – Jeeped

+0

コードのボーナスポイントは[新しいより小さなもの]です。ニース[mcve]。 – Jeeped

答えて

0

私は答えを見つけたと思います。少なくとも私のプロジェクトではうまくいく答えです。

マクロの前の方からworkbooks.open(ユーザーが選択したFILE)に戻って、 "https://stackoverflow.com/users/Dave/Desktop/csvs/1.csv"と読んでいることがわかりました。だから、たとえデバッグとmsgboxがバックスラッシュを返していたとしても、それは何とかフォワードスラッシュを必要としていました(あなたは部分的に正しいと思いました、Tim)。さらに、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 

お手数をおかけしていただきありがとうございます。

関連する問題