Excel VBA質問箱 IV

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

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


1794 / 13645 ツリー ←次へ | 前へ→

【71868】使用期限のあるブックをマクロ無効では、開かないようにするには? RM 12/4/20(金) 18:08 質問[未読]
【71869】Re:使用期限のあるブックをマクロ無効では... UO3 12/4/20(金) 21:11 発言[未読]
【71870】Re:使用期限のあるブックをマクロ無効では... RM 12/4/21(土) 8:55 質問[未読]
【71871】Re:使用期限のあるブックをマクロ無効では... UO3 12/4/21(土) 9:19 発言[未読]
【71872】Re:使用期限のあるブックをマクロ無効では... RM 12/4/21(土) 9:33 質問[未読]
【71873】Re:使用期限のあるブックをマクロ無効では... ちん 12/4/21(土) 10:53 発言[未読]
【71874】Re:使用期限のあるブックをマクロ無効では... RM 12/4/21(土) 12:35 質問[未読]
【71875】Re:使用期限のあるブックをマクロ無効では... UO3 12/4/21(土) 14:33 発言[未読]
【71877】Re:使用期限のあるブックをマクロ無効では... RM 12/4/21(土) 14:47 質問[未読]
【71878】Re:使用期限のあるブックをマクロ無効では... UO3 12/4/21(土) 14:59 発言[未読]
【71876】Re:使用期限のあるブックをマクロ無効では... Yuki 12/4/21(土) 14:43 発言[未読]
【71879】Re:使用期限のあるブックをマクロ無効では... RM 12/4/21(土) 15:16 質問[未読]
【71880】Re:使用期限のあるブックをマクロ無効では... Yuki 12/4/21(土) 15:47 発言[未読]
【71881】Re:使用期限のあるブックをマクロ無効では... ちん 12/4/21(土) 17:28 発言[未読]

【71868】使用期限のあるブックをマクロ無効では、...
質問  RM  - 12/4/20(金) 18:08 -

引用なし
パスワード
   使用期限があるブックを作成しました。
しかし、マクロを実行しないようにしてブックを開けば機能してくれません。
マクロが有効でなければ開かないようにするには以下のコードにどのように
記述すれば良いのかを教えて下さい。


Sub auto_open()
  使用期限 = DateValue("2010/07/08")
  規定パスワード = "123"
  メッセージ = "パスワードは?"
  タイトル = "使用期限を過ぎています。"
  If Date > 使用期限 Then           'システム日付が使用期限後なら
    入力パスワード = InputBox(メッセージ, タイトル) 'パスワードを入力してもらう
    If 入力パスワード = 規定パスワード Then 'パスワードが正しければ
      Exit Sub              '開いたままにしておく
    End If
    Application.DisplayAlerts = False    '確認メッセージを表示しない
    ActiveWorkbook.Close          '閉じる
  End If
End Sub

【71869】Re:使用期限のあるブックをマクロ無効で...
発言  UO3  - 12/4/20(金) 21:11 -

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

たとえばですけど、ブックそのものを非表示にして、かつブックを保護しておきます。
マクロ無効で開くと、開けますが、なにも見えませんし、できません
で、Auto_OpenなりWOrkbook_Openでブックを表示し、またBeforSaveで、非表示に戻します。

【71870】Re:使用期限のあるブックをマクロ無効で...
質問  RM  - 12/4/21(土) 8:55 -

引用なし
パスワード
   UO3様

回答ありがとうございます。

下記アドレスでコードを見つけたのですが、

homepage2.nifty.com/kmado/ke_m9.htm#E02M090

最初の質問のコードと共に記述することができません。
エラーになってしまいます。
2つのコードを合わせることは、無理でしょうか?

【71871】Re:使用期限のあるブックをマクロ無効で...
発言  UO3  - 12/4/21(土) 9:19 -

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

こんにちは
参考にされたk窓のコードを組み入れた形の、RMさんが書かれたコードをすべて
アップいただけますか?

