0

次の関数があり、 Macでのみランタイムエラー52(ファイル名または番号が正しくない)が発生します。Open filePath & filename For Output As #1

Function ExportAsCSV(ByVal charToEncode As String, _
    ByVal filePath As String, ByVal filename As String) As Boolean

'Function to Export string to CSV. Returns True/False if successful
'Tested and working on PC XL2003,2007 & 2010 // MAC XL2011

    'On Error GoTo Err:
    On Error GoTo 0


    Open filePath & filename For Output As #1
    Print #1, charToEncode
    Close #1

    ExportAsCSV = True

    On Error GoTo 0
    Exit Function

Err:
On Error GoTo 0
ExportAsCSV = False

End Function

エラーの原因となる引数の例は次のとおりです。

  filePath : "Untitled:Users:ooo:Desktop:New" : String
  filename : ":FloridaRhum Barbancourt 5 Star Reserve Speciál 8 Years Old.csv" : String

これは間違いなくファイル名であり、例として「:test.csv」に変更した場合に問題が発生します。個々の単語もすべて正常に機能するため、エンコーディングの問題ではないようです。同じ長さの長いファイル名を生成する場合も問題ありません。

私は困惑しています..何かアイデアはありますか?

編集:

また、追加するだけで、Open filePath & filename For Output As #1実際には正しいファイル名が正しい場所にあるファイルが生成されます。ただし、VBAはエラーを生成するため、何も書き込まれず、ファイルはゼロバイトになります。

4

2 に答える 2

2

VBAによる保存を32文字に制限するキャリーオーバーバグに遭遇したと思います。ファイルを作成することはできますが、開いて書き込むことはできません。

処理中に短いファイル名で書き込み、最後のステップとして、SaveAsメソッドを使用して長いCSVファイル名に保存するか、AppleScriptを使用してファイルの名前を変更します。(Officeの次のバージョンで修正されると確信しています;)

于 2013-01-11T13:15:47.323 に答える
1

この問題にもう少し追加するだけです

Office2011でWordにvbaを使用する際に問題が発生したため、Excelだけではありません。

私の場合、問題の原因はパスの2つ前のフォルダーでした。

私はこのパスでファイルを作成して書き込んでいました:

Macintosh HD:ユーザー:myusername:デスクトップ:DataExtractor V8 copy.zipフォルダー:xl:Newstyles.xml

パスを変更してフォルダ名を31文字に減らすと、次のようになります。

Macintosh HD:ユーザー:myusername:デスクトップ:DataExtractor V8 co.zipフォルダー:xl:Newstyles.xml

それはすべてうまくいきます。

少年はそれを見つけるのに少し時間がかかりました。これらのカーラーをパスに投げ込まずに私の古い脳にvbaを書かせようとするのは十分に悪いことです(しゃれでごめんなさい)

とにかく-これが他の人に役立つことを願っています-私はWordを介してMicrosoftにアラートを投稿します

ボブJ。

于 2013-10-27T09:03:07.740 に答える