Excel VBA質問箱 IV

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

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


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

【50819】有効期限を設けたい ichi 07/8/17(金) 9:33 質問[未読]
【50821】Re:有効期限を設けたい neptune 07/8/17(金) 9:51 発言[未読]
【50822】Re:有効期限を設けたい ichi 07/8/17(金) 10:03 お礼[未読]
【50825】Re:有効期限を設けたい Jaka 07/8/17(金) 10:27 発言[未読]
【50827】Re:有効期限を設けたい ichi 07/8/17(金) 10:41 発言[未読]
【50829】Re:有効期限を設けたい ponpon 07/8/17(金) 11:02 発言[未読]
【50830】Re:有効期限を設けたい ichi 07/8/17(金) 11:27 発言[未読]
【50831】やっぱりバグがあった。 Jaka 07/8/17(金) 11:34 発言[未読]
【50826】Re:有効期限を設けたい neptune 07/8/17(金) 10:35 回答[未読]
【50828】Re:有効期限を設けたい ichi 07/8/17(金) 10:56 お礼[未読]

【50819】有効期限を設けたい
質問  ichi  - 07/8/17(金) 9:33 -

引用なし
パスワード
   VBAで作成したExcelマクロがあるとします。
そのExcelファイルを有効期限(何年何月何日)に
達すると起動しなくなる(起動しても強制終了)ように
するにはどうしたらよいでしょうか?
教えてください。

【50821】Re:有効期限を設けたい
発言  neptune  - 07/8/17(金) 9:51 -

引用なし
パスワード
   ▼ichi さん:
こんにちは

>VBAで作成したExcelマクロがあるとします。
>そのExcelファイルを有効期限(何年何月何日)に
>達すると起動しなくなる(起動しても強制終了)ように
>するにはどうしたらよいでしょうか?
ファイルが開くタイミングでどこかに物理的に保存した、有効期限
と比較判断すればできます。

ですが、マクロを無効にして開かれると打つ手は無いと思います。

【50822】Re:有効期限を設けたい
お礼  ichi  - 07/8/17(金) 10:03 -

引用なし
パスワード
   ▼neptune さん:
回答ありがとうございます。

>ファイルが開くタイミングでどこかに物理的に保存した、有効期限
>と比較判断すればできます。

それは、Date関数で日付を取得して、予めプログラムに書いてある
日付を超えていないかを比較するということですか?
日付の比較は如何するのでしょう。
何でもお聞きして申し訳ありません。

>ですが、マクロを無効にして開かれると打つ手は無いと思います。

マクロには保護をかけるつもりですが、打つ手内のでしょうか?
Excelのシートは何もマクロには関係しておりません。ユーザーフォームと
標準モジュール内での記述のみです。
以上

【50825】Re:有効期限を設けたい
発言  Jaka  - 07/8/17(金) 10:27 -

引用なし
パスワード
   前に目安箱に載せようと思って書いた途中物まんまですが。

・マクロを無効で開かれたくない。

マクロを無効で開かせたくないテクニックで、ダミーシート1枚作っておいて、マクロを無効で開かれたときは、ダミーシートしか表示されてない方法があります。
でも、この方法の欠点というか、ブックを閉じる時に必ず上書き保存する方法しか紹介されてません。
私もこの方法を書いてきたわけですが、どうにも必ず上書き保存されてしまうというのが気に食わないのです。

何も手を加えてない状態に戻したい時などありませんか?
それを何とか可能にしてみました。
保存時にダミーシートが短い時間?表示されてしまうけど....。
やはり、ダミーシート(シート名「ダミー」)は必要です。
また、環境、PCスペック、ファイルサイズによって、保存時の時間差が出るとうまくいかないとも思いますが....。


標準モジュール

Dim ACBk As String

Sub Auto_Open()
Call 表示
End Sub

Private Sub 表示()
Application.ScreenUpdating = False
For Each Ws In ThisWorkbook.Sheets
  If Ws.Name <> "ダミー" Then
    Ws.Visible = True
  End If
Next
With Sheets("ダミー")
  .Visible = xlVeryHidden
  If .Range("IV1").Value <> "" Then
   On Error Resume Next
   Sheets(.Range("IV1").Value).Activate
   Err.Clear
   On Error GoTo 0
  End If
End With
Application.ScreenUpdating = True
End Sub

'------------------
Thisworkbookモジュール

Dim Flg As Boolean

