画層数が多く、作業で表示やスリーズやロックを切り替える処理が繰り返しになるとき時間の無駄が多くなります。
そこで、同じ処理の繰り返しになる場合での対処法として、表題の画層状態コントロール用ExcelVBAを作成しました。
テスト用の画層
画層状態コントロール用のシート
実行用のボタンを1つ作成します。
OptionButton1,OptionButton2、OptionButton3 を
取得・戻す・変更とします。
まず、●取得でBCD列とEFG列に現在の状態を取得します。
事前にデーター欄のセルに入力規制で〇と●を設定してクリアで空欄にしています。
〇●の表示は以下にしています。
画層ON:〇、画層OFF:●
フリーズFALSE:〇、フリーズTRUE:●
ロックFALSE:〇、ロックTRUE:●
EFG列を変更する設定にします。
画層状態が変更設定通りに変更されました。
元の画層状態に戻す場合は、・戻るで、ABC列の元の状態に戻します。
更にOptionButton4、HIJ列と増やせば、別の組み合わせ処理もできますね。
Sub LayerStateControl() ''【BricsCADのオブジェクト変数を宣言】 Dim BcadApp As BricscadApp.AcadApplication Dim BcadDoc As BricscadApp.AcadDocument ''現在開いているBricsCADを取得する Set BcadApp = GetObject(, "BricscadApp.AcadApplication") BcadApp.Visible = True Set BcadDoc = BcadApp.ActiveDocument Dim LayObj As AcadLayer Dim LyrName As String Dim i As Long ''==========【画層状態取得】======== If ActiveSheet.OptionButton1.Value = True Then i = 3 For Each LayObj In BcadDoc.Layers i = i + 1 Cells(i, 1).Value = LayObj.Name If LayObj.LayerOn = True Then Cells(i, 2).Value = "〇" Cells(i, 5).Value = "〇" Else Cells(i, 2).Value = "●" Cells(i, 5).Value = "●" End If If LayObj.Freeze = False Then Cells(i, 3).Value = "〇" Cells(i, 6).Value = "〇" Else Cells(i, 3).Value = "●" Cells(i, 6).Value = "●" End If If LayObj.Lock = False Then Cells(i, 4).Value = "〇" Cells(i, 7).Value = "〇" Else Cells(i, 4).Value = "●" Cells(i, 7).Value = "●" End If Next ''==========【画層状態復旧】========== ElseIf ActiveSheet.OptionButton2.Value = True Then i = 3 For Each LayObj In BcadDoc.Layers i = i + 1 If Cells(i, 1).Value = LayObj.Name Then If Cells(i, 2).Value = "〇" Then LayObj.LayerOn = True Else LayObj.LayerOn = False End If If Cells(i, 3).Value = "〇" Then LayObj.Freeze = False Else LayObj.Freeze = True End If If Cells(i, 4).Value = "〇" Then LayObj.Lock = False Else LayObj.Lock = True End If End If Next ''==========【画層状態変更】========== ElseIf ActiveSheet.OptionButton3.Value = True Then i = 3 For Each LayObj In BcadDoc.Layers i = i + 1 If Cells(i, 1).Value = LayObj.Name Then If Cells(i, 5).Value = "〇" Then LayObj.LayerOn = True Else LayObj.LayerOn = False End If If Cells(i, 6).Value = "〇" Then LayObj.Freeze = False Else LayObj.Freeze = True End If If Cells(i, 7).Value = "〇" Then LayObj.Lock = False Else LayObj.Lock = True End If End If Next End If End Sub Sub DataClear() ''取得データーをクリア Dim LastDataRow As Long LastDataRow = Cells(Rows.Count, 1).End(xlUp).Row ActiveSheet.Range(Rows(4), Rows(LastDataRow)).ClearContents Range("A2").Activate End Sub
BricsCAD VBAを使ってみよう INDEX
BricsCAD VBAを使ってみよう[1] VBAのインストール
BricsCAD VBAを使ってみよう[2] UserFormその1
「BricsCAD VBA 」Creating UserForm
BricsCAD VBAを使ってみよう[3] UserFormその2
「BricsCAD VBA 」SerialNumber drawing with UserForm
BricsCAD VBAを使ってみよう[4] VBAの基本コード①
BricsCAD VBAを使ってみよう[5] VBAの基本コード②
BricsCAD VBAを使ってみよう[6] Excelとの連携①
「BricsCAD VBA to Excel」Get_CoordinateValues
BricsCAD VBAを使ってみよう[7] Excelとの連携②
「Excel VBA to BricsCAD」Get_Area
BricsCAD VBAを使ってみよう[8] Excelとの連携②-2
「Excel VBA to BricsCAD」Draw_ChannelSteel
BricsCAD VBAを使ってみよう[9] TABLEの自動作成と値入力
「BricsCAD VBA 」AutomaticCreation of TABLE
BricsCAD VBAを使ってみよう[10] Excelとの連携②-3
「Excel VBA to BricsCAD」SerialNumber_Ⅱ
BricsCAD VBAを使ってみよう[11] Excelとの連携②-4
「Excel VBA to BricsCAD」Draw_Rectang
BricsCAD VBAを使ってみよう[12] Excelとの連携②-5 指定画層にOffset
「Excel VBA to BricsCAD」Continuous Offset to Specified Layer
BricsCAD VBAを使ってみよう[13] Excelとの連携②-6 指定画層にHATCH
「Excel VBA to BricsCAD」Continuous Hatch to Specified Layer
BricsCAD VBAを使ってみよう[14] Excelとの連携②-7 長さ計測
「Excel VBA to BricsCAD」Get Length
以下検討中です。
◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇
「この特集記事の内容につきましては、
こちらの環境のみの検討結果です。
動作保証は出来かねますため、ご参考
資料としてお扱いください。
Windows11(64bit)
BricsCAD pro V21(64bit)
Office2019(64bit)
◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