
以下のようなVBAを作成したいのですが、糸口が見つかりません。
ヒント等や解説webの紹介でもかまいませんのでお願いいたします。
共通で使用するエクセルファイルがあります。
(1)ファイルの上書き保存を禁止したい
・今あるフォルダ内での上書き保存のみ禁止としたいです
・別フォルダに一度でも保存していた場合の上書き保存はOKです
つまり共通ファイルを上書きするのはダメですが、自PC等に名前をつけて保存等をしていた場合の上書き保存はOKとしたいです
(2)ファイルを開いている時間を5分と制限したい(5分経過したら強制終了)
・今あるフォルダ内での時間制限としたいです
・別フォルダに一度でも保存していた場合は時間制限なしとしたいです
つまり共通ファイルを開きっぱなしなのはダメですが、自PC等に名前をつけて保存等をしていた場合は制限なしとしたいです
個々のVBAは多少webなどでわかるのですが、こうだったらこうという記述がよくわからずにおります。
お手数をおかけ致しますが、よろしくお願い申し上げます。
No.4ベストアンサー
- 回答日時:
No3です。
No2様の例をそのまま利用するなら、こんな感じ
Private Sub Workbook_Open()
Const filePath = "\\......" '//共用ファイルのパス
If ThisWorkbook.Path <> filePath Then Exit Sub '//パスが違う場合は終了
Application.OnTime Now + TimeValue("00:01:00"), "Macro1"
End Sub
おはようございます。再度のご教授ありがとうございます。
ようやっと意味がわかりました。ありがとうございます。
また作業も行ってみましたが、やりたいことが再現できました。
本当にありがとうございます。勉強になりました。
No.3
- 回答日時:
同じような回答ですが…
(1)基本的にはNo1様のおっしゃるように権限設定で行うのが良いと思われます。(一般ユーザグループと権限のあるユーザグループに分ける)
BVAで行っても、ご質問のような機能の場合だと、一度ローカルに保存したデータを不心得ものがメインに上書きすることが可能になってしまいますから。
(2)制限をかけるときと外すときの違いは、ThisWorkbookのPathで判断するのがよさそう。保護するファイルは決まったPathにあるでしょうから、それ以外の場合は、マクロを実行しないか、またはマクロを消去してしまう。
マクロの消去についてはこのあたりをご参考に…
http://officetanaka.net/excel/vba/vbe/07.htm#sam …
ご回答ありがとうございます
1)の権限については私自身がまだあまり知識を持ち合わせておりませんので調べてみます。
ただ今回はfujillinさまがおっしゃるような不心得モノについては考慮しておりません。
回避したいのが「うっかり上書きしてしまった」に関してだけであることと、
保存してある場所が通常のユーザーならまずたどり着けないような場所にあるからです。
オリジナルも保存してありますし、この点はあまり気にしていません。
2)に関しては、おそらくそうであろうと考えておりました。
例として、回答者hallo-2007さまの
Private Sub Workbook_Open()
Application.OnTime Now + TimeValue("00:01:00"), "Macro1"
End Sub
に、どのように組み入れるのかがよくわからなかったのです。
少ない知識での予想なのですが・・・
Private Sub Workbook_Open()
On Error GoTo Err_chek
パスを取得してーうんたらかんたら←ここがわからない
Application.OnTime Now + TimeValue("00:01:00"), "Macro1"
Exit Sub
Err_chek:
このシートをアクティブにする←ファイル名が変更されていた場合を考慮する方法がよくわからない
End Sub
多分こうなんだろうなぁとは考えているのですが、根本から間違っていたらすみません。
お手数をおかけ致しますが、もう一度ご教授願いたいです。
No.2
- 回答日時:
(1)ですが、フォルダ内の全てのファイルに読み取り専用というのであれば
そのフォルダのプロパティで 読み取り専用に チェックで出来ます。
特定のエクセルファイルというのであれば、ファイルを保存するときに
パスワードを設定して、管理者のみが書き込みのパスワードを知っている といった使用方法が良いと思います。
(2)ですがVBAでThisWorkBookのモジュールに
Private Sub Workbook_Open()
Application.OnTime Now + TimeValue("00:01:00"), "Macro1"
End Sub
標準モジュールに
Sub Macro1()
MsgBox "閉じます"
ThisWorkbook.Close
End Sub
をコピィして試してみてください(最初は、適当なサンプルで試してください)
上記コードではファイルを開いた時間の1分後にMacro1のコードを実行
Macro1ではファイルを閉じます。
あくまでもファイルを開くときにマクロを無効で開かれると意味ありませんが。
ご回答ありがとうございます。
ご指示頂いた件ですと「別フォルダに一度でも保存した場合」でも、
同様の制限(上書きできない・時間制限あり)かと思われます。
知りたいのは「こうだったらこう」という記述の部分になります。
ご回答ありがとうございました。
No.1
- 回答日時:
こんにちは。
通常、ファイルの更新権限を設定する場合は
VBAを使用するのではなく
通常はそのフォルダやファイルのプロパティにて
セキュリティ設定で対応するものだと思います。
(更新権限をOFFにし、参照権限のみとする)
また、更新不可に設定したのであれば
開く時間の制限をかける必要もないかと思います。
あるユーザが何分ファイルを開いていようが、別のユーザも同時に
ファイルを読み取りで開くことができるのですから
更新権限のみ制御すればいいのではないでしょうか。
どうしても5分の制限をかけたいのであれば
ブックオープン時(Private Sub Workbook_Open)に
マクロ実行し、
5分間実行待ち(Sleep (300000))した後で
ブックを閉じる処理(Workbooks("Book1.xlsm").Close)を実行すれば
よいとか思いますが、負荷もかかりますし、
私はあまりお勧めしません。
以上、ご参考まで。
ご回答ありがとうございます。
通常であればそうすればよいのかと思いますが、残念ながら、
・参照のみではない
・ファイルは1ユーザーのみの制限がかけてある
という条件下となっております。
ご回答ありがとうございました。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
フォルダ内のexcelファイルを順...
-
EXCEL VBA 指定したファイルが...
-
【マクロ】名前を保存する際に...
-
EXCELマクロを無効にして開く方法
-
データ参照先が別ファイルの場...
-
【マクロ】EXCELで読込したCSV...
-
【マクロ】変数に入れるコード...
-
ファイルを開かずにマクロを実行
-
エクセルマクロ 異なるファイ...
-
エクセルのシートの数を数えた...
-
ファイルの保存場所を変えたら...
-
秀丸:あらかじめ設定した複数...
-
<ACCESS VBA -> EXCEL>getObjec...
-
accessフォルダを移動したらフ...
-
Excelマクロで指定したファイル...
-
エクセルのxls形式からxlsx形式...
-
VBAでワークブックの名前を変数...
-
【Excel VBA】ファイル名が一...
-
Excelで漢字人名が勝手に並び変...
-
エクセル(マクロ)のファイル...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
【マクロ】EXCELで読込したCSV...
-
EXCEL VBA 指定したファイルが...
-
【マクロ】名前を保存する際に...
-
フォルダ内のexcelファイルを順...
-
エクセルマクロで不特定なファ...
-
【Excel VBA】ファイル名が一...
-
ファイルを開かずにマクロを実行
-
フォルダ内のブック全部にパス...
-
EXCELマクロを無効にして開く方法
-
エクセル 複数ファイルの一括...
-
エクセル(マクロ)のファイル...
-
accessフォルダを移動したらフ...
-
秀丸:あらかじめ設定した複数...
-
データ参照先が別ファイルの場...
-
エクセルファイルを開く時、関...
-
Excelファイルがマクロを含むか...
-
ファイルの保存場所を変えたら...
-
エクセルのシートの数を数えた...
-
VBAでワークブックの名前を変数...
-
Excelのマクロでファイルを開く...
おすすめ情報