none
サーバ上のEXCELファイルがLOCK OPENできない RRS feed

  • 質問

  • 伝票システムを作成しました。伝票番号は重複しないようサーバ上に採番.xlsxを作成し採番カウンターの読み込み・更新を行うようにします。各クライアントPC上の伝票入力.xlsmから新規入力時に受注日が更新された時に新規採番するようプログラムしました。

              Workbooks.Open(¥¥SRVDENPYO¥採番.xlsx)                'サーバの採番.xlsxを開く
              Worksheets("採番").Select                                           '採番.xlsxをActivate
              I = Worksheets("採番").Range("B2").Value                   '最新受注保存番号をGET
              I = I + 1                                                                   '受付№に+1
              Worksheets("採番").Range("B2") = I                            '受付№を更新
              Application.ScreenUpdating = False                             '画面非更新
              ActiveWorkbook.Save                                                '採番.xlsmを保存
              Application.ActiveWorkbook.Close SaveChanges:=False           '採番.xlmsを閉じる

               Worksheets("伝票入力").Range("A2") = I                            '受付№をSET       

    EXCELではOPEN時、LOCKモードで開かれるので、採番.xlsxが正常に開かれたら閉じるまで専有されているものと考えていましたが、実際には複数端末から伝票入力.xlsmを実行したとき、タイミング的にほぼ同一だったのか、同一伝票番号がふられ、伝票番号をファイル名とする入力済伝票が同一の2ファイルが作成されてしまいました。(保存フォルダーが違うため上書きされない)

    受注番号を一意に正しく採番できるようにするにはVBAでどのようなチェックロジックを考慮する必要があるのでしょうか?

    よろしくお願いいたします。 以上

    • 移動 山本春海 2012年5月22日 2:56 適切なカテゴリに移動しました。 (移動元:Visual Basic)
    2012年5月21日 13:19

回答

  • 多分「ファイルサーバ」上に保存している一つのExcelのファイルを、複数のクライアントで利用したいってことですね?

    残念ながらExcelは、一つのExcelのファイルを複数ユーザーが同時に処理できるようには作られていません。
    表面上は一人が開いていたら、他の人からは読み取り専用で開くことがあるので、同時アクセス制御が考慮されているように見えます。
    しかし、その動作はファイルサーバとクライアントの環境(ファイルシステムなど)に左右されるので、絶対ではありません。

    同時アクセス制御を行いたいなら、DBMSを利用するのが最も簡単で一般的です。
    採番管理程度なら、SQL Server の Express エディションでも十分だと思います。
    • 回答としてマーク fqjcn3307 2012年5月22日 12:01
    2012年5月22日 6:26

すべての返信

  • LOCKモードとはなんでしょうか? 参考になるWebサイト等を挙げていただけたらそれでもいいのですが。

    なお、Workbooks.Open()のドキュメントは参照していますか?

    2012年5月21日 23:26
  • 多分「ファイルサーバ」上に保存している一つのExcelのファイルを、複数のクライアントで利用したいってことですね?

    残念ながらExcelは、一つのExcelのファイルを複数ユーザーが同時に処理できるようには作られていません。
    表面上は一人が開いていたら、他の人からは読み取り専用で開くことがあるので、同時アクセス制御が考慮されているように見えます。
    しかし、その動作はファイルサーバとクライアントの環境(ファイルシステムなど)に左右されるので、絶対ではありません。

    同時アクセス制御を行いたいなら、DBMSを利用するのが最も簡単で一般的です。
    採番管理程度なら、SQL Server の Express エディションでも十分だと思います。
    • 回答としてマーク fqjcn3307 2012年5月22日 12:01
    2012年5月22日 6:26
  • やはりDBを利用するしか手がないということですね。

    OfficeのAccessでも同様に処理可能ですよね。

    一度トライしてみます。

    2012年5月22日 12:03