質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

Q&A

2回答

4439閲覧

DAOを使ったマクロが動かない

s_george

総合スコア35

VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

0グッド

0クリップ

投稿2018/09/10 23:06

未だにDAO?と思われるかもしれませんが、Excel2003の頃から使っているマクロを
少しずつ改良しながら使っています。

ところが、今回あるマシンでエラートラップになりそうなところに
入れていたIf文にひっかかったのです。

変数の中身を見るとdbs、rsともにNothingになっていました。

VBA

1 Dim dbs As DAO.Database 2 Dim rs As DAO.Recordset 3 Dim strSQL As String 4 5<中略> 6 7 Set dbs = OpenDatabase(<DBのパス>) 8 Set rs = dbs.OpenRecordset(strSQL) 9

現象が出るのは、Windows10でExcel2016の環境なのですが、
別のWindows10でExcel2016だとうまく動くこともあるのです。

どのような場合にこのようなことが起こるのか知りたいです。
それによってどうやって解決するかを考えたいと思います。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

backyard

2018/09/11 00:59

「あるマシン」から、ネットワーク的にデータベースは見えるのでしょうか?そこだけ環境が違う職場だったり、そのPCの設定がほかと違う可能性についてまずは確認してみないと、もしかしたらプログラムのソースだけ見ていても解決しないかもしれません。そちらの確認状況や状態についての情報も補足いただくと有益なアドバイスが出てくるかもです。
s_george

2018/09/11 23:00 編集

【 ネットワーク的にデータベースは見えるの】については情報が不足していましたが見えています。 【そこだけ環境が違う職場】についてですが、同じサブネットマスク内のネットワーク上に動作するマシンも動作しないマシンもいます。
退会済みユーザー

退会済みユーザー

2018/09/13 11:17

「エラートラップになりそうなところ」というのがよくわかりませんが、`On Error` ステートメントを使用しているということなら、まずはそれを外してエラーを特定してください。
s_george

2018/09/13 22:57

実際はOn Errorステートメントは入れていません。エラーというよりブレイクポイントを使って上記のステートメントを確認してみたのですが、変数がNothingになっているのです。
guest

回答2

0

同じOS、同じExcelバージョン、同じマクロが動く環境と動かない環境がある場合、
・参照設定
・セキュリティパッチ
あたりに行き着くことが多いです

【参照設定】
VBAエディターを開いてメニューから「ツール」-「参照設定」を選択
参照可能なライブラリーファイルのリストでチェックの状態を比較

【セキュリティパッチ】
コンパネから「プログラムと機能」を開いて「インストールされた更新プログラム」のOfficeアップデート(KBxxxxxxx)を比較

違いがあるようであれば、参照設定を変更したり、セキュリティパッチをアンインストールしたりしてどうなるか

投稿2018/09/11 01:01

takito

総合スコア3111

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

s_george

2018/09/11 01:17

参照設定はすぐに思いついたので先にやっておきましたが、 いずれも<参照不可>ということはありませんでした。 OfficeアップデートのKBについては見てないので確認してみたいと思います。
s_george

2018/09/14 02:02 編集

アップデートに関しては自動的に最新になっていました。(某ツールにより) なお、某ツールによりWindowsUpdateはコントロールパネルから見えなくなっていました。
guest

0

On Error ステートメントを使用していないということで……。

OpenDatabase メソッドがエラーもなく Nothing を返すというのは考えにくいように思います。また、仮に返すとしても、次の行の OpenRecordset でエラーとなるはずです。

別の理由で OpenDatabase の行に到達していないとか、変数を確認する前にどこかで Nothing を代入しているとか、あるいはスコープ外で確認しているとか、そういったことはないでしょうか。

投稿2018/09/14 08:50

退会済みユーザー

退会済みユーザー

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

s_george

2018/09/26 02:20

返信が遅くなりました。 改めてソースを見てみたらサブルーチンの最上部に On Error Resume Next と書いていました。 あと、投稿で記載したソースの下で If rs.EOF = True Then エラーメッセージ表示 Exit Sub End If としていました。
ExcelVBAer

2018/09/26 03:49

じゃぁ「On Error Resume Next」をコメントアウトして実行してみれば、 エラーメッセージで原因が分かるんじゃぁないですか? 個人的には全関数にON Error ・・・ を入れるやり方は、 超デバッグしにくいのでやめた方がいいと思いますけどね。
s_george

2018/09/28 03:28

実際にOn Error Resume Nextをコメントアウトして実行してもらったところ エラーが出ている箇所がわかりました。 掲示したコードの前に objFSO.CopyFile <コピー元のファイルパス>, <コピー先のファイルパス> を実行しているところがあるのですが、そこでエラーが出ていました。 ※objFSOはFileSystemObject型の変数です。 エラー内容は以下の通りです。 実行時エラー:'70' 書き込みができません。 実際にエラーが出るマシンでプロパティを確認しても読み取り専用にはなっていませんでした。 その他に確認することとかありますでしょうか?
退会済みユーザー

退会済みユーザー

2018/09/28 22:42

もはやDAOに全然関係なさそうなので別の質問にした方がいいんじゃないでしょうか。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問