ほっとひといき給湯室

ほっとひといき給湯室の掲示板です。お気軽にどうぞ!
  • 解決済みのトピックにはコメントできません。
このトピックは解決済みです。
質問

 
Office2019から2014へ
投稿日時: 24/12/18 09:33:51
投稿者: かず

会社でOffice2019PROを使っていてAcess2019を使っているのですが、サポート期限も迫っているので2024にしてみようかなと思っています。
Office2019をアンインストールして2014をインストールするだけで大丈夫なのでしょうか?
AccessにはVBAがバリバリに組み込まれているので心配なのです。
実際に試してみればわかる事なのですが、何か事前に注意する事や、やっておく事があったら知りたいのです。

回答
投稿日時: 24/12/18 13:29:42
投稿者: Suzu

Offiec 2014 は 存在しなかったと思うので、2019 → 2024 と解釈して。
 
1)既存 Office 2019 が、32bit版なのか、64bit版なのかを確認する
 
2) VBAを使用している ファイル毎に、VBEにて参照設定を確認
 
3) Office 2019 既存のコントロール以外に使用しているコントロールの有無
  → そのコントロールをインストールした アプリケーションが何なのか確認
    可能なのであれば、アンインストール
 
4) Accessとの事なので、データベースアクセスに、外部ドライバを使用しているか確認
 ODBCや、DSN を使用しているのであれば、それらも確認後、削除
  → そのドライバのパッケージ、 32/64bit を確認 可能であればアンインストール
 
5) Office 2019のアンインストール
 
6) Office 2024のインストール
 この時、可能なのであれば、1) の bitを合わせる。
 (PCの スペックが充分なのであれば、64bit にしたい所ではあるが
  3)、4)の bit も合わせる必要があり、
   bit を変えると API呼び出しを 変える必要があるので その手間を惜しむかどうか判断)
 
6) Office 2024 には Access が 同梱されるパッケージは無かったはずなので
  Office 2024 の 別に Access 2024 をインストール できるなら、
  Office 2024 の bitと合わせる。
  (少なくとも、Office を 64bit として、Access 32bit とすると 痛い目に遭いがちなので注意)
 
7) 3)、4) の アプリケーション・ドライバ をインストール ODBC、DSNを設定
 
8) VBAを使用しているファイル で VBEから参照設定に参照不可がないか見直し
 
9) bit数を変えた場合、API宣言部の書き直し
 
10) VBEにて参照不可が無ければ、コンパイルしなおして、エラーにならないか確認
 
 
の様な流れかと。
 
 
それでも、エラーになるのは出てくる可能性はあります。
その場合は個々のファイル毎に修正を行います。

投稿日時: 24/12/18 18:35:47
投稿者: かず

大変申し訳ありません
2019→2014ではなくて
2019→2024の間違いです
 
それから
たくさんの確認事項を書いて頂きありがとうございます。
まったく思っていなかった事をたくさん知る事ができて嬉しいです。
 
社内のパソコンなのですが、win10(64ビット)、win11(64ビット)ぜんぶで30台ほどあります。
 
インストールされている既存のOffice2019は、全て64ビット版かと思いきや
アカウント→バージョン情報で見ると
32ビット版もあれば64ビット版もありました。
 
更に更新プログラムを自動的に適用する設定をしているOfffice Accessのバージョン情報を見たら「マイクロソフト Access2021 MSO 64ビット」と表示されていてるものもあって2021バージョン??
 
確かに社内ではバージョンの統一について全く意識していませんでしたから、更新プログラムを適用するかたもいれば更新しないという設定をする方もいました。
 
まずはバージョンの統一から始めた方が良いのかも知れませんね
 

回答
投稿日時: 24/12/19 09:35:27
投稿者: Suzu

Office2019 → Office2024 という事は、
ライセンス認証が必要になるので、Microsoftアカウント必須ではなかったかな?
 
 
Office2019の サポート期限 との事ですが
それを気にするのであれば、Windows10 のサポート期限も
Office2019 同様 2025年10月14日です。
 
個々の PC で Windows10から Windowd11 への アップグレートが適うなら良いですが
それを行ってからの、Officeのアップグレードを行いましょう。
 
適わないPCもあるでしょうから、PCの買い替えも視野に入れる必要があり、
 Office 30台分の ライセンス + Access ライセンス
 PC 買い替え
の費用が必要になります。
 
