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 は、選択アイテムを判定しつつダイアログを切り替えるだけじゃなく
非公開ダイアログを表示するための処理が内包されてるのか!よんでるのか?
うーーーーーーーーーーーーーーん。
うーん・・・。
がんばって定数チェックしてみるってのもありだよね。
というか、定数ご存知の方いらっしゃいましたら
教えていただけると幸いです。