Excel VBA質問箱 IV

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

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


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

【28600】メニューバーの制限 BOCOTT 05/9/9(金) 20:04 質問[未読]
【28601】Re:メニューバーの制限 かみちゃん 05/9/9(金) 20:15 回答[未読]
【28604】Re:メニューバーの制限 BOCOTT 05/9/9(金) 20:28 お礼[未読]
【28602】Re:メニューバーの制限 MOON 05/9/9(金) 20:19 回答[未読]
【28603】Re:メニューバーの制限 BOCOTT 05/9/9(金) 20:27 質問[未読]
【28605】Re:メニューバーの制限 りん 05/9/9(金) 20:49 発言[未読]
【28606】Re:メニューバーの制限 BOCOTT 05/9/9(金) 21:13 質問[未読]
【28607】Re:メニューバーの制限 かみちゃん 05/9/9(金) 21:27 回答[未読]
【28608】Re:メニューバーの制限 かみちゃん 05/9/9(金) 21:42 回答[未読]
【28625】Re:メニューバーの制限 BOCOTT 05/9/10(土) 14:53 お礼[未読]
【28610】Re:メニューバーの制限 りん 05/9/10(土) 9:51 回答[未読]
【28626】Re:メニューバーの制限 BOCOTT 05/9/10(土) 15:07 質問[未読]
【28629】Re:メニューバーの制限 りん 05/9/10(土) 16:19 回答[未読]
【28663】Re:メニューバーの制限 BOCOTT 05/9/12(月) 10:31 お礼[未読]

【28600】メニューバーの制限
質問  BOCOTT  - 05/9/9(金) 20:04 -

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

メニューバーのメニューを選択できないようにしたいのです。
例えば、「ファイル」→「上書き保存」のメニューを選択できないよう
制限をしたいのです。イネーブル表示できたらうれしいのですが。
何か可能な方法はないでしょうか?
教えて頂けたら助かります(T_T)。

【28601】Re:メニューバーの制限
回答  かみちゃん  - 05/9/9(金) 20:15 -

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

>メニューバーのメニューを選択できないようにしたいのです。
>例えば、「ファイル」→「上書き保存」のメニューを選択できないよう
>制限をしたいのです。イネーブル表示できたらうれしいのですが。

メニューバーをすべて非表示にするには、次のコードでできると思います。
Sub Macro1()
 CommandBars("Worksheet Menu Bar").Enabled = False
End Sub

【28602】Re:メニューバーの制限
回答  MOON  - 05/9/9(金) 20:19 -

引用なし
パスワード
   ▼BOCOTT さん:
こんばんは。
メニューバーの中の、ファイル→上書き保存だけ使用不可なら
Application.CommandBars("WorkSheet Menu Bar") _
.Controls("ファイル(&F)").Controls("上書き保存(&S)").Enabled = False
でしょうか。

でも、これだけを制限しても標準ツールバーの上書き保存のアイコンやCtrl + S でも
上書き保存が出来てしまいますけど、それはかまわないのかな?

【28603】Re:メニューバーの制限
質問  BOCOTT  - 05/9/9(金) 20:27 -

引用なし
パスワード
   ▼MOON さん
お返事有り難うございます。
試してみたら出来ました!有り難うございます。
アイコンや「Ctrl+ S」まで制限は可能なのでしょうか(>_<)?

【28604】Re:メニューバーの制限
お礼  BOCOTT  - 05/9/9(金) 20:28 -

引用なし
パスワード
   ▼かみちゃん さん:
こんばんは!
お返事有り難うございます。
メニューバー全体を隠してしまう方法ですね。
勉強になりました!
有り難うございますm(__)m。

【28605】Re:メニューバーの制限
発言  りん E-MAIL  - 05/9/9(金) 20:49 -

引用なし
パスワード
   BOCOTT さん、こんばんわ。

>アイコンや「Ctrl+ S」まで制限は可能なのでしょうか(>_<)?
コピーを制限するコードですが(V3の過去ログ)
http://www21.tok2.com/home/vbalab/bbs/c-board.cgi?cmd=one;no=11558;id=Excel

【28606】Re:メニューバーの制限
質問  BOCOTT  - 05/9/9(金) 21:13 -

引用なし
パスワード
   ▼りん さん:
こんばんは!
お返事有り難うございます。
今、参考にさせていただきながら書いているのですが
'ID:=19はコピーのコマンド
とのことですが、
ファイルの上書きのIDは何になるのでしょうか?
こんな初歩的なことを質問してすみませんm(__;)m。
教えていただけるでしょうか?
御願い致します。

【28607】Re:メニューバーの制限
回答  かみちゃん  - 05/9/9(金) 21:27 -

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

>ファイルの上書きのIDは何になるのでしょうか?

次のようなコードでわかるかと思います。
MsgBox CommandBars("WorkSheet Menu Bar") _
 .Controls("ファイル(&F)").Controls("上書き保存(&S)").ID

次のURLを参照も参考になりますでしょうか。
http://www.moug.net/tech/exvba/0080012.htm

【28608】Re:メニューバーの制限
回答  かみちゃん  - 05/9/9(金) 21:42 -

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

>ファイルの上書きのIDは何になるのでしょうか?

ちなみに、以下のコードでいろいろなIDがわかります。