一気に費用計上できるなら良いですが、そうでないなら計画的なPC入れ替え含めたやり方を
検討する必要があります。
 
永久版の良いところもあるでしょうが、今回の様に 同時期に 多額の費用が必要になります。
サポートを気にして、かつ30台というのであれば、サブスクリプションも視野に入れても良いでしょう。
 
 
Access は、 30台すべてで使用する訳ではないでしょうけど
データベースに対し、複数台の同時使用 ではないのでしょうか?
 
そうなら、脱Accessも視野に入れても良き頃合いかもしれません。
それが、DBサーバーを立てての、クライアント&サーバー なのか、
それともクラウドなのか・・
 
少なくとも、Accessをフロントとしたシステムについて
積極的な起用はされて行かないでしょうね。

投稿日時: 24/12/19 13:37:30
投稿者: かず

Suzuさんレスありがとうございます。
 
こちらの環境の話になってしまいますが
既存のOffice2019は全て消してしまって
新たにOffice2024のライセンス版を台数分購入する準備はできています。
 
過去にWindows(98,xp,vista,7)とOffice(2000,2003,2007)の
バージョンがバラバラ過ぎて客先とのトラブルもあり
数年前に全パソコンを同一機種にしてofficeも2019で統一した経緯があります。
 
Windows11の更新案内が通知されて、
更新した人と既存のままWindows10のまま使っている方が混在する形になっていますが
来年は10月には全てWindows11に更新するつもりです。
 
そう言えばOffice2019をインストールする時に、32ビットと64ビットの選択ができたので
その時に各人任せでやらせてしまい後の確認もしていなかったので
32ビット版と64ビット版が混在してしまったと思います
気付いていないだけかも知れませんが約5年間、幸いトラブルは報告されていません。
 
Accessの使い方は、フロントエンドとバックエンドにわけてあり
バックエンドは社内LANのファイルサーバーで共有しています。
リンクテーブルは使っていません。
 
また30台全てACCESSを使っているのですが
工場作業の実績登録とその集計程度なので頻度は少なく
軽い処理ばかりのせいか今の所は問題は報告されておりませんが
せめてバックエンド部分だけでもSQLサーバーにしたいと思っています
 
前にACCESSをフロントで、バックエンドを無料のSQLサーバー2019にして
テストプログラムを作って簡単な動作確認をしてみた事があるのですが
読み込み速度があまりにも高速なので驚きました。
これだ!
と思いつつデータの登録や更新の方法が理解できず挫折して現在に至る所です。
 
ほっとひといき給湯室とはいえ
長々とすいません

回答
投稿日時: 24/12/19 14:56:39
投稿者: Suzu

Office 2024 LTSC なら、Accessも含まれていましたね。失礼いたしました。
ライセンスも準備してあるとの事ですのであとは入替えだけですね。
 
元々、Office2019 と、Office 2024 が 同じbit であるなら、そのまま アップグレート可能ですが
bitを変えるのであれば、アンインストールが必要(共存も不可)
 
アンインストールが必要という事は インストール後に、ランタイム等も入れなおす必要があります。
 
 

引用:
Accessの使い方は、フロントエンドとバックエンドにわけてあり
バックエンドは社内LANのファイルサーバーで共有しています。
リンクテーブルは使っていません。
  
また30台全てACCESSを使っているのですが
工場作業の実績登録とその集計程度なので頻度は少なく
軽い処理ばかりのせいか今の所は問題は報告されておりませんが
せめてバックエンド部分だけでもSQLサーバーにしたいと思っています
  
前にACCESSをフロントで、バックエンドを無料のSQLサーバー2019にして
テストプログラムを作って簡単な動作確認をしてみた事があるのですが
読み込み速度があまりにも高速なので驚きました。
これだ!
と思いつつデータの登録や更新の方法が理解できず挫折して現在に至る所です。

 
リンクテーブルを使用していないという事は、
レコードセット接続だったりでしょうから、VBA内で、ドライバを指定しているのでしょう。
Accessをインストールしてしまうなら、接続ドライバも 同時にインストールされるでしょうから
32 → 64bitに代わっても、問題は発生しづらいでしょう。
 
リンクテーブルを使用していないなら、
・VBAでレコードセットを使ってフォーム/レポートを表示
・ワークテーブルを使って 表示
のどちらかでしょう。
クライアントがAccessを利用する利点としては、レポート の GUI くらい・・
 
その為だけに、Accessのライセンス料というのは・・・という気になってしまいます。
 
