Excel VBA質問箱 IV

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

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


6995 / 13644 ツリー ←次へ | 前へ→

【41750】メニューバーの任意の機能をオンオフする... katchin 06/8/22(火) 0:03 質問[未読]
【41759】Re:メニューバーの任意の機能をオンオフ... kobasan 06/8/22(火) 8:16 回答[未読]
【41821】Re:メニューバーの任意の機能をオンオフ... katchin 06/8/23(水) 19:04 発言[未読]
【41826】Re:メニューバーの任意の機能をオンオフ... kobasan 06/8/23(水) 19:44 回答[未読]
【41833】それでもコンパイルエラーになります katchin 06/8/23(水) 21:14 発言[未読]
【41834】Re:それでもコンパイルエラーになります かみちゃん 06/8/23(水) 21:22 発言[未読]
【41835】Re:それでもコンパイルエラーになります kobasan 06/8/23(水) 21:45 回答[未読]
【41898】ありがとうございましたやっとActiveにな... katchin 06/8/25(金) 15:32 お礼[未読]
【41767】Re:メニューバーの任意の機能をオンオフす... inoue 06/8/22(火) 13:17 発言[未読]

【41750】メニューバーの任意の機能をオンオフする...
質問  katchin  - 06/8/22(火) 0:03 -

引用なし
パスワード
   メニューバーを開くと多くの機能が通常アクティブになっていますが、以前どなたかから、例えば左から2列目編集メニューの上から10番目の「削除」をノンアクティブにしたい時、Controls(2).Controls(10) = False 
つまり、m列目のメニューバーのn番目の機能をノンアクティブにしたいとき、
Controls(m).Controls(n) = False  また、逆にノンアクティブにした機能をアクティブに戻すとき、False を True に。                  左辺のプロパティの式が定かではないので、再現を試みましたらやはり上手く行きませんでした。どこかが微妙に間違っているのだろうと思われますがまだ判りません。
どなたか正確にご教示くださいませ。
             

【41759】Re:メニューバーの任意の機能をオンオフ...
回答  kobasan  - 06/8/22(火) 8:16 -

引用なし
パスワード
   katchin さん おはようございます。
表示しないなら Visible 、グレー表示なら Enabled のプロパティを使います。

Controls(2).Controls(10) という形なのでControlsを多用したメニューバーでサンプルを作りました。これで分ってください。


'新規メニューバーの作成
Sub Menu_Add()
Dim menu, btn
  Del_MenuBar
  CommandBars.Add ("New_Bar")
  '
  '===================================================================1列目(Popupにする)
  Set menu = CommandBars("New_Bar").Controls.Add(Type:=msoControlPopup, temporary:=True)
  With menu
    .Caption = "menu_A"
    '------------------1列1行目(Button)
    .Controls.Add Type:=msoControlButton
    .Controls(1).Caption = "menu_A1"
    .Controls(1).OnAction = "macroA1"
    '------------------1列2行目(Button)
    .Controls.Add Type:=msoControlButton
    .Controls(2).Caption = "menu_A2"
    .Controls(2).OnAction = "macroA2"
  End With
  '
  '===================================================================2列目(Popupにする)
  Set menu = CommandBars("New_Bar").Controls.Add(Type:=msoControlPopup, temporary:=True)
  With menu
    .Caption = "menu_B"
    '------------------2列1行目(Button)
    .Controls.Add Type:=msoControlButton
    .Controls(1).Caption = "menu_B1"
    .Controls(1).OnAction = "macroB1"
    '------------------2列2行目(Button)
    .Controls.Add Type:=msoControlButton
    .Controls(2).Caption = "menu_B2"
    .Controls(2).OnAction = "macroB2"
  End With
  '
  '======================================================3列目(Button)
  Set btn = CommandBars("New_Bar").Controls.Add(Type:=msoControlButton)
  With btn
    '.Style = msoButtonIcon
    .Style = msoButtonIconAndCaption
    .FaceId = 480
    .Caption = "1列2行目ボタンのTrue,False切り替え"
    .OnAction = "Menu_C"
  End With
  '
  CommandBars("New_Bar").Visible = True
  Set menu = Nothing: Set btn = Nothing
End Sub

Sub Del_MenuBar()
Dim c As CommandBar
  For Each c In CommandBars
    If c.Name = "New_Bar" Then CommandBars("New_Bar").Delete
  Next
End Sub

Sub auto_close()
  Del_MenuBar
End Sub

Private Sub Menu_C()
Dim Mybtn
  '表示しないなら .Enabled を .Visible  に変更してください
  'グレー表示なら .Enabled 
  With CommandBars("New_Bar").Controls(1).Controls(2)
    If .Enabled = False Then
      .Enabled = True
    Else
      .Enabled = False
    End If
  End With
End Sub


