[[20170105123929]] 『シェイプ名の差異?』(KITA) ページの最後に飛ぶ

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

 

『シェイプ名の差異?』(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 >


>これはよく知られていることなのでしょうか?
>過去ログも「シェイプ名」「日本語」「英語」などで検索して見かけませんでしたので、
>またなんだかすっきりしないものですから質問させていただきました。
どうなんでしょう?
昔から、表示は日本語でもVBAでNameプロパティをみると英語になってたような、
なってなかったような。。。
でも、変更可能な名前に依存しないで、種類で条件分岐してみてはいかがでしょうか?

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.