EXCELの指定列の表示形式変更について

解決


BBQ  2004-07-21 17:25:25  No: 84696  IP: [192.*.*.*]

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です。
    
よろしくお願いします。

編集 削除
nanashi  2004-07-21 19:10:38  No: 84697  IP: [192.*.*.*]

Selectionは使わない方がイイです。

編集 削除
魔界の仮面弁士  2004-07-21 20:02:41  No: 84698  IP: [192.*.*.*]

>  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で生成しておけば、誤って元のファイルを
上書きしてしまう事を防ぐ事ができますよ。

編集 削除
BBQ  2004-07-21 20:06:06  No: 84699  IP: [192.*.*.*]

Selectionの前にどの"ExcelA."と付けたら無事解決できました。
お騒がせしました。m(__)m

編集 削除