マクロとvbs(with AcadRemocon)の合わせ技です。
①AcadRemoconのセッティングについては省略
②マクロボタンに下記マクロを登録
*^C^Clist;si;\copyhist;graphscr;AI_STARTAPP;"ブロック名取得.vbs";-rename;b^M
(R版の場合は、AI_STARTAPPでエラーになるので、R版用のマクロに改変してください)
③下記VBS(Dim Acad ~ End Function)を「ブロック名取得.vbs」という名前でAutoCADのサポートフォルダに保存。
これで準備ok
マクロを実行して、ブロックをクリック(ブロックじゃない物を選択したらどうなるか知りません)
そんでブロック名を入力すると書き換わる。
繰り返しモードになってるので、終了はEsc
但し、
既に使用しているブロック名を入力するとどうなるか知りません。
上書き保存をした後で実行してください。
何か深刻なエラーが出たら、ファイルを落として再度開いてください。
*○○のブロックは未対応です。選んだらエラーになると思います。
Dim Acad
'========== ***** ***** ==========
'極楽鳥さんに感謝!!
If MustRun Then WScript.Quit
'========== ***** ***** ==========
Call Main
Sub Main()
Set Acad = CreateObject("AcadRemocon.Body")
WScript.Sleep 100
Dim s
s=Acad.GetClipboardText()
s = mid(s , InStrRev(s , "list"))
If InStr(s , "ブロック名:") = 0 Then
s = "ブロックではありません"
Else
s = mid(s , InStr(s , "ブロック名:") + 6)
s = mid(s , InStr(s , Chr(34)) + 1)
s = mid(s , 1 , InStr(s , Chr(34)) - 1)
End If
Acad.acPostCommand s & "^M"
End Sub
Public Function MustRun()
'実行している環境が64ビット環境か、32ビット環境か判断し、
'64ビット環境であれば、32ビット環境で自身の再起動を試みる。
'そして、Trueを返す。32ビット環境であれば、Falseを返す。
Const WSHOST = "wscript.exe"
Dim objWshShell 'WshShell オブジェクト
Dim ExecCmd '実行するコマンドライン
Set objWshShell = WScript.CreateObject("WScript.Shell")
If objWshShell.ExpandEnvironmentStrings("%PROCESSOR_ARCHITECTURE%") = "AMD64" Then
ExecCmd = objWshShell.ExpandEnvironmentStrings("%WINDIR%") & _
"\SysWOW64\" & WSHOST & " " & _
Chr(34) & WScript.ScriptFullName & Chr(34)
objWshShell.Exec(ExecCmd)
MustRun = True
Else 'x86
MustRun = False
End If
Set objWshShell = Nothing
Set ExecCmd = Nothing
End Function
これの元ネタは↓で、↑はブロック名変更の機能に作り変えています。
http://totthi.bbs.fc2.com/?act=reply&tid=16517487
そのリンク先の後半にも注意して欲しい事が書いてありますので、
参考にしてください。