エクセル2007において、オートシェイプと参照式の入ったテキストボックスをグループ化したものを多数配置しており、そのシートを別のブックにコピーしたところテキストボックスの参照値が同期されず、調べたところ2007でのバグのようでした。
対策として、テキストボックスの数式欄に入りそのままENTERすると再度参照値が同期されるようになるのですが、すべてのテキストボックスにこの作業をコピーの度に行うのは現実的ではないのでVBAを用いて数式欄を更新できる状態にしようとしています。
グループ化されていないテキストボックスを全て一つずつ認識することができるところまではできたのですが、肝心な数式に入りそのまま更新する方法がわかりません。
下記コードの※の部分に入れるコードをお教えいただけると幸いです。
下記コードでは削除を行い存在するグループ化されていないテキストボックスが全て削除されることを確認しました。
また、このコードをチェックしている環境はエクセル2003であることが原因だと考えているのですが、グループ内のテキストボックスは下記コードでは削除されませんでした。
この部分に関してもエクセル2007でも明らかに不可能な場合はご享受いただきたいと思います。
エクセル2007は職場での環境で、2003は自宅の環境です。
テキストボックスの参照先は同じシート内です。
シートのコピー後にリンクの設定でコピー元のリンクとなっているのをコピー先のリンクに変更もしています。
よろしくお願いします。
<追記1>
再計算ボタンは試しましたがシートのコピーで同期されなくなったテキストボックスは変わらず同期されないままでした。
また、設定で自動計算になっていることも確認しました。
VBA
1Sub test() 2 Dim i As Long 3 Dim s As Long 4 With ActiveSheet.Shapes 5 For i = .Count To 1 Step -1 6 If .Item(i).Type = msoTextBox Then 7 .Item(i).Delete※※※※※※※※※※※※ 8 ElseIf .Item(i).Type = msoGroup Then 9 For s = .Item(i).GroupItems.Count To 1 Step -1 10 If .Item(i).GroupItems(s).Type = msoTextBox Then 11 .Item(i).GroupItems(s).Delete※※※※※※※※※※※※ 12 End If 13 Next s 14 End If 15 Next i 16 End With 17End Sub
<追記2>
下記コードで解決できるかもしれません。手元にエクセル2007がないので確認できないのですが、確認出来次第こちらに報告させていただきます。
また、どなたか2007をお持ちの方がいらっしゃいましたらご確認していただけると幸いです。
VBA
1Sub test() 2 Dim i As Long 3 Dim s As Long 4 With ActiveSheet.Shapes 5 For i = 1 To .Count Step 1 6 If .Item(i).Type = msoTextBox Then 7 .Item(i).Select 8 Selection.Formula = Selection.Formula 9 ElseIf .Item(i).Type = msoGroup Then 10 For s = .Item(i).GroupItems.Count To 1 Step -1 11 If .Item(i).GroupItems(s).Type = msoTextBox Then 12 .Item(i).GroupItems(s).Select 13 Selection.Formula = Selection.Formula 14 End If 15 Next s 16 End If 17 Next i 18 End With 19End Sub 20
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。