C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

Re[2]: 日本語以外のWindows環境でEXCELマクロを動かしたい


(過去ログ 113 を表示中)

[トピック内 4 記事 (1 - 4 表示)]  << 0 >>

■67018 / inTopicNo.1)  日本語以外のWindows環境でEXCELマクロを動かしたい
  
□投稿者/ moyamoya (5回)-(2013/06/20(Thu) 16:08:47)

分類:[VB6 以前] 

お世話になります。

日本語以外(具体的には中国語)のWindows環境でEXCELのマクロを動作させたいのですが、
作成したマクロを日本語のWindows上で動作させると、ワークシートを別のブックにコピー&ペーストする動作で
ブックが置かれているフォルダパスに中国語が含まれていると「パス名が無効です」
と表示されてコピーメソッドが失敗して終了してしまいます。
シートコピーが行われる際に同じフォルダ内に一時ファイルが生成され、そのファイルパスが
無効と判断される為に発生すると思われるのですが、この問題を含めてパスの問題を解決する方法はあるでしょうか。

もしかすると、日本語のWindowsでわざわざ中国語のフォルダを作っている為に発生する現象であって、
中国語のWindows上ではすんなり動作するのでは?とも思えるのですが、確認する方法がありません・・・。
引用返信 編集キー/
■67021 / inTopicNo.2)  Re[1]: 日本語以外のWindows環境でEXCELマクロを動かしたい
□投稿者/ 774RR (91回)-(2013/06/20(Thu) 19:10:48)
VB は詳しくないんだけど VB6 以前って内部文字コードが MBCS ?
だとしたら日本語版 VB* で中国語は原理的に扱えないはず・・・
引用返信 編集キー/
■67023 / inTopicNo.3)  Re[1]: 日本語以外のWindows環境でEXCELマクロを動かしたい
□投稿者/ 魔界の仮面弁士 (249回)-(2013/06/20(Thu) 22:21:22)
No67018 (moyamoya さん) に返信
> ブックが置かれているフォルダパスに中国語が含まれていると「パス名が無効です」
> と表示されてコピーメソッドが失敗して終了してしまいます。

手元の環境(Win 7 Enterprise x64/SP1 + Excel 2010 x86)にて、
「ニーハオ」フォルダに Book1.xlsm を置いて試してみました。

ここの掲示板では、中国語を正確に表現できませんが、
要するに↓こういうパスです。
 S = "C:\" & ChrW(&H4F60) & "好\"
 CreateObject("WScript.Shell").Popup S


'------------------------------
Option Explicit
Private Sub Workbook_Open()
    Dim wb As Excel.Workbook
    Set wb = Application.Workbooks.Add()
    ThisWorkbook.Worksheets(1).Copy Before:=wb.Worksheets(1)
End Sub
'------------------------------

これを起動すると、Book1.xlsm がうまく動いてくれる場合もありますが、時々
 『パス名が無効です: '.\VB989.tmp'』
 『パス名が無効です: '.\VB7C0C.tmp'』
などと共に一時ファイルが残され、さらに
 『Worksheet クラスの Copy メソッドが失敗しました。』
として VBA が停止してしまう状態になる状況が再現されました。


エラーになった場合には、その後、「手動で」シートをコピー/移動しようとしても
やはり「パス名が無効です」の警告と共に、一次ファイルが残ってしまう状態です。



また、先のコードを以下のように変更すると、再現率が 100% になりました。

Private Sub Workbook_Open()
    Dim S As String
    S = "C:\" & ChrW(&H4F60) & "好\"
    'ChDrive S
    'ChDir S
    CreateObject("WScript.Shell").CurrentDirectory = S
    
    Dim wb As Excel.Workbook
    Set wb = Application.Workbooks.Add()
    ThisWorkbook.Worksheets(1).Copy Before:=wb.Worksheets(1)
End Sub


要するに、「カレントディレクトリ」に依存しているようですね。


なので、下記のようにした場合には、常に成功するようになりました。


Option Explicit
Private Sub Workbook_Open()
    ChDrive "C"
    ChDir "C:\"

    Dim wb As Excel.Workbook
    Set wb = Application.Workbooks.Add()
    ThisWorkbook.Worksheets(1).Copy Before:=wb.Worksheets(1)

    Dim S As String
    S = "C:\" & ChrW(&H4F60) & "好\"
    CreateObject("WScript.Shell").CurrentDirectory = S
End Sub


後半の CurrentDirectory 変更は、省いてしまっても良いかも。

引用返信 編集キー/
■67039 / inTopicNo.4)  Re[2]: 日本語以外のWindows環境でEXCELマクロを動かしたい
□投稿者/ moyamoya (7回)-(2013/06/24(Mon) 13:33:19)
魔界の仮面弁士様

返信が遅くなり申し訳ありません。
解決策をいただき、取り急ぎお礼を申し上げます。
動作確認は未着手ですので、確認後に再度報告いたします。
ありがとうございました。

引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -