[[20091127170833]] 『円を描く』(JON) >>BOT

[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]

 

 『円を描く』(JON)

 Excel2003で円を描くマクロを組んだのですが、Excel2007で使用すると
 円がずれて描かれしまいます。

 それと元々Sheet内に描かれているオブジェクトが全てずれてしまいます。

 どうしてなのでしょうか?
 何か回避する方法はないのでしょうか?

 教えてください。
 かなり困っております。

 コードは提示できませんか?
 ※2007のマクロは図形描画系が2003以前に比べて「ダメ」になった感
 があります。

 また、調べたわけではないのでいい加減なこといってるかも知れませんが、
 VBAで使う位置はどこから見た位置か、ということが問題になります。
 ようするに、現在のエクセルの環境(メニューを二段にしているとか三段に
 しているとか)によって変わってくる可能性があります。
 (カリーニン)

 >カリーニンさん
 ありがとうございます。
 2007の方が駄目になったのですね?
 こまりましたねぇ。

 ほんの一部ではありますがコードを提示します。

        If OptionButton4.Value = True Then
            Set obj = Selection
            Call sp_call
            Set R = Range("W21")
            Set sp = ActiveSheet.Shapes.AddShape _
                (msoShapeOval, R.Left + 5, pc(R, 2), pc(R, 3) * 3, pc(R, 3) * 1)
            sp.Select
            Selection.ShapeRange.Fill.Visible = False
            obj.Select

        ElseIf OptionButton5.Value = True Then
            Set obj = Selection
            Call sp_call
            Set R = Range("W22")
            Set sp = ActiveSheet.Shapes.AddShape _
                (msoShapeOval, R.Left + 5, pc(R, 2), pc(R, 3) * 3, pc(R, 3) * 1)
            sp.Select
            Selection.ShapeRange.Fill.Visible = False
            obj.Select

        ElseIf OptionButton6.Value = True Then
            Set obj = Selection
            Call sp_call
            Set R = Range("W23")
            Set sp = ActiveSheet.Shapes.AddShape _
                (msoShapeOval, R.Left + 5, pc(R, 2) + 9, pc(R, 3) * 3, pc(R, 3) * 1)
            sp.Select
            Selection.ShapeRange.Fill.Visible = False
            obj.Select

        ElseIf OptionButton7.Value = True Then
            Set obj = Selection
            Call sp_call
            Set R = Range("W24")
            Set sp = ActiveSheet.Shapes.AddShape _
                (msoShapeOval, R.Left + 5, pc(R, 2) + 4, pc(R, 3) * 1.8, pc(R, 3))
            sp.Select
            Selection.ShapeRange.Fill.Visible = False
            obj.Select

        End If

 --------------------------
 Private Sub sp_call()
    Dim sp As Shape
    For Each sp In ActiveSheet.Shapes
        If Not Intersect(Range("W21:W24"), _
            Range(sp.TopLeftCell, sp.BottomRightCell)) Is Nothing Then
            sp.Delete
        End If
    Next
 End Sub

 どこから見た位置なのかがわかりません。
 いろんなサイト等で調べて組み合わせたものなので…。
 すいません。

 これでお分かりになるでしょうか?
 よろしくお願いします。

 (JON)


 円を描いてるのは
            Set sp = ActiveSheet.Shapes.AddShape _
                (msoShapeOval, R.Left + 5, pc(R, 2), pc(R, 3) * 3, pc(R, 3) * 1)
 です。
 AddShape と言う単語をヘルプで調べると
 expression.AddShape(Type, Left, Top, Width, Height)
 が出てきますので、
  左が R.Left + 5
  上が pc(R, 2)
  幅が pc(R, 3) * 3
  高さが pc(R, 3) * 1
 の位置に描かれるはずです。

 例えば
  OptionButton4.Value = True
 の場合、Rは
            Set R = Range("W21")
 ですから、左は W21セルの左端+5 の位置に成ると思います。

 2003と2007で、図形の位置がずれるのは
 そう言う物だと思って於いた方が良いように思います。

 一応、サポートにこの様な物は有ります。
[オブジェクトの位置関係] でオプションを設定した場合、
Excel 2007 で挿入されたグラフや図形が拡大または位置がずれて印刷される
http://support.microsoft.com/kb/934331/

 また、検索中に見つけた過去ログ。
[[20070221091920]]『Excel2007について』(kysj) 
 とは言え、この過去ログは2007年の情報なので
 最新の物を探せば 何か見つかるかも知れません。

 こちらでは  
http://ziddy.japan.zdnet.com/qa4633984.html
  ★Office Updateを可能な限り最新にする(2003、2007どちらも)
  ★拡大/縮小印刷の設定を100%にして保存する
 等の案も出されていますので、試してみられても良いかもしれません。

 (HANA)

コメント返信:

[ 一覧(最新更新順) ]


YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki. Modified by kazu.