この掲示板は AutoCADマクロ屋本舗 の掲示板です。

【 注意 】最初に必ず ↓↓ 下記内容 ↓↓ を参照ください。
① マクロが分からない方は、まず 【 マクロ講座 】 を参照ください。
② 質問の前に 【 マクロ使用前の注意事項 】 をお読みください。
③ 質問する時は、新規投稿フォーム下の【 新規投稿時のお願い 】を必ずお読みください。

【動作検証お願いします】LIST出力した結果を、VBSを使ってEXCELに記入
お題は下の質問から。
https://totthi.bbs.fc2.com/?act=reply&tid=16703972
この質問の中では、「線分を1本選択する度に、その長さをクリップボードに記録する」までやってます。
EXCELへの貼付けは手動です。

今回は、EXCELへの記入まで自動でやってみます。
そして、選択する線分も、1本でも良いし数本でも良いです。

これから、紹介するVBSやマクロの使い方も上のリンクに書いてあるのと同じ要領ですので、
詳しい説明が必要な場合は上のリンクを読んで下さい。


では、VBSプログラムはここから↓


'クリップボードから文字列取得
Dim objHTML , ClipTxt , aryStr
Set objHTML = CreateObject("htmlfile")
ClipTxt = Trim(objHTML.ParentWindow.ClipboardData.GetData("text"))

If InStr(ClipTxt, "LIST") = 0 Then WScript.Quit
ClipTxt = Mid(ClipTxt, InStrRev(ClipTxt, "LIST"))
aryStr = Split(ClipTxt, vbCr)

Dim I , KeyWD
Dim ex
Set ex = GetObject(, "Excel.Application")

KeyWD = "長さ:"
For I = 0 to UBound(aryStr)
If InStr(aryStr(I), KeyWD) > 0 Then

ex.ActiveCell.Value = Trim(Mid(aryStr(I), InStr(aryStr(I), KeyWD) + Len(KeyWD)))
ex.ActiveCell.Offset(1,0).Select

End If
Next

↑VBSプログラムはここまで。


マクロはこれ。
^C^Cselect;$M=$(if,$(getvar,cmdactive),\)QAFLAGS;6;LIST;P;;COPYHIST;QAFLAGS;$(getvar,QAFLAGS);

使い方。
①任意のEXCELファイルを開いておき、値を記入したいセルにカーソルを合わせる(アクティブにする)
②マクロを実行して、線分を選択。
③VBSファイルをダブルクリック

以上です。

マクロの最後に「AI_STARTAPP・・・・・」や「(STARTAPP・・・・)」を追加すれば、
②を実行するだけで③まで行う事ができます。(方法は上のリンク内を参考に)
そうすれば、マクロの冒頭に「*」を付けて、連続モードで行う事もできます。

注意事項:
LIST出力した結果をクリップボードにコピーして、その中身を吟味して、EXCELに貼付け。をしてる訳ですが、
LIST出力には制限があり、300~400行しか表示できません。
線分を1本LIST表示するだけでも十数行使用します。
つまり、30本選択したら30本分のLISTを表示することは不可能なので、正常に取得できません。
一度に選択する本数は、よく考えましょう。
  • Lon
  • 2022/04/13 (Wed) 16:36:38
Re: 【動作検証お願いします】LIST出力した結果を、VBSを使ってEXCELに記入
検証途中ですが。

aryStr = Split(ClipTxt, vbCr)

aryStr = Split(ClipTxt, vbCrLf)
じゃないと、Split成功しませんでした。

それと、線分の場合は、「長さ = ****.**」と表示されるみたいなので、
KeyWD = "長さ:"

KeyWD = "長さ ="
に変更しました。

てこずってるのが、
①任意のEXCELファイルを開いておき、値を記入したいセルにカーソルを合わせる(アクティブにする)
↑この状態のアクティブセルが取得できなくて、そこのコードでエラーメッセージ出ます。

