前提・実現したいこと
Excel2007のオートシェイプやテキストエリアを使い、地図シンボルと説明の大きさをそろえるマクロを作っています。通常のオートシェイプに対する処理では不具合は無かったのですが、オブジェクトをグループ化したところ、グループ内のシェイプ全体がちょっとずつ位置がズレてしまう現象が起こるようになりました。
テストではグループ化したオブジェクト(オートシェイプとテキストエリアを2セット)、念のため画像(msoPicture)1個で試し、表示倍率が100%以外の場合に同様の現象が発生することがわかりました。
発生している問題・エラーメッセージ
該当のソースコード
ExcelVBA
1```ここに言語を入力 2Public Sub loopGroupedShape() 3 Dim sp As Shape 4 Dim spg As Shape 5 Dim gr As Collection 6 7 Set gr = New Collection 8 For Each sp In ActiveSheet.Shapes 9 If sp.Type = msoGroup Then 10 gr.Add sp 11 ElseIf sp.Type = msoPicture Then 12 sp.LockAspectRatio = msoFalse 13 Else 14 sp.LockAspectRatio = msoFalse 15 sp.Height = 25 16 If sp.Type = msoTextBox Then sp.Width = Len(sp.TextEffect.Text) * 10 Else sp.Width = 25 17 End If 18 Next 19 20 Do While gr.Count > 0 21 For Each spg In gr 22 For Each sp In spg.GroupItems 23 If sp.Type = msoGroup Then 24 gr.Add sp 25 ElseIf sp.Type = msoPicture Then 26 Else 27 sp.LockAspectRatio = msoFalse 28 sp.Height = 25 29 If sp.Type = msoTextBox Then sp.Width = Len(sp.TextEffect.Text) * 10 Else sp.Width = 25 30 End If 31 Next 32 gr.Remove 1 33 Next 34 Loop 35 36End Sub
### 試したこと ・LockAspectRatio を値設定の前後に挿入する ・Debug.Printで現在のHeightやWidthを取得して再挿入する ### 補足情報(FW/ツールのバージョンなど) MicroSoft Excel 2007 MicroSoft Excel 2010 MicroSoft Excel 2013
Excel2010では再現しませんでしたね。
同じような問題で、解決してないかたが海の向こうにいてるような。
https://answers.microsoft.com/en-us/msoffice/forum/msoffice_excel-mso_other-mso_2007/how-do-i-keep-shapes-from-moving-on-their-own-in/df0a4e93-b5ae-460b-9c52-c81ee35af5ab
ご調査ありがとうございます。
ふと思い立って新しいファイルで始めて見たところ、新規のシートでは発生しませんでした。
また、別のバージョンのExcel2013で同ファイルを操作したところ、再度同じ現象が発生しました。
オブジェクトのプロパティを現象が発生しているシートから発生していないシートにコピーするマクロを新規に作成しましたが、シート単位で発生の有無があることがわかりました。
Excel2013で発生したということは、2007の問題ではないようですね。
ShapeのTop、Left、Height、WidthなどはSingleなので、
なにか処理を行うごとに誤差がまるめられているのかも。
処理の前に値を控えて、処理の後、値を戻してやるという最終手段は、ありますよね。
色々試しているうちに、何故か表示倍率に依拠していることがわかりました。
ちょっと質問を変更して表示倍率を変更して対応してみました。
FromMZ1500さんをベストアンサーに選びたかったのですが、解決済みにしてしまいました。すみません。
実際のところバグの根本的解決には至っていないので悩ましいところです・・・
お気遣いありがとうございます。
対応策がみつかってなにより。
回答1件
あなたの回答
tips
プレビュー