マクロの編集

それでは、マクロの記録で作成されたコードを編集してみましょう。

前項で述べた、CreateCornerRectangleFeatureExtrusion2の一部を修正して、ユーザー入力が可能な形に変更します。

CreateCornerRectangleの引数は、矩形の始点X座標, 始点Y座標, 始点Z座標, 終点X座標, 終点Y座標, 終点Z座標の6つとなっているので、始点は原点(0, 0, 0)とし、終点をswWidth, swHeight, 0として幅と高さをユーザーが入力した値を受け取れるようにします。

FeatureExtrusion2は、6つ目の引数が押し出し量になっているので、swDepthとし、奥行きをユーザーが入力した値を受け取れるようにします。

実際にはこんな感じです。

vSkLines = Part.SketchManager.CreateCornerRectangle(0, 0, 0, swWidth, swHeight, 0)
Set myFeature = Part.FeatureManager.FeatureExtrusion2(True, False, False, 0, 0, swDepth, 0.01, False, False, False, False, 0.01745329251994, 0.01745329251994, False, False, False, False, True, True, True, 0, 0, False)

ユーザー入力の手段としては、比較的簡単なInputBoxを使用してみます。

例えば、以下のような感じです。

Dim swWidth, swHeight, swDepth As Double

Do Until swWidth > 0
    sInput = InputBox("幅を入力して下さい。")
    If sInput = "" Then
        Exit Sub
    End If
    swWidth = Val(sInput)
    If swWidth > 0 And swWidth <= 500000 Then
        swWidth = swWidth / 1000
    Else
        MsgBox "0を超える500000までの数値を入力して下さい。"
    End If
Loop

Do Until swHeight > 0
    sInput = InputBox("高さを入力して下さい。")
    If sInput = "" Then
        Exit Sub
    End If
    swHeight = Val(sInput)
    If swHeight > 0 And swHeight <= 500000 Then
        swHeight = swHeight / 1000
    Else
        MsgBox "0を超える500000までの数値を入力して下さい。"
    End If
Loop

Do Until swDepth > 0
    sInput = InputBox("奥行きを入力して下さい。")
    If sInput = "" Then
        Exit Sub
    End If
    swDepth = Val(sInput)
    If swDepth > 0 And swDepth <= 500000 Then
        swDepth = swDepth / 1000
    Else
        MsgBox "0を超える500000までの数値を入力して下さい。"
    End If
Loop

これを、Set swApp = Application.SldWorksの前に入れておけば、押し出し作成の前にユーザーからの入力を促すことが出来ます。

簡単に説明すると、InputBoxにてユーザーが入力した値から幅・高さ・奥行きをそれぞれ受け取り、swWidth, swHeight, swDepthに代入するといった感じです。
値は、500000mmまでとしています。
ちなみに、値を代入する際に入力した値を1000で割っているのですが、これは入力した単位がmmに対して、引数の単位はmとなっているためです。

すべての入力が正常に行われれば、swWidth, swHeight, swDepthCreateCornerRectangleFeatureExtrusion2の引数に渡すことで、任意サイズの直方体が作成出来るようになりました。

次に、完成したプログラムの動作確認をしてみましょう。