SQLServerを使用するなら、
Visual Studio Express / Visual Studio Community 辺りを使い 開発。
GUI として、ブラウザを使うのか、ユーザーフォームを使うのかは判断するにしても
レポートは、Excel を 使っても良い気がします。
 
基本コードもできているのでしょうから、乗り換えも、結構楽ではないでしょうか。
 
 
余談ですが・・
 容易に SQLServerへ接続してうえで、同一IDE上で、SQLServerの設定もでき
 クライアント/サーバーを構築してうえで クライアントのユーザーインターフェイスを
 ブラウザで 提供できる ADP形式ファイル
 そこから、コンパイル済みにできた ADE 。。 すごい機能だったなとつくづく・・

投稿日時: 24/12/19 20:53:10
投稿者: かず

ファイルサーバーへのアクセスは特別に何かをインストルする事も無く
VBAで下記サンプルのような感じでファイルサーバーへの登録、変更、削除をやっています。
 
ファイルサーバーのデータをVBAでアクセスをしようとすると毎回警告表示がでるので
「インターネットオプション」→「信頼済みサイト.このWebサイトをゾーンに追加する」にファイルサーバーのパスを登録してます。
※このゾーンのサイトにはすべてサーバーの確認を必要とするのチェックは「外した状態です」
 
'---------------------
'これは↓サンプルです
'---------------------
Dim ws As DAO.Workspace
Dim db_外部 As DAO.Database
Dim rs_外部 As DAO.Recordset
Dim i As Long
Dim wk_sql As String
 
On Error GoTo ErrorHandler
i = 0
wk_sql = "SELECT * FROM T_不良データ蓄積 WHERE 工程='検査' AND NZ([判定],'')=''"
  
On Error GoTo TransactionError
Set ws = DBEngine.Workspaces(0)
DBEngine.SetOption dbMaxLocksPerFile, 30000
ws.BeginTrans
Set db_外部 = OpenDatabase("\\192.168.0.150\FServer\不良データはここ.accdb") '←ファイルサーバー
Set rs_外部 = db_外部.OpenRecordset(wk_sql)
Do Until rs_外部.EOF
   i = i + 1
   rs_外部.Delete
   rs_外部.MoveNext
Loop
rs_外部.Close: Set rs_外部 = Nothing
db_外部.Close: Set db_外部 = Nothing
ws.CommitTrans: Set ws = Nothing
 
 
少し調べてみたのですが
Access2013以降ではADP形式はサポートされていないのですね…
そもそもADP形式なんて知りませんでした
 
Accessで気になるのは容量が2GBという制限がある事ですね
2024からは容量が4GBなると聞こえて来ますが本当なんだろうか?
 
Accessはとにかくレポートが作りやすいので使い続けたいと思っています
 
頑張って勉強してもう少し自信がついたら乗り換えを検討して進めようかと思います

回答
投稿日時: 24/12/20 09:48:11
投稿者: Suzu

引用:
乗り換えを検討して進めようかと思います

そうしてみてください。
 
 
給湯室なので、細かい事をいっても許されるでしょうか・・?
(内容については、うろ覚えな部分もありますが・・)
 
1) UNCとして、\\IPアドレス\共有フォルダ名\ファイル名 とするのではなく
 \\IPアドレス\共有フォルダ名\ をネットワークドライブとして登録した方が高速だったはず。
 
2) アクション毎に、毎回 WorkSpace、Database を参照するのではなく
  そのフォームを開いた際に、WorkSpace・Databaseを開き、
  開いている間はそのWorkSpace・Database を使いまわし
  フォームを閉じる時に、WorkSpace・Databaseを閉じます。
 
  アクションの度にWorkSpace・Databaseの開閉をする時間を減らします。
   (コード実行時エラー等で、一度でバック画面に戻ると
   それらのObjectは破棄され、Nothingになってしまうので
   そのまま実行すると オブジェクト参照が なく エラーになるのを防ぐ目的で
   エラートラップに、Object Is Nothing 判定を入れ Nothingなら参照する事で
   回避する事も可能)
 
