[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]
『シェイプ名の差異?』(KITA)
お世話になります。
シートに引いた赤線を消すExcel2007当時のサブルーチン
Sub Delete_Shapes()
Dim Sp As Shape For Each Sp In ActiveSheet.Shapes If InStr(Sp.Name, "直線") Then 'If InStr(Sp.Name, "直線") Or InStr(Sp.Name, "Straight") Then If Sp.Line.ForeColor.RGB = vbRed Then Sp.Delete End If End If Next End Sub
Excel2010以後の環境で直線が消えなくなり、調べてみると、ワークシートオブジェクト名は「直線」と表示されているもののVBAから名前取得すると、「Straight」と英語翻訳されて取得されることがわかりました。名前を変更すればその表示になりますが。引きっぱなしの状態では、シート表示では日本語表示でも、エクセル2010以後のVBAからの名前取得では英語表示されることがわかりました。つまりInstr...直線...だけではヒットしないとわかり、コメントアウトした行のように英語表記も加えることで修正しました。
これはよく知られていることなのでしょうか?過去ログも「シェイプ名」「日本語」「英語」などで検索して見かけませんでしたので、またなんだかすっきりしないものですから質問させていただきました。よろしくお願いいたします。
< 使用 Excel:Excel2010、使用 OS:Windows7 >
Sub Macro2()
Dim shp As Shape
For Each shp In ActiveSheet.Shapes With shp If .Type = msoLine Then If shp.Line.ForeColor.RGB = vbRed Then shp.Delete End If End If End With Next End Sub (まっつわん) 2017/01/05(木) 13:47
まっつわんさんのコメント通り、昔から、図形を挿入した際にふられる規定値としての図形名は 英語(たとえば Rectangle 1 とか)で、『便宜的に』表向きの名前ボックスには 日本語の名前が 表示されています。この日本語の規定値は、そのものを指定して図形を参照できるのですが、 ローカルウィンドウをさがしまくっても、どこにも表れない、なんとも 便りのない 正体不明の 名前です。
さらに、質問文にもあるようにバージョンがかわると、この規定値としての日本語部分も、せっそうなく(?) 変わる場合が少なくありません。
そもそも、図形は なんとでも名前を変更することができますね。 四角形に対して "楕円 3" なんて名前をつけても、仕組み上は全く問題にはなりません。
ですから、図形名で判断するのではなく、まっつわんさんのコードのように、シェープ.Type を判定するか あるいは、『隠しプロパティ』ですけど、図形の種別ごとのコレクションがあって、たとえば線であれば Lines 、このなかのメンバーが Line。
なので Dim ln As Line としておいて
For Each ln In ActiveSheet.Lines
これで、線のみが取得できます。
(β) 2017/01/05(木) 14:12
まっつわんさん 変更可能な名前に依存しないで、種類で条件分岐
βさん Dim ln As Line For Each ln In ActiveSheet.Lines
サンプルまで示していただき感謝いたします。
助かりました。すっきりしました。改善に励みます。
(KITA) 2017/01/05(木) 18:13
[ 一覧(最新更新順) ]
YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki.
Modified by kazu.