線を引いて動かす ② 滑らかに動かそうとして失敗

ある理由から唐突に、Excelで線を引いて、それを動かしたくなった。
前回は線を引いて、それを別の位置に動かすまでを行った。
infoment.hatenablog.com

今日は、もっと滑らかに動かしてみよう。
f:id:Infoment:20200903232458p:plain

今回は、このように考えた。
一気に移動させるのではなく、任意の回数nで動かす。
その場合、一回の移動量は、x座標で言えば
 (始点-終点)/n
となる。

それでは、こんな線を、
f:id:Infoment:20200903232743p:plain

こんな風に動かしてみよう。
f:id:Infoment:20200903232821p:plain

Sub test()
    ' 始点のx,y座標。
    Dim Sx(1) As Double
    Dim Sy(1) As Double
    ' 終点のx,y座標
    Dim Ex(1) As Double
    Dim Ey(1) As Double
    
    ' 初期値設定(てきとー)。
    Sx(0) = 0: Sy(0) = 0
    Ex(0) = 200: Ey(0) = 200
    
    ' 線を描画。強引にWithで、一行の長さを抑えてみた。
    Dim myLine As Shape
    With ActiveSheet.Shapes
        Set myLine = .AddConnector(msoConnectorStraight, _
                                   Sx(0), Sy(0), _
                                   Ex(0), Ey(0))
    End With
    
    ' 移動後の座標設定。
        Sx(1) = 200: Sy(1) = 0
        Ex(1) = 0: Ey(1) = 200
    
    ' 移動回数の設定。
    Dim MovingTimes As Long
        MovingTimes = 30
        
    ' 一回当たりの移動量(始点)
    Dim dSx As Double
        dSx = (Sx(1) - Sx(0)) / MovingTimes
    Dim dSy As Double
        dSy = (Sy(1) - Sy(0)) / MovingTimes

    ' 一回当たりの移動量(終点)
    Dim dEx As Double
        dEx = (Ex(1) - Ex(0)) / MovingTimes
    Dim dEy As Double
        dEy = (Ey(1) - Ey(0)) / MovingTimes
    
    Dim i As Long
    
    ' 設定した移動回数で変形。
        For i = 1 To MovingTimes
            With myLine
                .Left = Sx(0) + dSx * i
                .Top = Sy(0) + dSy * i
                .Width = Ex(0) + dEx * i - .Left
                .Height = Ey(0) + dEy * i - .Top
            End With
            Application.Wait [Now() + "00:00:00.03"]
        Next
End Sub

試した結果が、こちら。
f:id:Infoment:20200903233019g:plain

・・・あれ?
ああ、そうか!

次回に続きます。

参考まで。