Sub Macro1()
 Dim i As Long
 Dim Cnt1 As Object, Cnt2 As Object
 
 Cells.ClearContents
 i = 2
 For Each Cnt1 In CommandBars("WorkSheet Menu Bar").Controls
  For Each Cnt2 In Cnt1.Controls
   Range("A1:C1").Value = Array("ラベル1", "ラベル2", "ID")
   Cells(i, 1) = Cnt1.Caption
   Cells(i, 2) = Cnt2.Caption
   Cells(i, 3) = CStr(Cnt2.ID)
   i = i + 1
  Next
 Next
End Sub

【28610】Re:メニューバーの制限
回答  りん E-MAIL  - 05/9/10(土) 9:51 -

引用なし
パスワード
   BOCOTT さん、おはようございます。

>メニューバーのメニューを選択できないようにしたいのです。
>例えば、「ファイル」→「上書き保存」のメニューを選択できないよう
>制限をしたいのです。イネーブル表示できたらうれしいのですが。
>何か可能な方法はないでしょうか?
>教えて頂けたら助かります(T_T)。
『たとえば』なので違うかもしれませんが、特定のブックを保存できなくするだけなら、メニューバーをいじくるよりも、WorkbookのBeforeSaveイベントを利用したほうが簡単です。
一番左のシートのRange("A1")の値が1の時だけ保存できます。

Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
  If Not ThisWorkbook.Worksheets(1).Range("A1").Value = 1 Then
   MsgBox "", vbExclamation, "保存不許可"
   Cancel = True
  End If
End Sub
こんな感じです。

【28625】Re:メニューバーの制限
お礼  BOCOTT  - 05/9/10(土) 14:53 -

引用なし
パスワード
   ▼かみちゃん さん

こんにちは!
お返事有り難うございます。
IDの調べ方、わかりました。
すごく丁寧に教えていただき助かりました!
他のIDも同じ方法で調べようと思います。
有り難うございます!!

【28626】Re:メニューバーの制限
質問  BOCOTT  - 05/9/10(土) 15:07 -

引用なし
パスワード
   ▼りん さん

こんにちは!
お返事有り難うございます。
便利なイベント関数があったのですね。

いろいろ仕様を考えた結果
「名前を付けて保存」をイネーブル表示にして
「上書き保存」を選択された場合に、今表示しているエクセルの情報を
CSV形式のファイルにはきだそうと考えています。

教えて頂いたWorkbookのBeforeSaveイベントは、
「上書き保存」以外(名前を付けて保存はイネーブル表示なので)
には、走らないと考えて宜しいのでしょうか?
他に保存されるパターンを考えたのですが、思いつかなくて(>_<)。

宜しくお願いいたしますm(__)m。

【28629】Re:メニューバーの制限
回答  りん E-MAIL  - 05/9/10(土) 16:19 -

引用なし
パスワード
   BOCOTT さん、こんにちわ。・

>便利なイベント関数があったのですね。
>いろいろ仕様を考えた結果
>「名前を付けて保存」をイネーブル表示にして
>「上書き保存」を選択された場合に、今表示しているエクセルの情報を
>CSV形式のファイルにはきだそうと考えています。

>教えて頂いたWorkbookのBeforeSaveイベントは、
>「上書き保存」以外(名前を付けて保存はイネーブル表示なので)
>には、走らないと考えて宜しいのでしょうか?

ブックの保存自体ができないので、『名前を付けて保存』もできません。
前回のCancel=Trueは保存自体をキャンセルしますが、SaveAsUIをTrueにすると、名前を付けて保存ダイアログが表示されます。
Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
  If Not ThisWorkbook.Worksheets(1).Range("A1").Value = 1 Then
   MsgBox "", vbExclamation, "上書保存不許可"
   SaveAsUI = True 'Trueにすると名前を付けて保存ダイアログが表示
  End If
End Sub

なので、保存関係のコマンドが実行された場合にcsvに吐き出すなら、このプロシージャ−内で処理するようにしたほうがいいですね。
ただし、前回のThisWorkbook.Worksheets(1).Range("A1").Value=1などのように、何かしらの条件をクリアしたときは上書きができるようにしておかないと、せっかく作ったマクロが保存されなかったり、入力したデータが消えてしまったりという心配もあります。

例:
Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
  '左端シートのAA1の値が1の時は通常の保存、それ以外はcsvを作成
  If Not ThisWorkbook.Worksheets(1).Range("AA1").Value = 1 Then
   ActiveSheet.Copy '現在表示しているシートを複製してcsvに
   Ofile = Format(Now(), "yymmddhhmmss") & ".csv" '現在のフォルダにcsv保存
   '保存
   Application.DisplayAlerts = False
   With ActiveWorkbook
     .SaveAs Filename:=Ofile, FileFormat:=xlCSV
     .Close
   End With
   Application.DisplayAlerts = True
   '終わり
   MsgBox CurDir & "\" & Ofile, vbInformation, "csvを作成しました"
   Cancel = True '当ブックの保存はキャンセル
  End If
End Sub

こんな感じです。

【28663】Re:メニューバーの制限
お礼  BOCOTT  - 05/9/12(月) 10:31 -

引用なし
パスワード
   りん さん:

お返事有り難うございます!!
例まで書いていただいて、すごく分りやすくて助かりました!
教えて頂いたおかげで、期限までに出来上がりそうです!!
有り難うございますm(__)m!!

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