【大喜利】【投稿~11/22】このサンタクロースは偽物だと気付いた理由とは?

いつもお世話になります

今、400行のデータをExcelからScriptファイルを使ってAutoCadに出力しています
その際、ファイルは保存形式UTF-8で
Set stm = New ADODB.Stream
stm.Charset = "UTF-8"
stm.LineSeparator = adLF
としています

データ列は13列、一行づつScriptファイルを作りAtuoCadに送ります
For Row = 1 To GridRows   '...行のループ
stm.Open '...ファイルオープン
For Col = 1 To GridCols '...列のループ
With CellInfo(Row, Col) '...セル情報
If .Text <> "" Then
moji1 = CStr(.TextX) & "," & CStr(.TextY) '出力座標値
moji2 = CStr(TextHeight) '文字サイズ
moji3 ="0.0" '文字出力角度
strRec = "-Text" & vbCrLf & opt & vbCrLf & moji1 & vbCrLf & _
moji2 & vbCrLf & moji3 & vbCrLf & .Text
stm.WriteText strRec, 1 '...ファイル書き出し
End If
End With
Next Col
Application.Wait [Now() + "00:00:00.2"] '...0.2秒待つ

stm.SaveToFile PLTFname, 2 '...ファイル保存
stm.Close '...ファイルを閉じる
Application.Wait [Now() + "00:00:00.1"] '...0.1秒待つ
SendKeys "script" & Chr(13) & PLTFname & Chr(13) '...Scriptファイルの実行
Application.Wait [Now() + "00:00:00.1"] '...0.1秒待つ
Next Row
'(原点は選択セルの左上としています)

AutocadにScriptコマンドを送るときには前後に0.1秒
stmファイル書き出しには、「出力エラーが」が出るため0.1秒から0.2秒待たせます
この小さな時間が積み重なって、結構な時間になります
0.2秒待ちで、3分12秒
0.1秒待ちで、2分27秒

目標はあと1分短縮させたいのですが、stmの出力先にメモリを使えないかと相談しました
以上、良いご回答を期待しています
よろしくお願い申し上げます

A 回答 (7件)

> 一度に書いている時間は動き感がなく作業者が不安になります



そこは「作業中」とか画面に出してけばよいでしょう。

https://learn.microsoft.com/ja-jp/previous-versi …
をはじめ「Excel プログレスバー」で検索すればいくつも例が見つかります
    • good
    • 0
この回答へのお礼

いつもお世話になります

それも必要と思いますが、
適度に動いていること、スムーズに動いていること等
自分自信の満足度にとらわれず
使う人の心にストレスが掛からないように工夫し、作業効率アップには
使う人の心に向き合うということが必要と思っています
(勝手ながら、私のプログラムはそういう気持ちで作っています)

ご意見、ありがとうございます
これからもよろしくお願い申しあげます

お礼日時:2024/07/15 10:51

AutoCADは持ってないので詳細はわかりませんが。



メモリに出力できたとしても、それほど効果は無いと思います。

Windowsでは、あるアプリが使用中のファイルを別のアプリが使おうとするとエラーになります(なることがあります)。
srmで出力エラーになるのは、AuctoCADがscript命令で読み込んでいる最中に同じファイルを上書きしようとするためだと予想できます。

ファイルへの書き込みがちょっと速くなったところで、AutoCADが速くならないと待ち時間は同じになります。


出力ファイル名を全て別のものにすれば、wait無しでも「出力エラー」は無くなるはずです。


それよりも「Excelの1行毎にscriptを実行する」という方法を変える方が効果的だと思われます。

「全データをファイルに書き出す」
「AutoCADにscriptを実行するようにsendkeyを送る」
というフローにしたらどうですか?
    • good
    • 0
この回答へのお礼

ご回答、ありがとうございます

出力名を変える、思いつかなかったですね
やってみる価値がありそうです
休み明け、すぐに試してみます

一度に書く件、他にも頂きましたが
一度に書いている時間は動き感がなく作業者が不安になります
ものの何秒か動かないと首をかしげる人をたくさん見てきましたので
今回も動き感のあるものを作っていきたいと思います

本当に貴重な意見ありがとうございました
投稿した甲斐がありました
今後ともよろしくお願い申しあげます

お礼日時:2024/07/14 14:32

スクリプトファイルを作成する処理と、スクリプトファイルを実行する処理を分けるのではダメなんですか?



スクリプトファイルの実行時はどのようなコマンドを使用しても0.1~0.2秒程の待機を行わないとエラーになるのでしょうか?
    • good
    • 0
この回答へのお礼

ご回答ありがとうございます

Scriptファイルの処理を分けるということは
作成中、何も動き感が無いので使う人は不安を感じます
使用者の不安をなくすためにも動き感が大切です

また、外のソフトを使う時は処理速度の関係で時間の調整が
必要になります
内部で計算する速度、コマンド受け付けて実行までの時間は
脳の速度と指令を受けて手が動く速度の違いみたいなものだと思います

これからもよろしくお願い申し上げます

お礼日時:2024/07/14 10:06

stmの出力を短縮して1分短縮を期待したい、なんですね。


処理を大別すると
(1) For ループ
(2) SaveToFile, Close
(3) SendKeys
ですね。
VBAもAutocadも詳しくないのですが、
SendKeysによる Autocad の処理が十分に早いならば、(2)を止めて (1)の中で1行ずつ(3)を含める案も思い浮かびます。
(処理順が問題になる気はしますが…)

※ Autocad がファイル入力しか受け付けないならば、ファイルに書き出すしかないですね…
    • good
    • 0
この回答へのお礼

ご回答ありがとうございます

ちょっとした仕事はSendKeysを使っていますが
こちらも時間の調整が難しくて、使い続けたくないところですが
休み明けに(3)をテストしてみますね
貴重なご意見、ありがとうございました
これからもよろしくお願いいたします

お礼日時:2024/07/14 09:53

この場合はwaitが不要になる

    • good
    • 0
この回答へのお礼

早速のご回答ありがとうございます

Excelから別のソフトをコントロールすることは
処理速度の違いで良くエラーが発生します
(計算速度とI/O出力速度はかなり違います)
何度もテストを重ねてWaitタイムを決めています

他人に使わせるのエラーの発生は極力なくすことを
心がけています
ご意見ありがとうございました
これからもよろしくお願い申し上げます

お礼日時:2024/07/13 17:03

forループ内のstrRecを追記するような処理に変更し


ループ内ではファイル書き出ししないようにする
ループを抜けてからファイル書き出しする
ループが0回の場合は書き出ししない
とするといいかもしれませんね

巨大なデータでないことが前提
    • good
    • 0
この回答へのお礼

早速のご回答ありがとうございます

ご指摘の件、Forを抜けてからは
何も出ない画面の待ち時間が問題になります
他人に使わせるソフトゆえに、ストレスの掛からない
ソフトを心がけています

何か工夫をしてみれば良いのかも
ありがとうございました
これからもよろしくお願いいたします

お礼日時:2024/07/13 16:56

メモリの1部をディスクとして使うRAMディスクってのがあります。


自分はリンク先の使ってます。
https://forest.watch.impress.co.jp/library/softw …
    • good
    • 0
この回答へのお礼

早い!

早速、検討してみますね
本当にありがとうございます
これからもよろしくお願いいたします

お礼日時:2024/07/13 15:54

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています


おすすめ情報

このQ&Aを見た人がよく見るQ&A