■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 変更は、省いてしまっても良いかも。
|