Excel VBA質問箱 IV

当質問箱は、有志のボランティア精神のおかげで成り立っています。
問題が解決したら、必ずお礼をしましょうね。
本サイトの基本方針をまとめました。こちら をご一読ください。

投稿種別の選択が必要です。ご注意ください。
迷惑投稿防止のため、URLの入力を制限しています。ご了承ください。


6695 / 13646 ツリー ←次へ | 前へ→

【43695】矢印(オートシェイプ)の書式設定ダイアログ ひげくま 06/10/23(月) 11:25 質問[未読]
【43697】Re:矢印(オートシェイプ)の書式設定ダイア... Jaka 06/10/23(月) 12:13 発言[未読]
【43702】Re:矢印(オートシェイプ)の書式設定ダイア... ひげくま 06/10/23(月) 12:38 お礼[未読]
【43704】Re:矢印(オートシェイプ)の書式設定ダイア... ichinose 06/10/23(月) 12:51 発言[未読]
【43714】Re:矢印(オートシェイプ)の書式設定ダイア... ひげくま 06/10/23(月) 15:12 お礼[未読]
【43698】Re:矢印(オートシェイプ)の書式設定ダイア... かみちゃん 06/10/23(月) 12:14 発言[未読]
【43703】Re:矢印(オートシェイプ)の書式設定ダイア... ひげくま 06/10/23(月) 12:40 お礼[未読]
【43717】Re:矢印(オートシェイプ)の書式設定ダイア... Kein 06/10/23(月) 16:25 回答[未読]
【43720】Re:矢印(オートシェイプ)の書式設定ダイア... ひげくま 06/10/23(月) 17:18 お礼[未読]
【43721】Re:矢印(オートシェイプ)の書式設定ダイ... yuu1 06/10/23(月) 17:56 回答[未読]
【43733】Re:矢印(オートシェイプ)の書式設定ダイ... ひげくま 06/10/24(火) 9:29 お礼[未読]

【43695】矢印(オートシェイプ)の書式設定ダイアロ...
質問  ひげくま  - 06/10/23(月) 11:25 -

引用なし
パスワード
   こんにちは。

矢印(オートシェイプ)を右クリックして「オートシェイプの書式設定」を選択すると、「オートシェイプの書式設定」ダイアログボックスが現れますが、このダイアログボックスをVBAで表示させることはできるのでしょうか?

具体的には、矢印を用意しておき、何らかの方法(ボタンに登録するとか、特定セルのダブルクリックで実行させるとか)でマクロを実行すると、その矢印の色・太さ・端のスタイルを設定するための「オートシェイプの書式設定」ダイアログボックスが表示されるようにしたいのです。
「色と線」以外のタブは、無い方がベターです。

よろしくお願いします。

【43697】Re:矢印(オートシェイプ)の書式設定ダイ...
発言  Jaka  - 06/10/23(月) 12:13 -

引用なし
パスワード
   他は、調べるのが面倒になった。

Application.Dialogs(xlDialogPatterns).Show

Application.Dialogs この後、(を入力すると、候補が出るからいろいろ調べてみると良いかも、ヘルプにもあると思うけど?)

【43698】Re:矢印(オートシェイプ)の書式設定ダイ...
発言  かみちゃん  - 06/10/23(月) 12:14 -

引用なし
パスワード
   こんにちは。かみちゃん です。

>矢印(オートシェイプ)を右クリックして「オートシェイプの書式設定」を選択すると、「オートシェイプの書式設定」ダイアログボックスが現れますが、このダイアログボックスをVBAで表示させることはできるのでしょうか?
>
>具体的には、矢印を用意しておき、何らかの方法(ボタンに登録するとか、特定セルのダブルクリックで実行させるとか)でマクロを実行すると、その矢印の色・太さ・端のスタイルを設定するための「オートシェイプの書式設定」ダイアログボックスが表示されるようにしたいのです。
>「色と線」以外のタブは、無い方がベターです。

できないみたいです。
一応、組み込みダアログボックスで何かヒントがあるかと思いますが、以下を参考
にしてみてください。
http://www.happy500z.com/YNxv9a9.html

【43702】Re:矢印(オートシェイプ)の書式設定ダイ...
お礼  ひげくま  - 06/10/23(月) 12:38 -

引用なし
パスワード
   ▼Jaka さん:
回答ありがとうございます。

>Application.Dialogs(xlDialogPatterns).Show

これで、セルの色を設定するダイアログボックスを出せる、というところまでは調べたのですが、オートシェイプの色を設定するダイアログボックスを出す方法が解らなかったので、質問した次第です。
この経緯も書くべきでしたね。すみませんでした。