Private Sub Workbook_BeforeClose(Cancel As Boolean)
Flg = True
End Sub

Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
Dim Ws As Worksheet, FM As Object 'UserForm XX
Application.ScreenUpdating = False
For Each Ws In ThisWorkbook.Sheets
  If Ws.Name = "ダミー" Then
    Ws.Range("IV1").Value = ActiveSheet.Name
    Ws.Visible = True
  Else
    Ws.Visible = xlVeryHidden
  End If
Next
If Flg = False Then
  '一応ここら辺が保存時の時間差が出るところ。
  Application.OnTime Now + TimeValue("00:0:01"), "表示"
End If
Flg = False
Application.ScreenUpdating = True
End Sub

【50826】Re:有効期限を設けたい
回答  neptune  - 07/8/17(金) 10:35 -

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

こんにちは

>それは、Date関数で日付を取得して、予めプログラムに書いてある
↑の方法が一番手軽と思います。が、プログラムに書き込まなくても
PC内のどこかに書き込んでおけば良いです。
一番最初に開いた日をどこかに書き込んでおくとか。

>日付を超えていないかを比較するということですか?
はい。

>日付の比較は如何するのでしょう。
「日付関数」をキーワードにExcelVBAのHelpを検索して下さい。
日付関係の関数がヒットします。
その中からDateDiff関数をお調べください。

>マクロには保護をかけるつもりですが、打つ手内のでしょうか?
>Excelのシートは何もマクロには関係しておりません。ユーザーフォームと
>標準モジュール内での記述のみです。
マクロ(VBAで書いたプログラム)で、判断する限り、「VBAを無効」で
Bookを開くと、マクロをどこに書いていようが、保護をかけていようが
マクロは走らない。
 →判断できない
という意味です。

【50827】Re:有効期限を設けたい
発言  ichi  - 07/8/17(金) 10:41 -

引用なし
パスワード
   ▼Jaka さん:
>マクロを無効で開かせたくないテクニックで、ダミーシート1枚作っておいて、マクロを無効で開かれたときは、ダミーシートしか表示されてない方法があります。

あの私の見解としては、Excelシートは見られても何も問題ありません。
マクロの保護さえかかっていればよいのです。(ユーザフォームや標準モジュール内を書き換え
られなければ)

マクロを無効で開かれると、何か問題あるのでしょうか?
あれば教えていただきたく思います。
以上

【50828】Re:有効期限を設けたい
お礼  ichi  - 07/8/17(金) 10:56 -

引用なし
パスワード
   ▼neptune さん:
 こんにちは御回答ありがとうございました。

>その中からDateDiff関数をお調べください。
 datediff関数でできました。大変参考になりました。


>マクロ(VBAで書いたプログラム)で、判断する限り、「VBAを無効」で
>Bookを開くと、マクロをどこに書いていようが、保護をかけていようが
>マクロは走らない。
> →判断できない
>という意味です。
マクロを無効にして、走らさない場合は別に問題ありませんので、OKです。

ありがとうございました。

【50829】Re:有効期限を設けたい
発言  ponpon  - 07/8/17(金) 11:02 -

引用なし
パスワード
   ▼ichi さん:
>マクロを無効で開かれると、何か問題あるのでしょうか?
>あれば教えていただきたく思います。

一番はじめに質問した↓のようなことができなくなります。

>そのExcelファイルを有効期限(何年何月何日)に
>達すると起動しなくなる(起動しても強制終了)ように
>するにはどうしたらよいでしょうか?

【50830】Re:有効期限を設けたい
発言  ichi  - 07/8/17(金) 11:27 -

引用なし
パスワード
   ▼ponpon さん:
こんにちわ
>
>一番はじめに質問したのようなことができなくなります。
>
マクロを無効にした場合、本来すべきマクロが走らなくなるので
今回は別に問題ありません。
ご回答ありがとうございました。
以上

【50831】やっぱりバグがあった。
発言  Jaka  - 07/8/17(金) 11:34 -

引用なし
パスワード
   今試してみたら、Thisworkbookは、こんな感じにしないとダメでした。
シートの位置関係の問題だと思うけど...。

Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
Dim Ws As Worksheet, FM As Object 'UserForm XX
Application.ScreenUpdating = False
For Each Ws In ThisWorkbook.Sheets
  If Ws.Name = "ダミー" Then
    Ws.Range("IV1").Value = ActiveSheet.Name
    Ws.Visible = True
  End If
Next
For Each Ws In ThisWorkbook.Sheets
  If Ws.Name <> "ダミー" Then
    Ws.Visible = xlVeryHidden
  End If
Next
If Flg = False Then
  '一応ここら辺が保存時の時間差が出るところ。
  Application.OnTime Now + TimeValue("00:0:01"), "表示"
End If
Flg = False
Application.ScreenUpdating = True
End Sub

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