設定は、プロバイダーでリストから「Microsoft Office 12.0 Access Database Engine OLE DB Provider」を選択し「次へ」、接続で「データソース」にAccessファイルのフルパスを入力すればOKです。
プロバイダーのリストに上記がないのであれば、32bitのACE.OLEDB.12.0がインストールされていないのだと思います。
当方の環境では、64bitのACE.OLEDBがインストールされており、udlファイルを64bitで実行するとMicrosoft Office 12.0 Access Database Engine OLE DB Providerがプロバイダーのリストに表示されましたが、32bitで実行すると表示されませんでした。
そこで、以下のページから、accessdatabaseengine_X64.exeをダウンロードし、インストールしてみたところ、32bit・64bitどちらにもMicrosoft Office 12.0 Access Database Engine OLE DB Providerが表示されるようになりました。
'やりたいこと
Dim 合格数 As Long
合格数 = 0
If Not IsNull(Me("sn" & i)) Then 合格数 = 合格数 + 1
If Not IsNull(Me("sn" & i + 1)) Then 合格数 = 合格数 + 1
If Not IsNull(Me("sn" & i + 2)) Then 合格数 = 合格数 + 1
If Not IsNull(Me("sn" & i + 3)) Then 合格数 = 合格数 + 1
If Not IsNull(Me("sn" & i + 4)) Then 合格数 = 合格数 + 1
繰り返しなのでループにしてもいいでしょう
'やりたいこと
Dim 合格数 As Long
Dim j As Long
合格数 = 0
For j = 0 To 4
If Not IsNull(Me("sn" & i + j)) Then 合格数 = 合格数 + 1
Next
Dim i As Long
For i = 1 To 70 Step 5
If Nz(Me("sn" & i) & Me("sn" & i + 1) & Me("sn" & i + 2) & Me("sn" & i + 3) & Me("sn" & i + 4)) = "" Then Exit For
'やりたいこと
Next
まずコンテンツの有効化は出来ていませんでしたのでメッセージバーにてONして試すとコンパイルエラーが多発したので(この時は理由が分からず)、次に空のデータベースに全てインポートして試しました。やはりコンパイルエラーが出ました。そこでコードの記述に問題あることに気づきました。Private Sub ○○/△△_Click()の様にスラッシュや()の文字を多用していたからです。それでプロシージャの区分線が消えているところが多数ありました。
恥ずかしながらプログラムの知識がないのに見よう見まねでコードを記述していたのですが、こういった文字は使うべきではないのですよね?
全てを試してはいませんが不思議なのはそういう文字を使っていないコードで無反応なボタンがある様なので一旦コードを削除して再度同じコードを記述すると動作しました。これもどこかのコードの記述にまずいところがあるからなのでしょうか?
計算値通りで問題なければそれでもいいのですが、設定のmm単位と実際のレポートでのtwip単位での変換誤差がありますので、用紙幅より印刷幅が大きくなる場合があり、そのとき、2列目が表示されなります。
まず、計算値通りに設定してみて、プレビューして2列目が表示されなければ、0.01ミリ単位で減らしていって、2列表示になるまで繰り返してください。
1のやり方で試しました
解説の画像ではピッタリあってますが
うまくできませんでした
「サイズ」の「幅」は (用紙幅-左余白-右余白)÷列数 より少し小さめにします。
とありますが少し小さめにする理由はなぜですか?
1.参照設定について
ActiveX DataObjects 6.1Libraryの参照設定はそのままのほうが良いと思います。複数個所でADOを使用されるなら参照設定しておいた方がメリットが大きいです。
2.UDLファイルの設定について
確認が足りず申し訳なかったのですが、64bitのWindowsで起動すると、データリンクプロパティも64bitで起動するようです。32bitのcmd.exeからudlファイルを開いてみると、32bitのプロバイダーのリストが表示されます。
1.C:\Windows\SysWOW64\cmd.exeを開く
2.udlファイルのパスを入力(またはudlファイルをドラッグ&ドロップ)
3.エンターキーでコマンドを実行すると32bitのデータリンクプロパティが開く
設定は、プロバイダーでリストから「Microsoft Office 12.0 Access Database Engine OLE DB Provider」を選択し「次へ」、接続で「データソース」にAccessファイルのフルパスを入力すればOKです。
プロバイダーのリストに上記がないのであれば、32bitのACE.OLEDB.12.0がインストールされていないのだと思います。
3.32bitのACE.OLEDB.12.0のインストール
知らなかったのですが、クイック実行形式のOffice(2019はクイック実行形式のみ)の場合、別途インストールしなければOLEDBで接続できないようです。
当方の環境では、64bitのACE.OLEDBがインストールされており、udlファイルを64bitで実行するとMicrosoft Office 12.0 Access Database Engine OLE DB Providerがプロバイダーのリストに表示されましたが、32bitで実行すると表示されませんでした。
そこで、以下のページから、accessdatabaseengine_X64.exeをダウンロードし、インストールしてみたところ、32bit・64bitどちらにもMicrosoft Office 12.0 Access Database Engine OLE DB Providerが表示されるようになりました。
Microsoft Access データベース エンジン 2016 再頒布可能コンポーネント
https://www.microsoft.com/ja-JP/download/details.aspx?id=54920
うまくいくと良いのですが・・・。
私も速度、安定性、セキュリティ、設定の容易さから有線が大好きなのですが、
IT担当の私以外はスマホともどもWiFiが当然という空気です……(苦笑)。
本日スリープ周りの設定をいじってみたところ、とりあえず良さそうでした。
ありがとうございました。
また何かあったら、相談させて下さい。
リンク先では2つの方法を紹介していますが、どちらの方法を使ってますか。
どちらにしても計算で求めることもできます。
分からなければ、印刷してみて、何ミリずれているか計測して、その分ずらせばいいのでは。
砂上楼閣のリスクを理解する為に、データモデリングの勉強から始めると吉ですよ。ネットニュースで話題になっているように、絵に描いた餅になると大変です。
あれはもう、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、ね。
原因が、ネットワークの切断と分かっているので、切断しないような設定、運用をすることになります。
原因はスリープではなく、無線LAN接続の不安定さが原因かも知れません。可能なら、有線接続にした方が安定するでしょう。
当方では、ディスクトップ、有線LANでの運用しかしたことがないのですが、
スリープ復帰後にネットワークの切断されましたとなることが、たまにあります(めったにないですが)。
そのときは、Accessを再起動するように、ユーザーにいってます。
お返事ありがとうございます。
書き忘れましたが、Windows 10 + Access 2019 + 無線LAN接続です。
閉じた時にスリープされます。ただ、必ずエラーになるわけではない(?)ようなのが不思議です。
・カバーを閉じた時にスリープしない
・退勤時は Windows の操作により、または時間経過によりスリープさせる
あたりが唯一の解決になりそうでしょうか。
tone様
夜分遅くに失礼します。仰って頂いた通り、URLファイルでデータリンクプロパティを確認してみたのですが…申し訳ありません、当方の入門的な技術力では各項目の設定が上手くいかず参照することが出来ませんでした…今一度知識を改めて挑もうと思います。また、これも完全な初歩的な問題で質問とするには大変お恥ずかしい限りなのですが、ActiveX DataObjects 6.1Libraryはこのままでいいのでしょうか。
また、Dim cn As New ADODB.Connectionについて、シンプルでわかり易いです。
これはぜひ参考に致します。ご回答心から感謝申し上げます。
また、当方の回答が的を射ず、もしかしたら混乱されているかも知れません。その場合は何卒ご容赦ください。知識も浅はかですが、とにかく今はトライアンドエラーで解決を目指してみます。
りんご様
夜分遅くに失礼します。先程までそれについて確認をしておりました。
どうやらPC環境がWindows10 64bitなのに対しOfficeが32bitで、ACE.OLEDBが64bitになっている可能性がありそうです(素人な為この予測が合ってるかはわかりませんが)
この問題に対しどうアプローチをするか今一度学習、検討をしてみます。ご回答心から感謝申し上げます。
りんご様 tone様
当方の的を射ない質問にご回答くださり心から感謝申し上げます。
当方保険会社社員でございまして、先日の地震対応において時間的リソースを割き過ぎた結果今のお返事となりました事、まずはこの場を持ちましてお詫び申し上げます。
「ノートパソコンのカバーを開閉する」ことで、「ネットワークが切断された」というエラーがでるということは、
ノートパソコンを閉じることで、電源が切れるかスリープになる設定になっていませんか。
(ノートバソコンの場合、バッテリーが減るのを防ぐためにデフォルトではそのような設定になってます。)
まずは、その設定を変更することですね。すくなくとも、Accessを開いている間は。
udlファイル(ユニバーサルデータリンクファイル)を作成し、有効な接続プロバイダーと接続文字列を確認されてはいかがでしょうか?
新規テキストファイルを作成し、拡張子をtxtからudlに変更してから開くと、データリンクプロパティのダイアログボックスが表示されます。ここで、使用可能なプロバイダーの確認や接続テストを行うことができます。
各項目を設定してからOKで閉じます。このファイルをメモ帳などのテキストエディタで開く(例えば、メモ帳を開いてメモ帳のウィンドウ内へudlファイルをドラッグ&ドロップする)とダイアログで設定した接続内容の接続文字列が記載されています。
もしかすると、OLEDB.12.0ではなく、OLEDB.16.0がインストールされているのではないかと思いますが、上記の方法で確認してみてください。
また、蛇足ですが、せっかくADOを参照設定されているのであれば、
Dim cn As Object
Set cn = CreateObject("ADODB.Connection")
のところは、
Dim cn As New ADODB.Connection
としたほうが、インテリセンスも構文チェックも有効になるので、コーディングが楽になると思います。
りんごさん、どうもありがとうございます。
行タイトルのオプションTrueの範囲指定でいけるのですね。
DoCmd.TransferSpreadsheet acImport, , "data", strPath, True, "data$B2:H"
これと同じですか?
AccessExcelインポート時に範囲を指定したい - Accessのテーブ... - Yahoo!知恵袋
当て推量ですが、Microsoft.ACE.OLEDB.12.0は、64bit用?32bit用?
ありがとうございます!
その通りに動きましたー。
勉強させていただきました。
よくよく考えたらデータがきっちり詰めて入力されているなら、データがないレコードは先頭のデータだけチェックすれば大丈夫でした
それぞれのシリアル値に対して何かしたいときは+1・・・+4でそれぞれ参照できますね
プログラムの中でカウントする必要あるのかな?
テキストボックスの参照方法は提示した通りなのでそれぞれのテキストボックスがNullじゃなければ1を足していけばいいですね
繰り返しなのでループにしてもいいでしょう
もう一つ聞かせてください。
hirotonさんのプログラムで5個ずつ配列することはできました。
そこで合格数を調べたいのですが、5個ずつ配列するうち、sn1~sn5の間にシリアルがあればカウントし、
合格数に5個あれば5と表示、3個あれば3と表示したいのですが
hirotonさんのプログラムでカウントすることはできますでしょうか。
ありがとうございます。
シリアルの変数に+1、+2,+3、+4を足せばよかったのですね・・・。
すごく助かりました!!
なんかデータベース的な作りが良くなさそうですね
書き方はいろいろありますが、1レコード分ずつループするようにして、データが無ければループを終わるようにすればいいでしょう
解決しました。
結局、私が変なところに、Date()値の代入を記載しておりました。
(思うような結果を出すための試行錯誤の果てですが、めんぼくありません)
そうして、この度は大変丁寧にご返信くださり、ありがとうございます!
またここを利用したいと思います。
ご返事ありがとうございます。できました。本日より部署で運用開始しました。
色々と回答頂きありがとうございます。大変参考になります。分かり易い様に付けた名前がよくなかったのですね。以後注意していきます。一つづつ時間かけて修正する様にします。その中で解決出来ないことは、りんごさんからの提案通り次は具体的なコード付きで新たに質問する様に致します。今回一から作り直しにならなかっただけ幸いでした。
お手数かけました。
区切りがついたら、新しい質問を、具体的なコード付きで、立てるといいかも。
例えばボタンのクリック時に[イベント プロシージャ]を指定して[...]をクリックすると自動でコードが作られますが、この時のプロシージャ名が「ボタンの名前_Click」のようになります。
フォーム上のコントロールの名前は開発者が分かりやすいようにつけましょう。と当たり前のことがあるんですが、このとき「請求書表示(消費税込み)」のようなボタンだったりすると件の問題が発生します。ただ、この名前自体に不具合はなく、ここからVBAのコードを記述する場合には不具合が起きますが、マクロを割り当てる場合には問題が起きません。厄介な問題と言えるでしょう
また、これら記号(や、半角カタカナ)の問題はOS(Windows)の問題とも関係していて、昔は全角の記号であれば問題なかったという歴史があります。(バッドノウハウですが)
「こういった文字」は使うべきではないんですが「こういった文字」自体が歴史の中で変化してしまっているということですね
ACCESSのバージョンアップ問題の中ではよくある方の問題だと思います
実行しようとしているコードに不具合が見当たらないのに・・・というのも「よくある」ことです。
VBEのメニューから「デバッグ」→「VBAProjectのコンパイル」を実行してエラーがある場合はどんな問題が発生してもおかしくないと考えましょう
確認が大変遅れてしまって申し分けありませんでした。
まずコンテンツの有効化は出来ていませんでしたのでメッセージバーにてONして試すとコンパイルエラーが多発したので(この時は理由が分からず)、次に空のデータベースに全てインポートして試しました。やはりコンパイルエラーが出ました。そこでコードの記述に問題あることに気づきました。Private Sub ○○/△△_Click()の様にスラッシュや()の文字を多用していたからです。それでプロシージャの区分線が消えているところが多数ありました。
恥ずかしながらプログラムの知識がないのに見よう見まねでコードを記述していたのですが、こういった文字は使うべきではないのですよね?
全てを試してはいませんが不思議なのはそういう文字を使っていないコードで無反応なボタンがある様なので一旦コードを削除して再度同じコードを記述すると動作しました。これもどこかのコードの記述にまずいところがあるからなのでしょうか?
解決、やったね!
りんご様の投稿でヒントを得て自己解決いたしました。
DAOのDB接続クラスにワークスペースなどを記載していて、ターミネートのタイミングでclose及びnothingをセットしていました。
別フォームから上記クラスを呼び出して使用していましたが、そこには呼び出して格納した変数に対して最後にnothingをセットしてなかったので、試しにセットしてみたところ解消されました。
ありがとうございました。
おっしゃる通りクローズしております。
解決、やったね!
SetScheduleプロシージャ内の下記の部分の、vbCrLf は改行ですので、それを一つにすればいいです。
遅くなりすみません。解決いたしました。データ不備でした。
定型外のデータが入っており、使用していた関数を修正をしたところ正常に動作しました。
1.元となるクエリ(クエリA)で使用した関数の結果にエラーが発生(「#Func!」エラー)。
2.クエリAとその他2つのテーブルを関連付けて選択クエリを作成(クエリB)。
3.クエリBから必要項目のみを絞り込んでテーブル作成クエリを作成(クエリC)
今回発生したエラーは3のところで発生していました。
データが多かったため、「#Func!」エラーが出ていることに気づきませんでした。
お騒がせいたしました
また、ご教示ください。
左のカレンダーの件名の表示ですが、1件目と2件目に一行スペースがありますが、これを詰めて表示するためにはどのようにしたらよいでしょうか?
たびたびになり恐縮ですが、ご指導ください。
よろしくお願い申し上げます。
当て推量ですが、レコード数ってどれくらい?Accessファイルサイズは、どれくらい?
これだけの説明ではなんとも回答しようがないですね。
とりあえず、
「最適化と修復」を実行してみる。
それでだめなら、
新規にAccessファイルを作成して、そこに旧ファイルからすべてのオプジェクトをインポートしてみる。
上記を試してみてください。
当て推量ですが、DAOの最後に、closeしてますか?
取り敢えず、テーブル作成クエリのSQLはどうなっているの?VBAに頼らずに、手動で作成したという事ですが。