或る日、突然、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 SubWorkbooks.addしたら、ActiveSheetは、新たに作成した空のファイルのシートになる。それがExcelの癖。そして、最後にファイルをクローズしておくのもexcelの癖に合わせるためだ。
登録:
投稿 (Atom)