3) "SELECT * FROM T_不良データ蓄積 WHERE 工程='検査' AND NZ([判定],'')=''"
  テーブル T_不良データ蓄積 の [判定] の 値要求プロパティーを見直す
 
  値要求と空文字の許可
  https://www.javadrive.jp/access/field/index7.html
 
  値要求 空文字の許可  入力可能なデータ
  いいえ はい     Nullと長さ0の文字列
 
  の時だけ、NZ([判定],'')='' が必要になります。
 
  可能なら、
  値要求 空文字の許可 入力可能なデータ
  いいえ いいえ    Null
 
  とすれば、IsNull 判定だけで良くなります。
  或いは、空白文字列以外の 値 例えば 0 を入れるとか。
 
  これは、NZ([判定],'') という演算に対し、'' であるかを判定しています。
 
  判定 フィールドに インデックスを設定していても、
  演算フィールドに対し "" を判定している事になるので、
  インデックスの高速な検索を適用できなくなります。
 
  インデックスを指定し、演算フィールドではなく、
  直接フィールドの値に対し 直接抽出条件を設定する事で、
  インデックスを有効にし、高速に抽出する事ができる様になります。
 
 
4) DBEngine.SetOption dbMaxLocksPerFile, 30000
 
  "ファイル共有のロック数を超えました...大きなトランザクション処理中にエラーが発生する
 
  接続あたりの最大サーバー レコード ロック数は 10,000
 
  30000にしてもしょうがない様な・・
 
 
5) レコード削除
  Do Until rs_外部.EOF
     i = i + 1
   rs_外部.Delete
   rs_外部.MoveNext
  Loop
 
  これは・・削除してレコード数を知りたい?
  RecordsAffected プロパティを使えば良いです。
 
  1レコードずつ削除しないで DELETE 文を発行します。
 
ws.BeginTrans
With db_外部
  .Excute "DELETE * FROM T_不良データ蓄積 WHERE 工程='検査' AND [判定] Is Null"
  i = .RecordsAffected
End With
ws.CommitTrans

 
 
6) ファイル上限
Accessで気になるのは容量が2GBという制限がある事ですね
2024からは容量が4GBなると聞こえて来ますが本当なんだろうか?

 
https://support.microsoft.com/ja-jp/topic/access-%E3%81%AE%E4%BB%95%E6%A7%98-0cf3c66f-9cf2-4e32-9568-98c1025bb47c
 
引用:
ccess データベース (.accdb または .mdb) の合計サイズ (すべてのデータベース オブジェクトおよびデータを含む)
 
2 GB からシステム オブジェクトに必要な領域を差し引いたもの

2GBのままです。
 
これは、Accessの制限ではないと思っています。
 
Excelでも、2GBです。
https://support.microsoft.com/ja-jp/office/excel-%E3%81%AE%E4%BB%95%E6%A7%98%E3%81%A8%E5%88%B6%E9%99%90-1672b34d-7043-467e-8e27-269d656771c3
引用:
データ モデル ブックのメモリ ストレージとファイル サイズの最大制限
 
32 ビット環境の仮想アドレス空間は 2 ギガバイト (GB) で、Excel やブック、また同じプロセスで実行するアドインで共有されます。 データ モデルのアドレス空間のシェアは 500 〜 700 メガバイト (MB) まで増やすことができますが、他のモデルやアドインが読み込まれている場合は少なくなることがあります。
 
64 ビット環境では、ファイル サイズに対し、ハード制限はありません。 ブックのサイズは、利用可能メモリとシステム リソースでのみ制限されます。

 
下位互換機能を重視し、今の様な、NTFS ではなく、
FAT16時の 1ファイルの制限 2GB の制限に引きずられているのだと思っています。
 
何にしても、1GBを超えるくらないになったら、SQLServerへの移行時期でしょうから・・
2GBを超えてAccessで運用するのは現実的ではないかと。
(1ファイル 1テーブル毎に分け、リンクテーブルで・・という方法はあるでしょうけど)
 
 
7)
引用:
Accessはとにかくレポートが作りやすいので使い続けたいと思っています

開発者側からみたらそうでしょうけど
ユーザーや IT管理者からしらた、レポート 【だけ】のために との思考になるでしょう。

投稿日時: 24/12/20 11:14:57
投稿者: かず

Suzuさん
何から何まで丁寧に教えて頂きありがとうございます。
見直した方が良いと思うVBAのソースだらけという事に気付きました。
わかりやすいサンプルソースまで書いて下さっていい勉強になりした。
2Gの壁の歴史についても知れて楽しかったです。
 
すぐには無理ですが、担当者達を説得して脱アクセス化を進めて行こうと決心できました。
また何かありましたら書き込みさせて頂きますのでよろしくお願い致します。
 
この度は本当にありがとうございました。