[[20100119152414]] 『マクロ無効・有効ボタン』(初心者なーくん) ページの最後に飛ぶ

[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]

 

『マクロ無効・有効ボタン』(初心者なーくん)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.