意の中のカワズ(35歳の壁 別館)

35歳の壁の別館ブログです。コード中心になるようにしたいので、技術雑記はできるだけ本館に書きます。

VBA:「シェイプの書式変更」

シェイプの書式変更をコモンダイアログから設定する方法。
以下は、指定したシェイプ名の書式を変更します。
※ Line シェイプじゃないと動作しないようにしています。


' 選択したオブジェクトの色をダイアログから設定させます。
Public Sub colorSetFromDialogSelectItem( _
Optional strTargetName As String = "")

Dim intRet As Integer

If strTargetName <> "" Then
ActiveSheet.Shapes(strTargetName).Select
End If
If StrComp(TypeName(Selection), "Line") = 0 Then
intRet = Application.Dialogs(xlDialogPatterns).Show
End If

End Sub

実は、自分で作ったオリジナルの設定画面で色だけを設定するために
作ったのですが、これだと他の書式も同時に設定されてしまいます。


色だけを取得するためのカラーピッカーを作成(取得)する場合には、
やはり以下のほうがよいと思う。(また余計なものを作ってしまった・・。)
セルに対して行うためのダイアログを表示して、色情報だけ返してもらうものです。
IRO_FOR_DIALOG_DUMMY は、ダミーセル(そのセルに対してのカラーリストを
表示する)のRange名がConstで定義されています。

これを応用すれば選択したアイテムがLineのときのRGBだけを返すものが
できるはず。(面倒なのでもうつくらない!)



' 色をダイアログから設定させます。
' ただし、事前に設定場所(Range文字列)を選択した場所に対してになります。
' ソレをいいことにダミーポイントを使う方法にしました。
' (戻り画面で設定を押すまで有効にしたくないため。)
' 設定後の値を戻り値として返します。
Public Function colorSetFromDialog(strColorName As String) As Variant

Dim intRet As Integer

Range(IRO_FOR_DIALOG_DUMMY).Select
intRet = Application.Dialogs(xlDialogPatterns).Show
' 組み込みダイアログは、[OK] でtrue、キャンセルでfalse を返す。
If intRet Then
colorSetFromDialog = Range(IRO_FOR_DIALOG_DUMMY).Interior.Color
Else
colorSetFromDialog = Range(strColorName).Interior.Color
End If
Range(IRO_FOR_DIALOG_DUMMY).Interior.ColorIndex = xlNone

End Function


あぁ・・・くだらないことに時間掛けてて本題が進んでない!
バカ・・。



追記:2011.0928 22:01

一応の補足として、当然ながらDialogs関数で
ダイアログ定数を指定して表示することができるなら、
最初からLineオートシェイプ用の書式設定ダイアログを指定すればよい。
と、思うのだが(今回イチイチ頭がまわらんかった。)、なんか
前も探してだめだった気がしている。

▼ 今回探しているダイアログ


一応、ダイアログ定数の一覧は、こちら。
ありがたいよね。

http://www.excel7.com/personal/vba_shiryou1.htm

で、今一度試してみたが、関連してそうなのは全部ダメだった。

そんななか、Googleで検索することを思いつく。(ぉい!w
いやぁ・・・最近作ることばかり考えててだめだね・・。
いえ、今風邪ひいてるんで頭回ってないのが大きいのですが。

やぁ、真実を見つけましたよ。(笑
マイクロソフトのサイトです。

http://support.microsoft.com/kb/212177/ja

そこには衝撃の処理が・・。


SendKeys "^1", True


・・・・・。(w
わかりますよね。
Ctrl + 1 です。

そう、いわゆる書式設定を表示するためのショートカットです。

え?なにどうゆうこと??????
Ctrl+1 は、選択アイテムを判定しつつダイアログを切り替えるだけじゃなく
非公開ダイアログを表示するための処理が内包されてるのか!よんでるのか?

うーーーーーーーーーーーーーーん。
うーん・・・。

がんばって定数チェックしてみるってのもありだよね。
というか、定数ご存知の方いらっしゃいましたら
教えていただけると幸いです。