【43703】Re:矢印(オートシェイプ)の書式設定ダイ...
お礼  ひげくま  - 06/10/23(月) 12:40 -

引用なし
パスワード
   ▼かみちゃん さん:
回答ありがとうございます。

>できないみたいです。
やっぱりできないんですかねぇ………

>一応、組み込みダアログボックスで何かヒントがあるかと思いますが、以下を参考
>にしてみてください。
>http://www.happy500z.com/YNxv9a9.html

どうやら、無理みたいですねぇ。
ありがとうございました。

【43704】Re:矢印(オートシェイプ)の書式設定ダイ...
発言  ichinose  - 06/10/23(月) 12:51 -

引用なし
パスワード
   こんにちは。

>>Application.Dialogs(xlDialogPatterns).Show
>
>これで、セルの色を設定するダイアログボックスを出せる、というところまでは調べたのですが、オートシェイプの色を設定するダイアログボックスを出す方法が解らなかったので、質問した次第です。

本気でするなら、APIでしょうねえ!!

http://www.vbalab.net/vbaqa/c-board.cgi?cmd=one;no=42332;id=excel

ここから、探ってみてください。

【43714】Re:矢印(オートシェイプ)の書式設定ダイ...
お礼  ひげくま  - 06/10/23(月) 15:12 -

引用なし
パスワード
   ▼ichinose さん:
回答ありがとうございます。

>本気でするなら、APIでしょうねえ!!

ちゃんと理解したものじゃないと使いたくない性分なので、APIはやめておきます。

>http://www.vbalab.net/vbaqa/c-board.cgi?cmd=one;no=42332;id=excel

サンプルコードを参考にさせていただきます。

【43717】Re:矢印(オートシェイプ)の書式設定ダイ...
回答  Kein  - 06/10/23(月) 16:25 -

引用なし
パスワード
   全く方法が無い、というわけではありません。組み込みダイアログの各設定項目を、
ユーザーフォームやInputBoxなどを使って問い合わせるマクロを作れば、どうにか
目的とすることが出来そうです。ただし、やたらとコードが長く複雑になるわり
には、マクロ化するだけのメリットがあるかどうかは、大いに疑問が残るところ
でしょう。右クリックのメニューで、簡単に設定を変更できることだから。
いちおう、サンプルを作ってみました。標準モジュールの先頭から入れて下さい。
最近のバージョンでは、先端の形状の種類とか始点・終点別の設定、また線の太さも
ポイント値で細かく設定できようになってますが、それを全て実現させるのは
ホネが折れるので、Excel95時代に可能だった設定内容のみで構成しています。
最近のバージョンに合わせた設定項目にするなら、サンプルを元にして自分で改造
してみて下さい。
直線に登録するマクロは、一番下の Set_MyLine です。

Private Declare Function FindWindow Lib "USER32.dll" Alias "FindWindowA" _
(ByVal lpClassName As String, ByVal lpWindowName As String) As Long

Private Type ChooseColor
  lStructSize As Long
  hWndOwner As Long
  hInstance As Long
  rgbResult As Long
  lpCustColors As String
  flags As Long
  lCustData As Long
  lpfnHook As Long
  lpTemplateName As String
End Type

Private Declare Function ChooseColor Lib "comdlg32.dll" Alias _
"ChooseColorA" (pChoosecolor As ChooseColor) As Long

Private Const CC_RGBINIT = &H1
Private Const CC_LFULLOPEN = &H2
Private Const CC_PREVENTFULLOPEN = &H4
Private Const CC_SHOWHELP = &H8
Private Const CC_ENABLEHOOK = &H10
Private Const CC_ENABLETEMPLATE = &H20
Private Const CC_ENABLETEMPLATEHANDLE = &H40

Private Function GetColorValue(ByVal hWnd As Long) As Long
  Dim udtChooseColor As ChooseColor
  Dim Ret As Long
  
  With udtChooseColor
    .lStructSize = Len(udtChooseColor)
    .hWndOwner = hWnd
    .hInstance = 0
    .lpCustColors = String$(64, Chr$(0))
    .flags = CC_RGBINIT
  End With
  Ret = ChooseColor(udtChooseColor)
  If Ret <> 0 Then
    If udtChooseColor.rgbResult > RGB(255, 255, 255) Then
      GetColorValue = -2
    Else
      GetColorValue = udtChooseColor.rgbResult
    End If
  Else
    GetColorValue = 0
  End If
End Function

Private Sub LineColor(x As String)
  Dim hWnd As Long, Ret As Long

  hWnd = FindWindow("XLMAIN", Application.Caption)
  Ret = GetColorValue(hWnd)
  If Ret <> 0 Then
    ActiveSheet.Lines(x).Border.Color = Ret
  End If
