[[20100304203952]] 『マクロでの線種変更について』(いけっち) ページの最後に飛ぶ

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

 

『マクロでの線種変更について』(いけっち)

オートシェイプにマクロを登録し、そのオートシェイプをクリックすることで線種を実線・点線への切り替えを行っています。
このとき、点線を「Selection.ShapeRange.Line.DashStyle = msoLineRoundDot」の記述により変更をしているのですが、手動で「点線(丸)」を選択する場合と点線の粗さ(点と点の間隔)が違います。
細かい間隔にしたいのですが、何か知恵はないでしょうか?

ちなみに、記述しているマクロは下記のようなマクロです。(オブジェクトは50ぐらいあって、一つ一つ名前を付けてマクロもそれぞれsubを作成しています。下手くそですが・・・・。)

Sub Object1()
Dim L As Integer

i = ActiveCell.Address

ActiveSheet.Shapes("オブジェクト1").Select
L = Selection.ShapeRange.Line.DashStyle

If L = msoLineSolid Then

  Selection.ShapeRange.Line.DashStyle = msoLineRoundDot
  Selection.ShapeRange.Line.Weight = 0.75
Else
  Selection.ShapeRange.Line.DashStyle = msoLineSolid
  Selection.ShapeRange.Line.Weight = 1.75

End If
Range(i).Select

End Sub


 外しているでしょうが・・ (mitsu)

 >Selection.ShapeRange.Line.Weight = 0.75 を
 Selection.ShapeRange.Line.Weight = 0.25 へ変更。


 >、一つ一つ名前を付けてマクロもそれぞれsubを作成しています。
 この50のオートシェイプに投稿されたような破線と実線の切り替えを行うVBAコードを登録したいという
 ことなら、オートシェイプの数VBAコードを用意する必要はありません。

 標準モジュールに

 '========================================================================
 Sub swich_dot_solid()
    Dim shp As Variant
    shp = Application.Caller
    If TypeName(shp) = "String" Then
       With ActiveSheet.Shapes(shp).Line
          If .DashStyle = msoLineSolid Then
             .DashStyle = msoLineRoundDot
             .Weight = 0.75
          Else
             .DashStyle = msoLineSolid
             .Weight = 1.75
          End If
       End With
    End If
 End Sub

 上記のswich_dot_solidを個々のオートシェイプに登録してください。

 ichinose


mitsuさん 私も初めは線の太さの問題かと思いましたが、そうではありませんでした…。単なるエクセルのバグなんですかね。。。

ichinoseさん ありがとうございます。非常にわかりやすい!後学のために「If TypeName(shp) = "String" Then」はどういう意味ですか??


 あっ、これ間違いです。

  Sub swich_dot_solid()
    If TypeName(Application.Caller) = "String" Then
       With ActiveSheet.Shapes(Application.Caller).Line
          If .DashStyle = msoLineSolid Then
             .DashStyle = msoLineRoundDot
             .Weight = 0.75
          Else
             .DashStyle = msoLineSolid
             .Weight = 1.75
          End If
       End With
    End If
 End Sub

 図形に登録したマクロ内では、Application.Callerは、図形の名前を文字列として返します。

 よって、

 If TypeName(Application.Caller) = "String" Then

 これは、図形に登録されている場合だけ、If以下の処理を行うという意味です。
 もっとも、図形以外でも文字列を返す場合もあるので、簡単なチェックですけどね!!

 Application.Callerは、よくHelpで確認してみてください。

 ichinose


>ichinoseさん

ありがとうございました!


コメント返信:

[ 一覧(最新更新順) ]


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