
作業中は常に読み取り専用状態にしておき、保存の時にだけ読み取り専用の属性を解除して
上書き保存し、上書き保存が終了次第、即座に読み取り専用状態に戻す運用を考えております。
(1)ThisWorkbookのOpenプロシージャでファイルを読み取り専用状態に設定
(2)ThisWorkbookのBeforeSaveプロシージャで
読み取り専用を解除→上書き保存→読み取り専用状態に再設定
Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
'上書き保存モードを解除
Cancel = True
'上書きしますか?のコメントを非表示に設定
ActiveWorkbook.Saved = True
'ファイルが読み取り専用であった場合は以下の処理を実行
If ActiveWorkbook.ReadOnly Then
'ブックの読み取り専用設定を解除
ActiveWorkbook.ChangeFileAccess Mode:=xlReadWrite, Notify:=True
'上書き保存を実行
Application.DisplayAlerts = False
Application.EnableEvents = False
ActiveWorkbook.Save
Application.EnableEvents = True
Application.DisplayAlerts = True
'ブックを読み取り専用に設定
ActiveWorkbook.ChangeFileAccess Mode:=xlReadOnly
'ファイルが読み取り専用でなかった場合は以下の処理を実行
Else
'上書き保存を実行
Application.DisplayAlerts = False
Application.EnableEvents = False
ActiveWorkbook.Save
Application.EnableEvents = True
Application.DisplayAlerts = True
End If
End Sub
上記のマクロで上手くいきそうなのですが、下記2点が解決できずに困っております。
(1)上書き保存ボタンをクリックすると下記のメッセージが毎回表示されてしまいます。
『読み取り専用です。コピーを保存するには名前を付けて保存して下さい。』
OKボタンをクリックしたりEscやEnterキーを押下さえすればこの警告メッセージを回避でき
以後は思った通りの処理を行えるのですが、できればこのメッセージを表示したくない。
(2)上書き保存のために読み取り専用を解除した際、他のオペレーターがエクセル起動中、
または上書き保存中であった場合、エラーが発生してしまうことと思われます。
この問題の解決策をご存知の方、是非教えて下さいますよう宜しくお願いします。
当初は共有ブックとしての運用の方向で進めていたのですが、既に2人のオペレーターが
ファイルにアクセスしている状態で、3人目のオペレーターがファイルを開くと読み取り専用と
なってしまったり、保存時に時間がかかり過ぎたり、保存時のエラーが頻繁に発生したりといった
状況でしたので共有ブックとしての運用は諦めました。(シート50枚、ファイルサイズ3.5MB程度)
使用PCはXPでExcel2003です。以上、宜しくお願いします。
No.3ベストアンサー
- 回答日時:
>ただ、全てのオペレーターにアクセスのライセンスを取得させるのが簡単な状況でないため、
>アクセスの活用ができない状況にあります
エクセルからアクセスのテーブルの操作が可能です。
すべてのユーザーにアクセスのライセンスがなくても運用できる可能性もあります。
例えば
1台のパソコンにアクセスが入っているとして
データベースの作成、テーブルの作成など行って、共有できるサーバーのフォルダにデータベースの
ファイルを作成しておきます。
ほかのユーザーは、エクセルを使って データを追加したり、検索やデータの抽出を行う作業専門に
します。
データベースの操作は 大まかに
1、データの検索・抽出
2、データの追加
3、データの修正
4、データの削除
に分けられますが。
エクセルからアクセスのテーブルの内容を修正したり削除したりする時だけは運用に注意してください。
集計したいデータをエクセルで抽出、エクセルで内容を書き換えた後にアクセスのテーブルに反映させる
といった手順ですが。
仮に Aさんがあるレコードのデータを修正したいと思ってエクセルに取り出して作業中に
Bさんも同じレコードに修正の作業に入ってしまった。Bさんが先に作業を終えてアクセスのテーブルに
保存。
その後に、Aさんが作業を終わってアクセスのレコードを上書きして、Bさんの作業内容が消える
という可能性です。
そのあたりを工夫すればいかがでしょうか?
お礼が遅くなってしまい、誠に申し訳ございませんでした。
また、貴重なご意見を頂きありがとうございました。
アクセスでの運用も視野に入れて今後の運用について
検討してみます。
No.2
- 回答日時:
Excelの「変更履歴」機能というのがアル。
http://allabout.co.jp/gm/gc/297720/
これを読んで、使えないか考えてみては。
ーー
読み取り専用ファイル
http://www.kenzo30.com/ex_kisopoint/onepoint_son …
上書き保存ができないファイルです。
開いた跡でyp見tp理専用属性を返すことは出来ないでしょう。
上記に
上書きしたものを保存する時は、別のファイルとして新しい名前を付けて新規に保存します、と在るように
そのようにする仕掛けを考えたらどうでしょう。
ーー
一般にエクセルは自分で使うソフトであり、機密や権限などの体系的な組み込みはなされていない(目指してない)ソフトです。
素人衆が、十分勉強もしないで、あれもこれもとか、なんでもエクセルとかの路線で色々質問も多いが、「木に縁りて魚を求む
」の類ではといつも思う。
ご回答ありがとうございます。確かにエクセルでの運用には無理がある状況です。
考え方を変えて今後の運用方法について再度 検討してみることにします。
No.1
- 回答日時:
質問に対する直接の回答ではありません。
>既に2人のオペレーターが
>ファイルにアクセスしている状態で、3人目のオペレーターがファイルを開くと読み取り専用と
>なってしまったり、保存時に時間がかかり過ぎたり、保存時のエラーが頻繁に発生したりといった
>状況でしたので共有ブックとしての運用は諦めました。(シート50枚、ファイルサイズ3.5MB程度)
複数のユーザーから同時編集が必要になった時点でエクセルファイルでのデータ管理はあきらめましょう。
元々エクセルはスタンドアロンの上に使われるアプリケーションです。
複数のユーザーからデータの編集を行うのならばアクセスなどデータベースの活用に考え方を変えるべきです。
ファイルを開くときに 通知 を設定するなどで解決方法があるかもしれませんが
仮に エクセルファイルを上書き保存できたとして、先にほかのユーザーが編集した内容の上に上書き保存してしまったらどうでしょうか?
シート50枚というのも使いにくくないですか。
早速のご回答、ありがとうございました。今後の運用について検討をしてみます。
ただ、全てのオペレーターにアクセスのライセンスを取得させるのが簡単な状況でないため、
アクセスの活用ができない状況にあります。あと、よく考えてみたのですが、この方法では
上書き保存した際に漏れが生じてしまうのですね・・・。参考になりました。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
このQ&Aを見た人はこんなQ&Aも見ています
-
《エクセルVBA》「他の人が該当ファイルを使用中の場合」の処理
Excel(エクセル)
-
VBAで、強制保存してブックを閉じるには?
Visual Basic(VBA)
-
VBAで保存しないで閉じると空のBookが残る
Excel(エクセル)
-
-
4
自分のExcelを読み取り専用で開くVBAは?
Excel(エクセル)
-
5
名前をつけて保存した後、元のファイルに戻るには
その他(コンピューター・テクノロジー)
-
6
エクセル:マクロ「Application.CutCopyMode = False」って?
Excel(エクセル)
-
7
Excel VBA の ChangeFileAccess
Visual Basic(VBA)
-
8
【Excel VBA】マクロでExcel自体を終了させたい
Excel(エクセル)
-
9
メッセージボックスのOKボタンをVBAでクリックさせたい
Visual Basic(VBA)
-
10
VBAでブックを非表示で開いて処理して閉じる方法
Excel(エクセル)
-
11
UserForm1.Showでエラーになります。
工学
-
12
特定のPCだけ動作しないVBAマクロがあります。その理由は?
Visual Basic(VBA)
-
13
テキストボックス(VBA)でEnterを押したときに作動するマクロ
Access(アクセス)
-
14
Excelファイルを開くとき、読み取り専用にするかどうかのダイアログを出ないようにしたい
Visual Basic(VBA)
-
15
Accessのマクロでモジュールを実行させたい。
Access(アクセス)
-
16
VBA シートのボタン名を変更したい
Visual Basic(VBA)
-
17
動的配列が存在(要素が有る)か否かを判定できますか?
Visual Basic(VBA)
-
18
EXCELのVBAでシートコピーをしたとき元のマクロを削除するには?
Excel(エクセル)
-
19
特定のシートの削除を禁止したい(ブックの保護でなく)
Excel(エクセル)
-
20
VBAで文字列を数値に変換したい
Excel(エクセル)
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
エクセルでファイルの最終更新...
-
VBAでPDF作成をしたあと、指定...
-
意味不明のタグが挿入されてい...
-
Excel VBA で困っています。
-
VB.NETでEXCELファイルを開き、...
-
VB6.0でエクセル保存する時の保...
-
vbaでIEの名前を付けて保存(A)...
-
html 保存できない
-
vlan internal allocation poli...
-
teratarmでコマンド入力すると...
-
沢山のフォルダにあるファイル...
-
データ移動時にポップアップメ...
-
共有しているファイルを削除し...
-
onedriveで同期解除をしたら、...
-
フォルダーをコピーするとファ...
-
サブディレクトリも含めて最新...
-
リッチテキストのファイルの復元
-
VB.NETで他のEXEを実行させる
-
ファイル名の日付について教え...
-
ATコマンドでバッチを実行する...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Excel VBAで作成したマクロをxl...
-
エクセルでファイルの最終更新...
-
Excel VBAでほかのアプリケーシ...
-
読み取り専用ファイルを上書き...
-
CImageのファイル名を指定して保存
-
VBAで、強制保存してブックを閉...
-
Corel Digital Studioの動画をS...
-
【Excel VBA】自動的にバックア...
-
VB.NETでEXCELファイルを開き、...
-
コマンドプロンプトでデスクト...
-
VSCodeの自動保存の2か所を無...
-
Pivot table で集計されたデー...
-
webページの特定の部分だけ消し...
-
VBAでPDF作成をしたあと、指定...
-
VBScriptで日本語が変です
-
メモ帳の保存場所
-
タイトルバーやメニューバーの...
-
ASPでファイルを保存するダイア...
-
至急教えてください!プログラ...
-
意味不明のタグが挿入されてい...
おすすめ情報