|
こんにちは^^
いつもお世話になります。
久しぶりに質問させていただきます。
普段、オートシェイプのテキストボックスなどに文字を入力することが多々あります。
「明朝体で、上下・左右ともセンタリング」という形が多いので、その形で「テキスト入力」できるマクロを作り(というか作ってもらって^^;)右クリックメニューに登録しました。
その後、「ゴシック」が登場することが増え、そちらにも対応できるマクロを追加(ちょこっとアレンジしだけだけど)しました。
以下がそのコードです。(長くて失礼します)
'==============================================
Sub Auto_Open()
Dim cBar As Office.CommandBar
Dim cBarCtrl As Office.CommandBarControl
Dim cBarCtrl2 As Office.CommandBarControl
Call Auto_Close
Set cBar = Application.CommandBars("Shapes")
'テキスト追加オリジナル(明朝)
Set cBarCtrl = cBar.Controls.Add(Type:=msoControlButton _
, Before:=6)
With cBarCtrl
.Caption = "テキストの追加 オリジナル(明朝)"
.OnAction = "AddTextToShape"
.Visible = True
End With
'テキスト追加オリジナル(ゴシック)
Set cBarCtrl2 = cBar.Controls.Add(Type:=msoControlButton _
, Before:=7)
With cBarCtrl2
.Caption = "テキストの追加 オリジナル(ゴシック)"
.OnAction = "AddTextToShape2"
.Visible = True
End With
End Sub
'==============================================
Sub Auto_Close()
Application.CommandBars("Shapes").Reset
End Sub
'==============================================
Private Sub AddTextToShape() ’----(1)
'明朝
Dim shpA As Shape
Dim charsA As Characters
On Error Resume Next
Set shpA = ActiveSheet.Shapes(Selection.Name)
Set charsA = shpA.TextFrame.Characters
On Error GoTo 0
If charsA Is Nothing Then
MsgBox "この操作は行えません。", vbInformation
Exit Sub
End If
' シェイプのフォント・書式を設定できるように空文字を入れる
charsA.Text = ""
' シェイプのフォントを設定する
charsA.Font.Name = "MS 明朝"
charsA.Font.Size = 11
' シェイプの書式を設定する
shpA.TextFrame.HorizontalAlignment = xlHAlignCenter
shpA.TextFrame.VerticalAlignment = xlVAlignCenter
Application.ScreenUpdating = False
' シェイプ内で文字が打てる状態にする
SendKeys "{DOWN 5}{ENTER}"
Application.CommandBars("Shapes").ShowPopup
Application.ScreenUpdating = True
End Sub
'==============================================
Private Sub AddTextToShape2() ’----(2)
'ゴシック
Dim shpA As Shape
Dim charsA As Characters
On Error Resume Next
Set shpA = ActiveSheet.Shapes(Selection.Name)
Set charsA = shpA.TextFrame.Characters
On Error GoTo 0
If charsA Is Nothing Then
MsgBox "この操作は行えません。", vbInformation
Exit Sub
End If
' シェイプのフォント・書式を設定できるように空文字を入れる
charsA.Text = ""
' シェイプのフォントを設定する
charsA.Font.Name = "MS ゴシック"
charsA.Font.Size = 11
' シェイプの書式を設定する
shpA.TextFrame.HorizontalAlignment = xlHAlignCenter
shpA.TextFrame.VerticalAlignment = xlVAlignCenter
Application.ScreenUpdating = False
' シェイプ内で文字が打てる状態にする
SendKeys "{DOWN 5}{ENTER}"
Application.CommandBars("Shapes").ShowPopup
Application.ScreenUpdating = True
End Sub
'==============================================
これで、標準にある「テキストの追加」の上に「テキストの追加 オリジナル(明朝)」「テキストの追加 オリジナル(ゴシック)」のメニューが追加されたわけですが・・・・
これを実行すると、何故か「明朝」を選択したときに「ゴシック」になり、「ゴシック」を選択したときは「明朝」になってしまいます(>_<)
なんで〜〜〜〜?
と、いういことで、(1)と(2)のところ「ブレイクポイント」を置いて実行してみました。
ステップ実行で一行ずつ実行していくと、正常に動くようです。(明朝なら明朝に・・・)
でも、「明朝」を選択し(1)で止まったところで、「実行」ボタンで続けさせると、何故かつづけて(2)へ進んでいるようです。
同じように、「ゴシック」を選択すると(2)から(1)へ進んでしまいます。
なので、結果的に、選択したのと逆の結果になったんですね。
そこまではわかったのですが、そうなる原因がわかりません。
なんでそんな奇っ怪(私にとっては・・・)なことを起こるのでしょうか?
よろしくお願いしますm(__)m
|
|