[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]
『マクロ無効・有効ボタン』(初心者なーくん)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.