いつもお世話になります
今、Scriptファイルを利用してExceのデータでAutoCad上に作画させていますが
時々データ量および処理速度の差によって、Scriptファイルの書き込みエラーが
発生します
今はApplication.Waitで調整していますが、妙案があったら教えてください
'...ファイルの定義
Set stm = New ADODB.Stream
stm.Charset = "UTF-8"
stm.LineSeparator = adLF
stm.Open
(作図)ファイル作成
Application.Wait [Now() + "00:00:03"] '...エラーが起きないように3秒調整
stm.SaveToFile PLTFname1, 2 '...ファイル書き込み(ここでエラーが起きる)
stm.Close
Application.Wait [Now() + "00:00:01"]
SendKeys "script" & Chr(13) & PLTFname1 & Chr(13)
stm.Open
(作図)
Application.Wait [Now() + "00:00:03"]
stm.SaveToFile PLTFname1, 2
・
・
(作図とScript 処理を繰り返します)
いつもすみません、変な質問で
以上、よろしくお願い申しあげます
No.3ベストアンサー
- 回答日時:
こんにちは
以下は、想像と空想での回答ですので、対策になるのかもわかりませんけれど・・
通常、ADODB.Streamからの出力処理にApplication.Waitが必要だというような情報は見つかりませんので、ご提示のケースに特有の問題であろうと推測します。
ご提示の処理ですと、VBAからのファイル出力とAutoCad側でのファイル読み込みとが交互におきるため、多分、その排他処理の交通整理で発生しているのではないかと推測します。
(その割には3秒は長いような気もしますけれど・・)
実際に問題となっている原因を調べられれば、それを回避する方法のヒントになると思いますけれど・・
AutoCad側のスクリプト処理がどのような仕組みなのか知りませんけれど、小分けにせずにまとめて1ファイルに出力することは不可能なのでしょうか?
(これなら、Waiteは出力後の1回だけで済むはずと思います)
また、スクリプトの処理時間が瞬時なのか、多少時間がかかるのかなども関係してくると思います。
小分けすることが必須であるのなら、同じPLTFname1を上書きして使い回すようなことはせずに、連番などで別ファイルとして出力すれば、出力時にエラーが起きることは回避できるのではないかと推測します。
(全部の処理が終わったところで、ファイル群は削除すれば済むでしょう)
ただし(AutoCad側の仕様は知りませんけれど)、スクリプトの実行速度とVBAからの次のSendKeyとの関係を制御することが必要なのかも知れません。
(前の処理が終わらないうちに、次のkeyが送信された場合の反応が不明なので)
AutoCad側の状態(コマンドを受け付けられるか否か)などを取得する方法があれば(statusなどで)、そちらを監視してコマンドを送るようにすればタイミングを測れるので(あるいはエラーが返るのならエラー処理で監視してもよい)、一律のWaiteをかける必要もなくなるのではないでしょうか?
こんにちは
いつもお世話になります
作図には少し時間が掛かる量なので小分けにしています
Scriptファイルの名前を変える方法は良いかもしれませんね
チャレンジしてみます
本当にいつも助かります
これからもよろしくお願い申しあげます
No.4
- 回答日時:
No3です。
>作図には少し時間が掛かる量なので小分けにしています
>Scriptファイルの名前を変える方法は良いかもしれませんね
妄想の続きですが・・
ファイル名を変えれば、出力時のエラーはなくなるのではないかと推測します。
ただし、AutoCad側の処理に時間がかかるとのことですので、作図処理が終わらないうちに連続してコマンドを送った場合にどうなるのかが問題になりそうな気がします。
以下では、考え方も方法も変わってしまいますけれど・・
AutoCadでもMS VBAが使えたと記憶しています。
ですので、エクセルからSendkeysでCadを操作することをやめて(=あまり良い方法とは言えないと思いますので)、AutoCad側のVBAをメインとして、
・エクセルを開き
・そのデータを利用して作図する
ような仕組みにしておけば、Sendkeysのような必要もなくなるはずです。
時間待ちなどの煩わしい制御を考慮する必要もなくなるので、ご質問のような問題も生じないのではないかと推測します。
「計算はエクセル側で処理したい」という事情があるのなら、AutoCad側のVBAからエクセル側のプロシージャを呼び出して結果を受け取るような構造にしておけば、ファイルを介さずともデータの受け渡しが可能になりそうに思いますし、作成してある「エクセル側の計算処理」もほぼそのまま利用できるのではないかと想像します。
こんにちは
再度、ありがとうございます
私たち社員が使っているのはAutoCad LTと廉価版Ares StanDardを
使っていますので、Cad側にはVBAは無いのです
その環境下でプログラムを構築していかなければなりません
今後はどうなるかは会社上司の考え方とお金次第になると思います
プログラマは私一人(78歳)プログラム歴50年です
これからもよろしくお願い申しあげます
No.2
- 回答日時:
On Error Resume Next <---- ここを追加した
'...ファイルの定義
Set stm = New ADODB.Stream
stm.Charset = "UTF-8"
stm.LineSeparator = adLF
stm.Open
(作図)ファイル作成
Application.Wait [Now() + "00:00:03"]
For i = 0 To 10 <---- ここを追加した
stm.SaveToFile PLTFname1, 2
If Err.Number = 0 Then <---- ここを追加した
Exit For <---- ここを追加した
End If <---- ここを追加した
Application.Wait [Now() + "00:00:01"] <---- ここを追加した
Next <---- ここを追加した
stm.Close
Application.Wait [Now() + "00:00:01"]
SendKeys "script" & Chr(13) & PLTFname1 & Chr(13)
:
:
:
早速ありがとうございます
そうですね、
3秒のWaitタイムはいらないですね
やってみますね
ありがとうございました
これからもよろしくお願いいたします
No.1
- 回答日時:
(1) On Error Resume Next を最初に記載し、エラーが発生しても処理が止まらないようにする
(2) SaveToFile を実行している処理を ループにして
1秒待つ→書き込む→エラーならループ2週目(2秒待つ)→書き込み→エラーならループ3週目(3秒待つ)→・・・
のように上限を設けたループにして書き込みができるタイミングに書き込みするように制御する
※エラーかどうかは「Err.Number」の値が0か否かで判定する
などはいかがですか?
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
このQ&Aを見た人はこんなQ&Aも見ています
-
最近、いつ泣きましたか?
泣いてストレス発散! なんて言いますよね。 あなたは最近いつ、どんなシチュエーションで泣きましたか?
-
【コナン30周年】嘘でしょ!?と思った○○周年を教えて【ハルヒ20周年】
2024年は「名探偵コナン30周年」「涼宮ハルヒ20周年」などを迎えますが、 あなたが「もうそんなに!?」と驚いた○○周年を教えてください。
-
メモのコツを教えてください!
メモを取るのが苦手です。 急いでメモすると内容がごちゃごちゃになってしまったり、ひどいときには全く読めない時もあります。
-
昨日見た夢を教えて下さい
たまにすごいドラマチックな夢見ること、ありませんか? 起きてからも妙に記憶に残っているような、そんな夢。
-
「お昼の放送」の思い出
小学校から中学校、ところによっては高校まで お昼休みに校内放送で、放送委員が音楽とかおしゃべりとか流してましたよね。 最近は自分でもラジオができるようになって、そのクオリティもすごいことになっていると聞きます。
-
VBAの間違い教えて下さい
Visual Basic(VBA)
-
IF文、条件分岐の整理方法
Visual Basic(VBA)
-
サブフォルダに格納されているファイルを、ファイル名ごとに条件分岐させたい
Visual Basic(VBA)
-
-
4
pdfファイルの複数添付 引数の型
Visual Basic(VBA)
-
5
VBAコードのインデント表示
Visual Basic(VBA)
-
6
時間短縮のために、テキストファイルの入出力をメモリを使って出来ないですか?
Visual Basic(VBA)
-
7
ExcelVBAマクロで実行した時の疑問
Visual Basic(VBA)
-
8
Excel VBA 選択範囲の罫線色の変更プロージャの動作速度の改善について
Visual Basic(VBA)
-
9
Excel_VBAについて質疑です。(for~next)
Visual Basic(VBA)
-
10
エクセルVBAにて =A1=B1とすれば A1とB1のセル内容が一緒だった場合 TRUE 違っていれ
Visual Basic(VBA)
-
11
VBAなくなるの?
Visual Basic(VBA)
-
12
VBA一覧取得 再投稿
Visual Basic(VBA)
-
13
VBA初心者です。次のVBAコードで、17行目を削除したいのですがうまく動きません 改善策を教えてく
Visual Basic(VBA)
-
14
VBA コードどこがおかしいですか?
Visual Basic(VBA)
-
15
Excel-VBAのmsgBox()の不思議
Visual Basic(VBA)
-
16
Vba 実数および実数タイプの変数について教えてください
Visual Basic(VBA)
-
17
Excel VBA 定義されたプロージャ名、関数名の取得
Visual Basic(VBA)
-
18
エクセルVBA
Visual Basic(VBA)
-
19
VBA SaveChanges 上書きされない
Visual Basic(VBA)
-
20
VBA レジストリの値の読み方について教えてください
Visual Basic(VBA)
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・14歳の自分に衝撃の事実を告げてください
- ・架空の映画のネタバレレビュー
- ・「お昼の放送」の思い出
- ・昨日見た夢を教えて下さい
- ・【お題】絵本のタイトル
- ・【大喜利】世界最古のコンビニについて知ってる事を教えてください【投稿~10/10(木)】
- ・メモのコツを教えてください!
- ・CDの保有枚数を教えてください
- ・ホテルを選ぶとき、これだけは譲れない条件TOP3は?
- ・家・車以外で、人生で一番奮発した買い物
- ・人生最悪の忘れ物
- ・【コナン30周年】嘘でしょ!?と思った○○周年を教えて【ハルヒ20周年】
- ・ハマっている「お菓子」を教えて!
- ・最近、いつ泣きましたか?
- ・夏が終わったと感じる瞬間って、どんな時?
- ・10秒目をつむったら…
- ・人生のプチ美学を教えてください!!
- ・あなたの習慣について教えてください!!
- ・牛、豚、鶏、どれか一つ食べられなくなるとしたら?
- ・都道府県穴埋めゲーム
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
Vba ファイル書き込み時に書き...
-
[VBS]ファイルコピーで怪奇現象
-
Returnに対するGoSubがありません
-
FTPの送信結果を検知したい
-
画像読み込み失敗の判定
-
CSVファイルが開かれているかど...
-
エクセルでのファイル名の一括...
-
PowerShellを使って関連付けら...
-
gccを行ってもexeファイルが生...
-
Excel 2003 のエラーメッセージ
-
EXCELVBAでONEDRIVE上への保管...
-
Excelvbaのマクロのファイル名...
-
ISOファイルとMDSファイル
-
差し込み印刷の元データファイ...
-
クラリスワークス
-
イーファンビューでwebpファイ...
-
JPEGファイルの撮影日時を秒ま...
-
iPhoneのメールの添付(xls.)フ...
-
共有フォルダの最終アクセス者...
-
ファイルを開かずにマクロを実行
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
「パス名が無効です」の発生原因
-
batファイルでレジストリキーの...
-
アクセスのクエリでコンパイル...
-
Returnに対するGoSubがありません
-
NAS上のファイルの使用中が解除...
-
VBから参照できないCのDLLを使...
-
PowerShellを使って関連付けら...
-
access テキストボックスの値取得
-
ACCESS VBAでのインポート
-
FTPの送信結果を検知したい
-
VBでファイルが開かれているか...
-
VB6 Dir関数で52エラー発生
-
【COBOL】read文でエラー
-
エクセル VBA dll 読み込...
-
VBA ExecuteExcel4Macro 型が一...
-
fgets関数のEOFの扱い方について
-
「複数の選択範囲に対して実行...
-
アクセスでイベントのロジック...
-
エクセルマクロでエラーの原因...
-
すでにファイルが開かれている...
おすすめ情報