掲示板システム
ホーム
アクセス解析
カテゴリ
ログアウト
Excel操作を2回してもエラーが起きないようにするには? (ID:127208)
名前
ホームページ(ブログ、Twitterなど)のURL (省略可)
本文
>1回目はエクセルに書き込めますが2回目は書き込めません。 大抵は、コーディング上のミスにより、暗黙のExcelオブジェクトが 生成されてしまう事が原因です。 Excelへの参照設定を外し、レイトバインドのコードに変更してみてください。 その際、コンパイルエラーが出るようであれば、そこに原因があります。 > Dim EApp As New Excel.Application 'エクセルの宣言 間違いではありませんが、これは止めておきましょう。 変数宣言と同時にNewを使うことは、あまり推奨されません。 変数宣言は New 無しで行い、後で変数に Set するようにした方が無難です。 > Range("A1:D1").Select '* ←ここでエラー ここに問題(の一つ)があります。 # レイトバインドの場合、上記はエラーになりますので、Excelの場合は # 参照設定しない方が、この手のエラーを事前に見つけやすくなりますよ。 Excel VBA の場合は、単に Range("A1") と書いた場合、それが 現在作業中のワークシート上の A1 位置を示すことになります。 しかし、VBから操作した場合はそうではありません。 たとえば、Excel が 2 つ開いていた場合、または複数のブックが 開かれていた場合、上記は、どの Range を操作すればよいのか、 曖昧になってしまいます。 この場合は、 Range("A1").Value = "12345" ではなく、 eBook.Worksheets(1).Range("A1").Value = "12345" のような表記を使うようにしましょう。 その後のコードにある Selection や Columns も同様です。 きちんと、どのオブジェクトのメンバなのかを明示しましょう。 それから、Select メソッドを呼び出してから、Selection にて アクセスするような表記も避けましょう。 Selection 経由の操作というのは、VB で言えば、 Form2.Text1.Text = "123" の一行で済むコードを、 Form2.SetFocus ActiveForm.Text1.SetFocus Form2.SetFocus ActiveForm.ActiveControl.Text = "123" のように書いているような物です。 処理が曖昧になりますし、フォーカス移動の分だけ低速になりますので、 Selection を多用したコードは、特に理由が無い限りは避けるべきでしょう。
←解決時は質問者本人がここをチェックしてください。
戻る
掲示板システム
Copyright 2020 Takeshi Okamoto All Rights Reserved.