VBAで別のエクセルを起動して、起動したエクセルの
指定列の表示形式を変更したいのですが下記のコードを記述した所
エラーが出てしまいます。
どなたか理解できる方がいらっしゃいましたら、ご教授をお願い致します。
Private Sub Command1_Click()
Dim ExcelA As Object ' Excel.Application
Dim ExcelW As Object ' Excel.Workbook
'新規にExcelを起動
Set ExcelA = CreateObject("Excel.Application")
'オープンしたファイルを見せない
ExcelA.Visible = False
'既存ファイルを開く
Set ExcelW = ExcelA.Workbooks.Open(C:\Test1.xls)
'セルの行を選択
Range("A:A").Select
'セルの表示形式変更(数値型)
Selection.NumberFormatLocal = "0_ " ※ここで落ちる
'ファイルを作成
ActiveWorkbook.SaveAs Filename:="C:\Test2.xls"
'Workファイル終了
ActiveWorkbook.Saved = True
ActiveWorkbook.Close
Set ExcelA = Nothing
Set ExcelW = Nothing
End Sub
環境はVB6.0 Excel2000です。
よろしくお願いします。
Selectionは使わない方がイイです。
編集 削除> Range("A:A").Select
> Selection.NumberFormatLocal = "0_ "
これらは、「Excel VBA」の構文ですよね。
Active/Select系のプロパティ、メソッドは、処理が曖昧になりますので、
外部から(この場合はVBから)の呼び出しの場合には使わないでください。
Excelではなく、VBの場合でも、
Text1.Text = "あいうえお"
とは書きますが、それを、
Text1.SetFocus
ActiveControl.Text = "あいうえお"
という書き方はしませんよね。それと同じ事です。
この場合は、
ExcelW.Worksheets("Sheet1").Range("A:A").NumberFormat = "0_ "
のようにします。
> ActiveWorkbook.SaveAs Filename:="C:\Test2.xls"
先の Range や Selection もそうなのですが、このようなコードは、
『Excelが終了しない』という問題を引き起こしますよ。
この場合は、
ExcelA.ActiveWorkBook.SaveAs Filename:="C:\Test2.xls"
あるいは、
ExcelW.SaveAs Filename:="C:\Test2.xls"
のようにします。
前者は、「アクティブなブック」を別名で保存する処理、
後者は、先に開いた"C:\Test1.xls" を別名で保存する処理です。
ついでに書くと、このように、Test1.xls を元にして(テンプレートにして)
別のファイルを作成する場合、*.xls ではなく、*.xlt が良く利用されます。
# 試しに、*.xlt を作成し、ファイルを右クリックしてみてください。
# [開く]とは別に、[新規作成]という項目が現れるはずです。
その場合、
Set ExcelW = ExcelA.Workbooks.Open("C:\Test1.xlt")
ではなく、
Set ExcelW = ExcelA.Workbooks.Add("C:\Test1.xlt")
のようにします。(Openはテンプレート自体の編集の意味になります)
このように、Workbooks.Addで生成しておけば、誤って元のファイルを
上書きしてしまう事を防ぐ事ができますよ。
Selectionの前にどの"ExcelA."と付けたら無事解決できました。
お騒がせしました。m(__)m