多分、ファイル名与えたらちゃんと動くはず。

①の状態でできる方法ないのか、検索してるんだけど、まだ何も引っかからないの。
  • LUNE
  • 2022/04/14 (Thu) 16:42:18
Re: 【動作検証お願いします】LIST出力した結果を、VBSを使ってEXCELに記入
>aryStr = Split(ClipTxt, vbCr)
>は
>aryStr = Split(ClipTxt, vbCrLf)

AutoCADとIJCADの仕様の違いかな。

>①任意のEXCELファイルを開いておき、
うちでは出来る。
ちなみに、Office365 64bit

試しに、
①マクロ実行
②EXCELアクティブ
③VBSダブルクリック
の順ではどうでしょう?
  • Lon
  • 2022/04/14 (Thu) 16:56:29
Re: 【動作検証お願いします】LIST出力した結果を、VBSを使ってEXCELに記入
私も、Office365 64bit使ってるんですけどね。なんでだろ?
と思ってたらなんかしらんが動いたぞ。

AutoCAD、長さと同じ行にXY平面の角度もあるから、

8994.87、 XY 平面の角度 = 3.65

みたいに出てきたけど。(笑)


  • LUNE
  • 2022/04/14 (Thu) 17:00:37
Re: 【動作検証お願いします】LIST出力した結果を、VBSを使ってEXCELに記入
えぇ~ なんで。

IJCADで線分をLISTするとこうなる。

線分
画層: 0
現在の空間: モデル空間
ハンドル: 232
始点: X=1508.1463 Y=1003.3675 Z=0.0000
終点: X=2340.2977 Y=955.6221 Z=0.0000
長さ: 833.5200
XY平面の角度: 357
デルタ値: X=832.1514 Y=-47.7454 Z=0.0000
--------------------------------------------------------------------------------
線分
画層: 0
現在の空間: モデル空間
ハンドル: 231
始点: X=2593.4486 Y=1294.1734 Z=0.0000
終点: X=1508.1463 Y=1003.3675 Z=0.0000
長さ: 1123.5877
XY平面の角度: 195
デルタ値: X=-1085.3024 Y=-290.8059 Z=0.0000
  • Lon
  • 2022/04/14 (Thu) 17:23:29
Re: 【動作検証お願いします】LIST出力した結果を、VBSを使ってEXCELに記入
文字抽出の方法を工夫すれば、LIST結果から欲しいプロパティをEXCELに書き出せそうですね。

って事で、検証終了で良いかな。
  • Lon
  • 2022/04/14 (Thu) 17:32:48
Re: 【動作検証お願いします】LIST出力した結果を、VBSを使ってEXCELに記入
終了でいいと思いますが、最初のVBSは、頭に

Option Explicit
Call Main
Sub Main

最後に

End sub

必要ですよね?
  • LUNE
  • 2022/04/14 (Thu) 17:54:53
Re: 【動作検証お願いします】LIST出力した結果を、VBSを使ってEXCELに記入
付けた方が好きなら付けても良いけど、必要ではないです。

単独のルーチンの場合は、
Sub~End sub とか Functionで囲む必要は無いです。
そこがVBSの良い所。

更に発展させて、色んなルーチンを付け足したいなら、必要になってきますけどね。

Option Explicitを宣言する意味もVBSではあまり無いと思う。(必要性を感じたことが無いです)

追記:
別件でこの手法が使えそうなので考えてみた↓
https://totthi.bbs.fc2.com/?act=reply&tid=16720248#24379921
  • Lon
  • 2022/04/15 (Fri) 08:06:45
Re: 【動作検証お願いします】LIST出力した結果を、VBSを使ってEXCELに記入
そうなんですね。
知らなかった。
一つ学びました。
  • LUNE
  • 2022/04/15 (Fri) 09:32:36

返信フォーム






プレビュー (投稿前に内容を確認)