【71872】Re:使用期限のあるブックをマクロ無効で...
質問  RM  - 12/4/21(土) 9:33 -

引用なし
パスワード
   UO3様

k窓様のコードをそのまま貼り付けただけです。
それで保存すると.xlamファイルになってしまいます。


Option Explicit
Const dPWD = vbBack & "Invalid"

Private Sub Workbook_BeforeClose(Cancel As Boolean)
 If Saved = False Then
  Select Case MsgBox("'" & Name & "'への変更を保存しますか?", vbYesNoCancel Or vbExclamation)
  Case vbNo
   Saved = True
  Case vbYes
   Workbook_BeforeSave False, False
  Case vbCancel
   Cancel = True
  End Select
 End If
End Sub

Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
 Dim st As Object
 Set st = ActiveSheet
 Cancel = True
 With Application
  .EnableEvents = False
  If SaveAsUI Then
   If Not Application.Dialogs(xlDialogSaveAs).Show Then Exit Sub
  End If
  .ScreenUpdating = False
  IsAddin = True: Protect dPWD, , True
  Save
  Unprotect dPWD: IsAddin = False: Saved = True
  st.Select
  .ScreenUpdating = True: .EnableEvents = True
 End With
End Sub

Private Sub Workbook_Open()
 Unprotect dPWD: IsAddin = False: Saved = True
End With
End Sub

Sub auto_open()
  使用期限 = DateValue("2010/07/08")
  規定パスワード = "123"
  メッセージ = "パスワードは?"
  タイトル = "使用期限を過ぎています。"
  If Date > 使用期限 Then           'システム日付が使用期限後なら
    入力パスワード = InputBox(メッセージ, タイトル) 'パスワードを入力してもらう
    If 入力パスワード = 規定パスワード Then 'パスワードが正しければ
      Exit Sub              '開いたままにしておく
    End If
    Application.DisplayAlerts = False    '確認メッセージを表示しない
    ActiveWorkbook.Close          '閉じる
  End If
End Sub

【71873】Re:使用期限のあるブックをマクロ無効で...
発言  ちん  - 12/4/21(土) 10:53 -

引用なし
パスワード
   ▼RM さん、U03さん こんにちは、ちんといいます。
マクロを有効にしないと、開けませんよ。というようにしたらどうでしょう。

参考のサイトとして、試していませんが、
ht tp://www.geocities.jp/ttak_ask/office_docu/ef8_21.html

以上、参考までに・・・

【71874】Re:使用期限のあるブックをマクロ無効で...
質問  RM  - 12/4/21(土) 12:35 -

引用なし
パスワード
   ちん様

回答ありがとうございます。
ブック保護とシートの非表示をたくさんのエクセルファイルに
設定するのが大変です。
コードだけでできないでしょうか?

【71875】Re:使用期限のあるブックをマクロ無効で...
発言  UO3  - 12/4/21(土) 14:33 -

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

>ブック保護とシートの非表示をたくさんのエクセルファイルに
>設定するのが大変です。
>コードだけでできないでしょうか?


k窓を参考にされた結果のコードはまだ拝見していませんが、いずれにしても
まず、ブックを非表示にして保護をかけておくことが必要です。
こうしなければ、マクロ無効で開かれてしまえばどうしようも無くなります。

ブック数が多い場合、その設定を「VBA」で行うということはできますよ。

【71876】Re:使用期限のあるブックをマクロ無効で...
発言  Yuki  - 12/4/21(土) 14:43 -

引用なし
パスワード
   ▼RM さん:
こんにちは。
シートを一枚追加して中央部分にでも「マクロ有効に」とでも書いて
下記のコードを追加してみて下さい。
xlSheetVeryHiddenの意味はHelpで

Sub Auto_Close()
  Dim sh As Worksheet
  For Each sh In Worksheets
    If sh.Name = "追加したシート名" Then
      sh.Visible = xlSheetVisible
    Else
      sh.Visible = xlSheetVeryHidden
    End If
  Next
End Sub