End Sub

Sub Set_MyLine()
  Dim x As Variant, AryH As Variant, AryB As Variant
  Dim HType As Integer, BType As Integer
  Const St1 As String = "先端の形状を以下の数値で指定して下さい" & _
  vbLf & "1 = 無し" & vbLf & "2 = 開く" & vbLf & "3 = 閉じる" & _
  vbLf & "4 = 両端開く" & vbLf & "5 = 両端閉じる"
  Const St2 As String = "線の太さを以下の数値で指定して下さい" & _
  vbLf & "1 = 極細" & vbLf & "2 = デフォルト" & vbLf & _
  "3 = 中太" & vbLf & "4 = 太"
 
  x = Application.Caller
  If VarType(x) <> 8 Then Exit Sub
  If TypeName(ActiveSheet.DrawingObjects(x)) <> "Line" Then Exit Sub
  AryH = Array(xlNone, xlOpen, xlClosed, xlDoubleOpen, xlDoubleClosed)
  AryB = Array(xlHairline, xlThin, xlMedium, xlThick)
  Do
   HType = Application.InputBox(St1, Type:=1)
   If HType = False Then Exit Sub
  Loop While HType < 1 Or HType > 5
  ActiveSheet.Lines(x).ArrowHeadStyle = AryH(HType - 1)
  Do
   BType = Application.InputBox(St2, Type:=1)
   If BType = False Then Exit Sub
  Loop While BType < 1 Or BType > 4
  ActiveSheet.Lines(x).Border.Weight = AryB(BType - 1)
  Call LineColor(CStr(x)) 'コモンダイアログのカラーパレット呼び出し
End Sub

【43720】Re:矢印(オートシェイプ)の書式設定ダイ...
お礼  ひげくま  - 06/10/23(月) 17:18 -

引用なし
パスワード
   ▼Kein さん:
回答ありがとうございます。
サンプルコードをじっくり読んで理解してみようと思います。

【43721】Re:矢印(オートシェイプ)の書式設定ダイ...
回答  yuu1  - 06/10/23(月) 17:56 -

引用なし
パスワード
   こんにちは。
>「色と線」以外のタブは、無い方がベターです。

>>Application.Dialogs(xlDialogPatterns).Show
>これで、セルの色を設定するダイアログボックスを出せる、というところまでは調べたのですが、オートシェイプの色を設定するダイアログボックスを出す方法が解らなかったので、質問した次第です。

xlDialogPatternsでオートシェイプの色と線を設定するダイアログが表示できますよ。

>具体的には、矢印を用意しておき、何らかの方法(ボタンに登録するとか、特定セルのダブルクリックで実行させるとか)でマクロを実行すると、その矢印の色・太さ・端のスタイルを設定するための「オートシェイプの書式設定」ダイアログボックスが表示されるようにしたいのです。

用意した矢印名を"Line 1"として、
 ActiveSheet.Shapes("Line 1").Select
 Application.Dialogs(xlDialogPatterns).Show

【43733】Re:矢印(オートシェイプ)の書式設定ダイ...
お礼  ひげくま  - 06/10/24(火) 9:29 -

引用なし
パスワード
   ▼yuu1 さん:
>こんにちは。
>用意した矢印名を"Line 1"として、
> ActiveSheet.Shapes("Line 1").Select
> Application.Dialogs(xlDialogPatterns).Show

すばらしい!
ありがとうございます。

ActiveSheet.Shapes("Line 1").Dialogs(xlDialogPatterns).Show

こんな感じでやってみたけど出来なかったので、ここで質問してみたのですが、Selectで出来るようになるんですね。

この場合、Selectしているので当然ですが、矢印が選択状態になり、矢印の両端に小さい四角が表示されます。
これだと、シートやオブジェクトを保護した状態でも、マクロ実行後に小さい四角をドラッグすると、矢印の形を変えることが出来てしまいます。
なので、矢印を選択状態にしないで、ダイアログを表示する方法はないものでしょうか?
まぁ、マクロの最後で、いずれかのセルをSelectして、矢印の選択状態を解除すれば、解消される問題なのですが。

あと、矢印をダブルクリックしてマクロを実行させることはできるのでしょうか?
今のところ、マクロ実行用のボタンを用意する予定なのですが、もし矢印のダブルクリックでマクロを実行させることができるなら、そうしたいと思っています。

よろしくお願いします。

6695 / 13646 ツリー ←次へ | 前へ→
ページ:  ┃  記事番号:
2610219
(SS)C-BOARD v3.8 is Free