>メニューバーを開くと多くの機能が通常アクティブになっていますが、以前どなたかから、例えば左から2列目編集メニューの上から10番目の「削除」をノンアクティブにしたい時、Controls(2).Controls(10) = False 
>つまり、m列目のメニューバーのn番目の機能をノンアクティブにしたいとき、
>Controls(m).Controls(n) = False  また、逆にノンアクティブにした機能をアクティブに戻すとき、False を True に。                  左辺のプロパティの式が定かではないので、再現を試みましたらやはり上手く行きませんでした。どこかが微妙に間違っているのだろうと思われますがまだ判りません。
>どなたか正確にご教示くださいませ。
>

【41767】Re:メニューバーの任意の機能をオンオフ...
発言  inoue E-MAILWEB  - 06/8/22(火) 13:17 -

引用なし
パスワード
   >つまり、m列目のメニューバーのn番目の機能をノンアクティブにしたいとき、
>Controls(m).Controls(n) = False  
>また、逆にノンアクティブにした機能をアクティブに戻すとき、False を True に。
まず、mとnはどうやって調べましたか?
見えているアイテムを左(上)から数えたのではダメです。
その時点で既にVisible=Falseのアイテムが実際にはあるからです。
下記URLの「メニューバー状態表示」を参考にしてみて下さい。

[メニューカスタマイザ]
http://www.asahi-net.or.jp/~ef2o-inue/download/sub09_010_030.html

#なお、次期Excel(2007)ではメニューバーはなくなりますから、
このような努力もいずれ無駄になると思います。

【41821】Re:メニューバーの任意の機能をオンオフ...
発言  katchin  - 06/8/23(水) 19:04 -

引用なし
パスワード
   ▼kobasan さん:
アドバイスありがとうございます。せっかくですが、私はVBAの方は初級レベルなので下記のような長いコードでは私の読解力の限界を超えています。
TrueではなくVisibleでしたか?しかし、
Controls(2).Controls(10)=Visible
として実行すると、「変数が定義されていません。」とのエラーが表示されてしまいました。どうしたら宜しいでしょうか?

>katchin さん おはようございます。
>表示しないなら Visible 、グレー表示なら Enabled のプロパティを使います。
>
>Controls(2).Controls(10) という形なのでControlsを多用したメニューバーでサンプルを作りました。これで分ってください。
>
>
>'新規メニューバーの作成
>Sub Menu_Add()
>Dim menu, btn
>  Del_MenuBar
>  CommandBars.Add ("New_Bar")
>  '
>  '===================================================================1列目(Popupにする)
>  Set menu = CommandBars("New_Bar").Controls.Add(Type:=msoControlPopup, temporary:=True)
>  With menu
>    .Caption = "menu_A"
>    '------------------1列1行目(Button)
>    .Controls.Add Type:=msoControlButton
>    .Controls(1).Caption = "menu_A1"
>    .Controls(1).OnAction = "macroA1"
>    '------------------1列2行目(Button)
>    .Controls.Add Type:=msoControlButton
>    .Controls(2).Caption = "menu_A2"
>    .Controls(2).OnAction = "macroA2"
>  End With
>  '
>  '===================================================================2列目(Popupにする)
>  Set menu = CommandBars("New_Bar").Controls.Add(Type:=msoControlPopup, temporary:=True)
>  With menu
>    .Caption = "menu_B"
>    '------------------2列1行目(Button)
>    .Controls.Add Type:=msoControlButton
>    .Controls(1).Caption = "menu_B1"
>    .Controls(1).OnAction = "macroB1"
>    '------------------2列2行目(Button)
>    .Controls.Add Type:=msoControlButton
>    .Controls(2).Caption = "menu_B2"
>    .Controls(2).OnAction = "macroB2"
>  End With
>  '
>  '======================================================3列目(Button)
>  Set btn = CommandBars("New_Bar").Controls.Add(Type:=msoControlButton)
>  With btn
>    '.Style = msoButtonIcon
>    .Style = msoButtonIconAndCaption
>    .FaceId = 480
>    .Caption = "1列2行目ボタンのTrue,False切り替え"
>    .OnAction = "Menu_C"
>  End With
>  '
>  CommandBars("New_Bar").Visible = True
>  Set menu = Nothing: Set btn = Nothing
>End Sub
>
>Sub Del_MenuBar()
>Dim c As CommandBar
>  For Each c In CommandBars
>    If c.Name = "New_Bar" Then CommandBars("New_Bar").Delete
>  Next
>End Sub
>
>Sub auto_close()
>  Del_MenuBar
>End Sub
>
>Private Sub Menu_C()
>Dim Mybtn
>  '表示しないなら .Enabled を .Visible  に変更してください
>  'グレー表示なら .Enabled 
>  With CommandBars("New_Bar").Controls(1).Controls(2)
>    If .Enabled = False Then
>      .Enabled = True
>    Else
>      .Enabled = False
>    End If
>  End With
>End Sub
>
>
>>メニューバーを開くと多くの機能が通常アクティブになっていますが、以前どなたかから、例えば左から2列目編集メニューの上から10番目の「削除」をノンアクティブにしたい時、Controls(2).Controls(10) = False 
>>つまり、m列目のメニューバーのn番目の機能をノンアクティブにしたいとき、
>>Controls(m).Controls(n) = False  また、逆にノンアクティブにした機能をアクティブに戻すとき、False を True に。                  左辺のプロパティの式が定かではないので、再現を試みましたらやはり上手く行きませんでした。どこかが微妙に間違っているのだろうと思われますがまだ判りません。
>>どなたか正確にご教示くださいませ。
>>

