覚書です。
'vba Select Case True
知った際に結構衝撃的だったのですが、先にTrueを条件にしてしまい
イロイロと異なる条件を元に判断してしまうのに利用しています。
(雰囲気的にYesマンみたいなイメージです)
この記法は結構独特なのかと思っていたのですが、
C,C++,Java,Js等の switch(true) みたいな書き方はありそうです。
確かC#では確か出来なかったですし、Pythonではそもそも
switch、select case の様な条件分岐が無いです。
まぁ、賛否は両論ですね。
switch(true) イディオム考察 - Qiita
自分は switch(true) イディオムを使ってなぜクソコードを書くのか - Qiita
Drawのビューがロックされているか? を判断したい時に上手く
判断出来なかったです。
'vba DrawingDocumentをアクティブにして下さい Option Explicit Sub CATMain() Dim sel As Variant Set sel = CATIA.ActiveDocument.selection Dim msg As String msg = "ビューを選択してください" sel.Clear Select Case sel.SelectElement2(Array("DrawingView"), msg, False) Case "Cancel", "Undo", "Redo" Exit Sub End Select Dim vi As DrawingView Set vi = sel.Item(1).Value Dim res As Boolean '正統派 msg = "IF : " If vi.LockStatus Then Debug.Print msg & "Lock" Else Debug.Print msg & "UnLock" End If 'こだわり派 msg = "IIF : " msg = msg & IIf(vi.LockStatus, "Lock", "UnLock") Debug.Print msg '邪道派 msg = "SELECT CASE : " Select Case True Case vi.LockStatus Debug.Print msg & "Lock" Case Else Debug.Print msg & "UnLock" End Select End Sub
Drawをアクティブにし、ロックされていないビューを選択すると
IF : UnLock IIF : UnLock SELECT CASE : UnLock
でOKなんですが、ロックされているビューを選択すると
IF : Lock IIF : Lock SELECT CASE : UnLock
"Select Case True" だけが上手く判断出来ていないんです。
理由はわからないのですが、上手く行かないので避けておかなきゃ・・・。
ビューの場合、ロックされていなくて、参照ビューをもっていなくて、
分離されていなくて・・・ の様に異なるプロパティを単純にクリアした
ものだけ処理したい場合は、
ELSE IF → ネストが深くなってイヤ(Excelの複雑な式みたいになると混乱する)
IFのOR → 1行長い
IIF → 条件内が長くなりIFと変わらない
フラグ立てる → 一度しか使わない変数を作りたくない
とイロイロ方法が有りそうなのですが、
クリアしなかった条件によって ”〇〇の条件が不足しています”
と警告したい場合に一番清楚に書けるのが "Select Case True" かな?
と思い、ここ数年は好んで使用していますがどうでしょう?
(今回は上手くいかなかったのですが)