Sub Auto_Open()
  Dim sh As Worksheet
  ' ここでパスワード等のチェック
  ' 駄目なときは Exit Sub
  
  For Each sh In Worksheets
    If sh.Name = "追加したシート名" Then
      sh.Visible = xlSheetVeryHidden
    Else
      sh.Visible = xlSheetVisible
    End If
  Next
End Sub

【71877】Re:使用期限のあるブックをマクロ無効で...
質問  RM  - 12/4/21(土) 14:47 -

引用なし
パスワード
   UO3様

回答ありがとうございます。

当方がしたいことをまとめますと

1.使用期限(例:2013/3/31)があるブック。
2.マクロ無効では、開けないようしたい。
3.多数のファイルに設定したい。

以上です。

k窓様のコードでなくても良いです。
上記の条件を満たすコードを教えて下さいませ。
宜しくお願い致します。

【71878】Re:使用期限のあるブックをマクロ無効で...
発言  UO3  - 12/4/21(土) 14:59 -

引用なし
パスワード
   ▼RM さん:
>
>1.使用期限(例:2013/3/31)があるブック。
>2.マクロ無効では、開けないようしたい。
>3.多数のファイルに設定したい。
>

あくまで、現在のマクロブックに、これら必要なコードを書くのはRMさんが手作業でおやりになる。
当方は、その仕組みを提案するというスタンスなんですが??

RMさんがアップされたコードも含めて、今回手当が必要になるコードそのものを
数多くのブックに「自動的に書き込む」ということを意味しておられるなら
技術的にはできますけど、マクロウィルスそのもので、このような場でコードをアップするのは
少なくとも、私のポリシーには反しますので、撤退します。

【71879】Re:使用期限のあるブックをマクロ無効で...
質問  RM  - 12/4/21(土) 15:16 -

引用なし
パスワード
   Yuki様

回答ありがとうございます。

コードは、ThisWorkbookに記述すれば良いのでしょうか?

【71880】Re:使用期限のあるブックをマクロ無効で...
発言  Yuki  - 12/4/21(土) 15:47 -

引用なし
パスワード
   ▼RM さん:
>コードは、ThisWorkbookに記述すれば良いのでしょうか?

標準モジュールです。

ThisWorkbookに記述するには
Private Sub Workbook_BeforeClose(Cancel As Boolean)
  Auto_Openの内容
End Sub

Private Sub Workbook_Open()
  Auto_Closeの内容
End Sub
のようにします。
標準モジュールには書かないで下さい。

【71881】Re:使用期限のあるブックをマクロ無効で...
発言  ちん  - 12/4/21(土) 17:28 -

引用なし
パスワード
   ▼RM さん、こんんいちわ、ちんといいます。
あくまでも提案なのですが、
保存が実行される前に、全てのシートを非表示にする。
※ただし、Excelの「書式」−>「シート」−>「再表示」を使用されると、
見えてしまいますので、保存が終了したら、AutoCloseを実行し、BOOKを閉じる必要もあります。

Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
  '** ここで、保存が実行される前に、全てのシートを非表示にする。
  '** Sheet1を非表示にします。ただし、通常の非表示です。
  Sheets("Sheet1").Visible = xlSheetHidden

  '*** 複数のシートを非表示にする命令は、
  '  この中のサイトに記載していますので、探してください。

End Sub

起動時は、AutoOPEN処理で、パスワードの入力で、全てのシートを表示に変える。
  '** Sheet1を表示にします。ただし、通常の表示です。
  Sheets("Sheet1").Visible = xlSheetVisible

とりあえず、マクロ無効の処理を考えるのであれば、保存の時に全て非表示にして
保存する。

Excelファイルを起動した時に、パスワードがOKなら、シートを表示する。
※管理者パスワードなら、日付けに関係なく、全てのシートを表示するも必要と
思われます。

余談ですが、期限付きの処理が入っているExcelの名前は、
???ファイル(期限付き) とかにしておくと、探しやすいですよ。

参考になるかどうかわかりませんが、
以上、参考までに・・・

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