[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]
『マクロ無効・有効ボタン』(初心者なーくん)2010/01/19(火)16:30
教えて下さい。 ブックAをマクロ有効で開いて(自分の周りの人はとりあえず有効で開きます)、 その時にユーザーフォームを出して読み取り専用(閲覧用)のマクロ無効ボタンと、 書き込み専用(管理者用)のマクロ有効ボタン(パスワード付)のマクロを組みたい のですが(見られたくないシートや列がある為です)、 わからないので始めて投稿します。 過去ログを参考にしながら
ThisWorkbookに
Private Sub workbook_open() UserForm2.Show End Sub 'ーーーーーーーー Private Sub CommandButton1_Click() 'マクロ無効ボタン MacroFlg = True Unload Me End Sub 'ーーーーーーーー Private Sub CommandButton2_Click() Dim x As String x = Application.InputBox("pass") If x <> "123" Then MsgBox "x" Exit Sub End If MsgBox "o" 'マクロ有効ボタン MacroFlg = False Unload Me End Sub 'ーーーーーーーー Option Explicit Public MacroFlg As Boolean Private Sub Worksheet_BeforeRightClick(ByVal Target As Range, Cancel As Boolean)
If MacroFlg = True Then Exit Sub
If Target.Column = 1 Then With CommandBars.Add(Position:=msoBarPopup) With .Controls.Add .Caption = Format(Date, "mm/dd/yy") .OnAction = "今日の日付" End With .ShowPopup .Delete End With Cancel = True End If 'ーーーーーーーー省略ーーーー End Sub
上記のマクロで無効で開いても有効になります。
宜しくお願いします
参考にしているのは @[[20090831110639]] 『マクロ無効・有効ボタン』(マクロほんの一歩) です もうひとつの方法として、 A[[20070718163633]] 『マクロでBookを開く時に、開くBookのマクロを無効』(角) のやり方を同じbookではできないでしょうか?
環境は、WindowsXP、Excel2003です
Boolean型変数の初期値は Falseです。
True/Falseを逆にした方が良さそうな...
Option Explicit Public MacroEnabled As Boolean
Private Sub Worksheet_BeforeRightClick(ByVal Target As Range, Cancel As Boolean) If MacroEnabled Then If Target.Column = 1 Then With CommandBars.Add(Position:=msoBarPopup) With .Controls.Add .Caption = Format(Date, "mm/dd/yy") .OnAction = "今日の日付" End With .ShowPopup .Delete End With Cancel = True End If 'ーーーーーーーー省略ーーーー End If End Sub
Private Sub workbook_open() UserForm2.Show End Sub 'ーーーーーーーー Private Sub CommandButton1_Click() 'マクロ無効ボタン Unload Me End Sub 'ーーーーーーーー Private Sub CommandButton2_Click() Dim x As String x = Application.InputBox("pass") If x <> "123" Then MsgBox "x" Exit Sub Else MsgBox "o" 'マクロ有効ボタン MacroEnabled = True Unload Me End If End Sub
(seiya)
(seiya)さん、ありがとうございます。 さっそく試してみましたが、読み取り専用(閲覧用)のマクロ無効ボタンは うまくいくようになりましたが、今度は書き込み専用(管理者用)のマクロ有効 ボタンもマクロ無効になります。どうしたらいいですか?
(初心者なーくん)
MsgBox "o" は表示されますか? (seiya)
MsgBox "o" は表示されます。 (初心者なーくん)
Private Sub Worksheet_BeforeRightClick(ByVal Target As Range, Cancel As Boolean) が起動してしまう、ということですよね?
現在のコードを提示してください。 (seiya)
MsgBox "o" は表示されますがマクロ無効状態です。 通常のショートカットメニューが表示されます。 オリジナルは表示されません。 以下が現在のコードです。
Sheet1に
Option Explicit Public MacroEnabled As Boolean Private Sub Worksheet_BeforeRightClick(ByVal Target As Range, Cancel As Boolean) If MacroEnabled Then If Target.Column = 1 Then With CommandBars.Add(Position:=msoBarPopup) With .Controls.Add .Caption = Format(Date, "mm/dd/yy") .OnAction = "今日の日付" End With .ShowPopup .Delete End With Cancel = True End If 'ーーーーーーーー省略ーーーー End If End Sub '***************** ThisWorkbookに
Private Sub workbook_open()
UserForm2.Show End Sub '*************** UserFormに
Private Sub CommandButton1_Click()
'マクロ無効ボタン Unload Me End Sub Private Sub CommandButton2_Click() Dim x As String x = Application.InputBox("pass") If x <> "123" Then MsgBox "x" Exit Sub Else MsgBox "o" 'マクロ有効ボタン MacroEnabled = True Unload Me End If End Sub '*********** 標準モジュールに
Sub 今日の日付()
Selection.Value = Date Selection.NumberFormat = "mm/dd/yy" End Sub
(初心者なーくん)
変ですね...
Private Sub Worksheet_BeforeRightClick(ByVal Target As Range, Cancel As Boolean) MsgBox MacroEnabled '<-一行挿入 If MacroEnabled Then
これでTrueが返るかどうか確認してください。
もしかして、Debug modeにして夫々単体で起動していませんよね? Debug mode にすると、Global変数は初期化(False)されてしまいますよ? (seiya)
>もしかして、Debug modeにして夫々単体で起動していませんよね? >Debug mode にすると、Global変数は初期化(False)されてしまいますよ? ??? すみません。どう言うことですか?
>MsgBox MacroEnabled '<-一行挿入 をするとFalseが返ります。 (初心者なーくん)
ブックを開いてから右クリックを実行する途中でVBEを起動させたりしていませんか? (seiya)
念のため...
Public MacroEnabled As Boolean
を標準モジュールへ移動してください。 (seiya)
感激です。出来ました。 ありがとうございます。 ながながとつきあってくれて・・・。
>念のため... >Public MacroEnabled As Boolean >を標準モジュールへ移動してください。
で希望通りの動きをしました。 なぜですか?
あと、後学の為に教えて欲しいのですが、最初に投稿した時のAの 変形バージョンで同じ事できますか? (初心者なーくん)
忘れていました...
Public変数は標準モジュールで宣言します。 クラスモジュールで宣言した場合、親オブジェクトを指定する必要が... ThisWorkbook.MacroEnabled のように...
AのバージョンもPublic変数を標準モジュールへ移動すればOKだと思います。 (seiya)
>Public変数は標準モジュールで宣言します。 了解です。
>AのバージョンもPublic変数を標準モジュールへ移動すればOKだと思います。 ??? Aのバージョンは、 Application.AutomationSecurity = msoAutomationSecurityForceDisable Workbooks.Open Filename:="ブックのフルパス" でマクロ無効になるみたいですがそのまま実行すると、二重に開く形になり 警告がでます。 どのようにすればいいですか? (初心者なーくん)
すみません。 リンク先を読んでいませんでした。
Aのバージョンで何をしたいのでしょう? (seiya)
本当に、たびたび質問してすみません。
>Aのバージョンで何をしたいのでしょう?
AのバージョンはAbookをマクロ有効で開いてBbookをマクロ無効で開くと言った内容 です。これを同じAbookを開いてマクロ無効で開くと言う事ができれば、さんざん教え て頂いていた事と同じ事ができるのかなぁと思いまして・・・。 ただ、まず、二重に開く形になり警告がでるんですよね。(当たり前ですが・・・) 色々なアプローチを知りたくて・・・。 (初心者なーくん)
そちらの方は経験がないので、リンク先で質問するか、新たに別スレを立てて 質問しなおした方がよいのでは? (seiya)
わかりました。 無理言ってすみません。 色々教えて頂きありがとうございました。 (初心者なーくん)
[ 一覧(最新更新順) ]
YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki.
Modified by kazu.