
作業中は常に読み取り専用状態にしておき、保存の時にだけ読み取り専用の属性を解除して
上書き保存し、上書き保存が終了次第、即座に読み取り専用状態に戻す運用を考えております。
(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で質問しましょう!
似たような質問が見つかりました
- その他(プログラミング・Web制作) pythonでクラスで複数のメソッドを利用する方法 2 2022/04/15 04:17
- Visual Basic(VBA) 【前回の続き続きです、ご教示ください】VBAの記述方法がわかりません。 2 2022/08/24 20:49
- Visual Basic(VBA) 【Excel VBA】自動メール送信の機能追加 5 2022/09/29 12:53
- システム 外付けHDDの初期化について 4 2023/03/05 21:19
- Word(ワード) PCで作ったwordをスマホで編集しようとすると「このファイルは読み取り専用です。」と表示される。 3 2023/05/30 14:51
- システム 外付けHDDの初期化について 4 2023/03/05 20:00
- Visual Basic(VBA) Excelのマクロコードについて教えてください。 1 2022/03/27 13:25
- Excel(エクセル) 2つのVBAを一緒にしたら機能しなくなりました(エクセル) 7 2022/06/02 12:41
- Visual Basic(VBA) エクセルのマクロを使ってメールを送る方法について教えてください 2 2022/03/29 01:36
- Visual Basic(VBA) 【変更】ファイルを閉じてダイアログで保存した時、更新したシートだけの処理の実行をする 5 2022/03/26 18:31
このQ&Aを見た人はこんなQ&Aも見ています
-
《エクセルVBA》「他の人が該当ファイルを使用中の場合」の処理
Excel(エクセル)
-
VBAで保存しないで閉じると空のBookが残る
Excel(エクセル)
-
VBAで、強制保存してブックを閉じるには?
Visual Basic(VBA)
-
-
4
メッセージボックスのOKボタンをVBAでクリックさせたい
Visual Basic(VBA)
-
5
エクセル:マクロ「Application.CutCopyMode = False」って?
Excel(エクセル)
-
6
自分のExcelを読み取り専用で開くVBAは?
Excel(エクセル)
-
7
名前をつけて保存した後、元のファイルに戻るには
その他(コンピューター・テクノロジー)
-
8
ユーザーフォームを表示中にシートの操作をさせるには
Excel(エクセル)
-
9
【Excel VBA】マクロでExcel自体を終了させたい
Excel(エクセル)
-
10
ExcelVBAのユーザーフォームの中に線を引きたい
Visual Basic(VBA)
-
11
エクセルのラベルの値(文字列)を垂直方向で中央揃えにするには?
Excel(エクセル)
-
12
ExcelVBAを使って、値がある場合は作業を繰り返し実行するプログラムを作成したい。
Visual Basic(VBA)
-
13
読み取り専用で開いているエクセルを編集モードに変更したい
Excel(エクセル)
-
14
UserForm1.Showでエラーになります。
工学
-
15
VBAでブックを非表示で開いて処理して閉じる方法
Excel(エクセル)
-
16
ExcelのVBAでWordを読み取り専用で開いて、見たいページに自動で移動する方法を教えて頂きたい
Excel(エクセル)
-
17
VBAでユーザーフォームを再表示させたい。
Excel(エクセル)
-
18
Excelのハイパーリンクのアドレスが勝手に変わる
その他(Microsoft Office)
-
19
Excel VBA の ChangeFileAccess
Visual Basic(VBA)
-
20
エクセルファイルを開く時、常に同じシートから開くようにするには?
Windows Vista・XP
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
エクセルでファイルの最終更新...
-
Excel VBAでほかのアプリケーシ...
-
Excel VBAで作成したマクロをxl...
-
ASPでファイルを保存するダイア...
-
EclipseでJavaScriptファイルの...
-
CImageのファイル名を指定して保存
-
VBAでPDF作成をしたあと、指定...
-
ExcelVBAでデスクトップのPATH...
-
VC++のデータ保存について
-
読み取り専用ファイルを上書き...
-
インストール時、「実行」と「...
-
pythonのプログラムを実行した...
-
VBAで、強制保存してブックを閉...
-
保存先指定
-
HTMLの表示が勝手に切り替わります
-
エクセルで「名前を付けて保存...
-
webページの特定の部分だけ消し...
-
タイトルバーやメニューバーの...
-
ファイルのダウンロード保存先...
-
WSHでExcelファイルを上書きし...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
エクセルでファイルの最終更新...
-
Excel VBAでほかのアプリケーシ...
-
Excel VBAで作成したマクロをxl...
-
読み取り専用ファイルを上書き...
-
Pivot table で集計されたデー...
-
VBAで、強制保存してブックを閉...
-
コマンドプロンプトでデスクト...
-
VBAでPDF作成をしたあと、指定...
-
VB.NETでEXCELファイルを開き、...
-
VBScriptでのSaveAsについて
-
VBScriptで日本語が変です
-
エクセル:マクロ:保存時に連...
-
エクセルで「名前を付けて保存...
-
【Excel VBA】自動的にバックア...
-
N88 BASICで作成されたEXEのソ...
-
EclipseでJavaScriptファイルの...
-
VBSでHPを保存するにはど...
-
VBA メモ帳の上書き保存がしたい
-
ファイルのダウンロード保存先...
-
webページの特定の部分だけ消し...
おすすめ情報