【41826】Re:メニューバーの任意の機能をオンオフ...
回答  kobasan  - 06/8/23(水) 19:44 -

引用なし
パスワード
   katchin さん 今晩は。

>TrueではなくVisibleでしたか?
>Controls(2).Controls(10)=Visible

ではなくて、

>>'表示しないなら 
Controls(2).Controls(10).Visible=False

>>'グレー表示なら .Enabled 
Controls(2).Controls(10).Enabled =False

にするということです。

【41833】それでもコンパイルエラーになります
発言  katchin  - 06/8/23(水) 21:14 -

引用なし
パスワード
   ▼kobasan さん お世話になります。
アクティブ(使えるよう)にしたい場合、
-----------------------------------------
Public Sub menubar()
Controls(2).Controls(10).Enabled = True
End Sub
としましたら、コンパイルエラーが発生し、[SubまたはFunctionが定義されていません]とのメッセージが出ます。このコードの前に何か書いておくべき事はありますか? 
よろしくお願いします。
>katchin さん 今晩は。
>
>>TrueではなくVisibleでしたか?
>>Controls(2).Controls(10)=Visible
>
>ではなくて、
>
>>>'表示しないなら 
>Controls(2).Controls(10).Visible=False
>
>>>'グレー表示なら .Enabled 
>Controls(2).Controls(10).Enabled =False
>
>にするということです。

【41834】Re:それでもコンパイルエラーになります
発言  かみちゃん  - 06/8/23(水) 21:22 -

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

横から失礼します。

>アクティブ(使えるよう)にしたい場合、
>-----------------------------------------
>Public Sub menubar()
>Controls(2).Controls(10).Enabled = True
>End Sub
>としましたら、コンパイルエラーが発生し、[SubまたはFunctionが定義されていません]とのメッセージが出ます。このコードの前に何か書いておくべき事はありますか? 

Controls(2).〜
の前に「.」(ピリオド)が抜けているのでは?
現在の全体のコードがどうなっているのかわかりませんが・・・

【41835】Re:それでもコンパイルエラーになります
回答  kobasan  - 06/8/23(水) 21:45 -

引用なし
パスワード
   今晩は。

>アクティブ(使えるよう)にしたい場合、
>-----------------------------------------
>Public Sub menubar()
>Controls(2).Controls(10).Enabled = True
>End Sub
>としましたら、コンパイルエラーが発生し、[SubまたはFunctionが定義されていません]とのメッセージが出ます。このコードの前に何か書いておくべき事はありますか? 

このコードの前に何か書いておくべき事は、

【41759】のサンプルなら、CommandBarsに"New_Bar"という名前を付けていますので、
また、定義した1列目の2行目のボタンをアクティブにしたり、グレー表示にしたりす
るので、Controls(1).Controls(2)を使います。
       ~~~~~~~~~~   ~~~~~~~~
       1列目     2行目

CommandBars("New_Bar").Controls(1).Controls(2).Enabled =False

とします。
katchin さんがCommandBarsにつけている名前に合わせて、やってみてください。

もし、katchin さんが CommandBars でなく Worksheet Menu Bar を使っているなら、

CommandBars("Worksheet Menu Bar").Controls(1).Controls(2).Enabled =False

のようにします。
ただし、このときのControls(1).Controls(2)の数字は、適切なものにする必要があります。

【41898】ありがとうございましたやっとActiveにな...
お礼  katchin  - 06/8/25(金) 15:32 -

引用なし
パスワード
   ▼kobasan さん:
今晩は。
CommandBars("Worksheet Menu Bar").Controls(2).Controls(10).Enabled = True
で実行したら”削除”機能が上手くActiveに変更できました。
ありがとうございました。

>>アクティブ(使えるよう)にしたい場合、
>>-----------------------------------------
>>Public Sub menubar()
>>Controls(2).Controls(10).Enabled = True
>>End Sub
>>としましたら、コンパイルエラーが発生し、[SubまたはFunctionが定義されていません]とのメッセージが出ます。このコードの前に何か書いておくべき事はありますか? 
>
>このコードの前に何か書いておくべき事は、
>
>【41759】のサンプルなら、CommandBarsに"New_Bar"という名前を付けていますので、
>また、定義した1列目の2行目のボタンをアクティブにしたり、グレー表示にしたりす
>るので、Controls(1).Controls(2)を使います。
>       ~~~~~~~~~~   ~~~~~~~~
>       1列目     2行目
>
>もし、katchin さんが CommandBars でなく Worksheet Menu Bar を使っているな>ら、CommandBars("Worksheet Menu Bar").Controls(1).Controls(2).Enabled =False
>のようにします。
>ただし、このときのControls(1).Controls(2)の数字は、適切なものにする必要があります。

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