或る日、突然、Windowsパソコンを共有することになった。 これまでは、夜間や早朝に無人運転していたバッチは、ログインしたままなので、エラーが起きた場合、その画面を見ることができた。 しかし、共有することになって、以降は、当然、ログインしたままにできない。 つまり、バッチは、ログインしていなくても実行できるようにした。そして、実行できた。 エラーが起きたら、プログラムはそのエラー画面を出したまま、止まっていた。だから、そのエラー画面を見ることができたのだった。 ところが、バッチで動かしたaccess、excelといったプログラムは、ログインしていないため(システムが動かしているため)、エラーが起こった場合にその画面を見ることができない。 すなわち、表からは見えないシステムの空間で実行されるので、実行中の画面もエラーで止まっている画面も全く見ることができないのである。 どうするかといえば、エラーの原因解明のための情報をログとして吐き出し、プログラムをキチンと終わらせておく必要がある。 つまり、On Error GoTo Error_Handlerをモジュールの先頭で宣言し、エラーの原因究明のじょうほうをログとして出力する、適切なError_Handler(msgbox)を書いておく。 或いは、システムが起動したプログラムを捕まえる方法は、あるのだろうか?
2023年7月26日水曜日
2023年7月11日火曜日
vbaでシートをコピーし、名前を付けて保存するコードを書くためには、excelの微妙な癖を踏まえる必要がある。それが流儀だ。
vbaでシートをコピーし、名前を付けて保存するコードは、excelのクセを踏まえた上で、コードを書いていく。
Sub CopyandSaveFile()
Dim file1 as String
'menuシートのBxxセルにあるファイル名をゲットしておく。
file1 = Worksheets("menu").Range("Bxx").Value
'まず、新しいブックを作成する。即ち、新しいファイルをオープンしておく。
Workbooks.add
'シートをコピーする。
Worksheet("table").Range("A1:G4").Copy
'シートを貼り付ける。
ActiveSheet.Range("A1:G4").PasteSpecialAll
'式を値にする。
ActiveSheet.Range("A2:G4").Value = ActiveSheet.Range("A2:G4").Value
'列幅を整える。
ActiveSheet.Range("A:G").Autofit
'名前を付けて保存する。
ActiveWorkbook.Saveas fileNmaes:=file1
'ファイルをクローズする。
ActiveWorkbook.Close
end Sub
Workbooks.addしたら、ActiveSheetは、新たに作成した空のファイルのシートになる。それがExcelの癖。そして、最後にファイルをクローズしておくのもexcelの癖に合わせるためだ。
登録:
コメント (Atom)