t-hom’s diary

主にVBAネタを扱っているブログ…とも言えなくなってきたこの頃。

VBA マクロでExcelのシェイプを旋回運動させる

こちらの記事に触発されて、ちょっと昔やった別の方法をご紹介。
infoment.hatenablog.com

参照元はとても王道的に計算してるんだけど、私のは手抜き。

コードはこちら。

Private Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)
Sub FakeCircling()
    Dim sh As Shape
    Set sh = Sheet1.Shapes.AddShape(msoShapeOval, 100, 50, 10, 10)
    Dim shadow As Shape: Set shadow = sh.Duplicate
    shadow.Visible = msoFalse
    shadow.Left = sh.Left
    shadow.Top = sh.Top
    shadow.IncrementTop 100
    Dim sh2 As Shape
    Set sh2 = Sheet1.Shapes.Range(Array(sh.Name, shadow.Name)).Group
    Do
        Sleep 1
        Application.ScreenUpdating = False
        sh2.IncrementRotation 5
        Application.ScreenUpdating = True
        DoEvents
    Loop
End Sub

ちゃんと動作してる。
f:id:t-hom:20190121232743g:plain

何してるかというと。。
f:id:t-hom:20190121232912g:plain

対角線上に見えない影シェイプをつくってグルーピングしてRotate命令で回してる。

当ブログは、amazon.co.jpを宣伝しリンクすることによってサイトが紹介料を獲得できる手段を提供することを目的に設定されたアフィリエイト宣伝プログラムである、 Amazonアソシエイト・プログラムの参加者です。