Excel (VBA)

Excel VBAに関するフォーラムです。
  • 解決済みのトピックにはコメントできません。
このトピックは解決済みです。
質問

 
(Windows 7 Home Premium : Excel 2016)
いきなり、動作が変わってしまいました。
投稿日時: 17/06/14 13:20:13
投稿者: katoyosi2010

昨日まで、少なくとも1ヶ月以上は問題なく動いていました。
EXCEL VBA で作成したファイルです。
起動したら、いきなり実行時エラー"3706"となりました。
 
それと今までは、出ていなかったファイル変換も動いていました。
内容は、 ACCESS ファイルを ADOで読込してます。
 
問題の可能性を、ご教示いただけると有り難いです。今は、呆然としています。
 
Private Sub LOAD_材料表検索()
    wkb.Sheets("DB_1").Select
    Range("A3:U1000").Select
    Selection.ClearContents
    Range("A3").Select
     
    Dim db As New ADODB.Connection
    Dim rcs As New ADODB.Recordset
    Dim cmd As New ADODB.Command
    Dim MYSQL As String
    Dim H_DUMY As String
     
    H_DUMY = "00V2000"
    
    db.Open "Provider=Microsoft.Ace.OLEDB.12.0;Data Source =" & FILENAME -------------@

回答
投稿日時: 17/06/14 14:09:57
投稿者: Suzu

実行時エラー"3706"

 
は、
実行時エラー'3706'、プロバイダーが見つかりません。正しくインスツールされていない可能性があります。
が表示されているという認識で良いでしょうか。
 
【別のブックをオープンしたいのですが。】
http://www.moug.net/faq/viewtopic.php?t=75210&highlight=katoyosi2010
 
とは全く関係ありませんか。
 
メッセージそのままを採ると
・"Microsoft.Ace.OLEDB.12.0" が正しくないと言う話。
    Accessがインストールされていない
    接続ファイルが accdb でない
 あたりが怪しいです。
 
引用:
出ていなかったファイル変換も動いていました。

 
も考えると、後者なんではありませんか?

投稿日時: 17/06/14 17:40:56
投稿者: katoyosi2010

SUZU さん有難うございます。 以前の件は完結しています。
 
現在報告できるのは
@ 該当するACCESSには、直接ACCESS を起動してデータを確認できます。
A 同じファイルを配布していますが、その人はうまく実行できています。
B いままで、うまく実行していた別のファイルも軒並み同じメッセージがでます。
 
いま、長いパス名をしつこくチェックしてます。

投稿日時: 17/06/14 18:03:58
投稿者: katoyosi2010

SUZU さま
変換しているボックスの跡に長い文章が出ているのを報告していませんでした。
 
「このファイルは新しいバージョンのMicroSoft Excel で作成されたものです。
ファイルは作業可能な形式に変換されていますが、告ぐの問題が発生しました。
元のファイルを保護するために、ファイルは読み取り専用で開いています。
 
-初期化されていにい ActiveX コントロールは、このバーシーョンの Excelでは開きません。
 
報告してなくて申し訳ありません。

回答
投稿日時: 17/06/15 16:05:01
投稿者: Suzu

断片的な情報が多いので確認させてください。
 
1.エラーの起こったPCは昨日までエラーの起こっていないPCと同一ですか。
 
2.同一の場合、そのPCの Officeのインストール/アンインストールを行いませんでしたか。
 
3.同一で無い場合、問題の起こるOfficeのバージョン/起こらないOfficeのバージョンは何ですか。
 
4.このコードはExcelにて実行している事で間違いないでしょうか。
 
5.そのファイルの拡張子は? xls? xlsm?
 
6.接続しているのは、Accessのファイルで良いか。
 
7.接続しているAccessファイルの拡張子は mdb? accdb?
 
8.「出ていなかったファイル変換」これは、
     ・Excelファイルのファイル変換
     ・Accessファイルのファイル変換 どちらでしょう。
 
 
 
Word/Excel/PowerPoint 用 Microsoft Office 互換機能パック
 
をOffice2007より古いPCにインストールし、
2007以降のマシンにて作成されたマクロを含むファイル(xlsm)を
その互換パックをインストールしたPCにて開こうとしていませんか。
 
【Microsoft Office 互換機能パックをインストール後、Excel 2007 以前のバージョンの Excel で Excel 2007 形式のファイルを開くと読み取り専用になる】
    https://support.microsoft.com/ja-jp/help/946555
 
2007以降のマシンにてxlsmではなくxls形式にて 保存してみてください。

投稿日時: 17/06/15 18:04:38
投稿者: katoyosi2010

SUZU 様 お世話をかけて申し訳ありません。
 
@ 同じ PC です。
A 行っていません。
B
C EXCEL にて実行しています。
D .xlsm です。
E access です。
F accdb です。
G EXCEL のボックスです。
 
いままでは、ショートカットをクリックして実行していました。 (ある期間途中までは問題なし)
 
EXCEL 2016 で起動して開くと、問題ありませんでした。

回答
投稿日時: 17/06/15 19:08:31
投稿者: Suzu

大事な質問が抜けていました。
 
問題の起こる Excelのバージョン は何ですか?
 
質問文

引用:
(Windows 7 Home Premium : Excel 2016)

 
Excel2016の最新になりますよね。。
引用:
このファイルは新しいバージョンのMicroSoft Excel で作成されたものです。
〜〜〜〜

が起こる事自体、変な話です。
 
それとも、EXCELのファイル変換 と言うのが 当該xlsm を開く際に起動し、
旧ファイル形式へ変換を誘い、旧ファイル形式へ変換した為、
引用:
このファイルは新しいバージョンのMicroSoft Excel で作成されたものです。
〜〜〜〜

が起こった?
 
どんなタイミングで、Excelのファイル変換が起動しているのですか?

回答
投稿日時: 17/06/15 19:09:03
投稿者: Suzu

引用:
いままでは、ショートカットをクリックして実行していました。 (ある期間途中までは問題なし)

 
 
ヒトリゴト・・
   うーん、、、何だろう。。関係ない所に引っ張られていっている気がする。。。
   「実行時エラー'3706'、プロバイダーが見つかりません。」問題に集中!!
 
 
新規にファイルを作成し、
 
Sub ADOTEST()
    Dim cn As Object
    Dim FILENAME As String

    FILENAME = "接続先のaccdbファイルパス"

    Set cn = CreateObject("ADODB.Connection")
    cn.Open "Provider=Microsoft.Ace.OLEDB.12.0;Data Source =" & FILENAME
    cn.Close: Set cn = Nothing
End Sub

 
を実行してください。(FILENAME は適宜修正下さいね。)
エラーになりますか?

投稿日時: 17/06/20 10:40:35
投稿者: katoyosi2010

SUZU 様
 
ADOTEST 実行しましたら、エラーになりました。( ブロバイダーが見つかりません。)
 
島までの経緯を考えてみました。
@当初EXCEL2003で作っていました。そのときは、ACCESSは旧タイプで.mdbでした。
Aそのときは、JET.4.0でDAOで接続してました。
 
BOFFICE環境が最新の2016になりました。
 そうしたら、ACCESSファイルが古いタイプということで、ファイル変換が起動して実施してくれました。
  ( これは、ACCESS の方です。 )
Cそこで、データベースをACCESS 2016に再生成して -accdbにしました。
DEXCEL側のプログラムを、ADOにして、OLEDB.12.0に変更しました。
 そして、EXEL 2016でセーブし直しました。
 デバッグもして動作の確認もしました。
Eこのときから、-xlsm になったような気がします。
 
 このあと、しばらく不自由なく正常に動いてきました。
 
これが、いままでの経緯です。
これまでの報告で、瑕疵があるかもしれません。宜しくお願いいたします。
 
 
 
 

回答
投稿日時: 17/06/20 12:52:50
投稿者: Suzu

引用:
ADOTEST 実行しましたら、エラーになりました。( ブロバイダーが見つかりません。)

 
あれま。。
 
以前は動いていたのであれば、参照されるドライバが参照できなくなったって事ですので。
 
・ドライバファイルが壊れた
・レジストリ登録がおかしくなった
・参照されるドライバのビット数が変わった
 
のあたりの可能性が高いと思います。
 
 
最後のビット数が変わったと言うのは
OS が 64ビット、 Officeのビット数環境と違うビット数の開発ツール(VisualSutadio等)を
インストールした場合 その開発ツールの環境のビット数になる事があった記憶があります。
 
http://thinkami.hatenablog.com/entry/20101013/1286987450
http://qiita.com/yaju/items/86314412741deb806366
https://qa.social.msdn.microsoft.com/Forums/ja-JP/573f33c6-ca85-448e-ae35-247d24642a89/microsoftaceoledb120-?forum=vbgeneralja
 
Accessの再インストール
または、ドライバをインストールOffice環境に合わせたドライバーをインストールし直しましょう。
https://www.microsoft.com/ja-jp/download/details.aspx?id=50040

回答
投稿日時: 17/06/20 13:02:06
投稿者: Suzu

多分、プロバイダが見つからないエラーは上記にて改善できると思います。
 
でも、いろいろ、突っ込みドコロが満載なのです。。
 
 
最新の2016を使用しているにも関わらず

引用:
このファイルは新しいバージョンのMicroSoft Excel で作成されたものです。
〜〜〜〜

が出るはずが無いのです。
(ある作成環境のExcelで、マクロを含むExcelファイル作成。
  作成環境より古い環境で、互換パック等を使って開いた時のメッセージで、
  マクロが実行できませんって事のメッセージです)
 
そのメッセージは
引用:
1.当初EXCEL2003で作っていました。そのときは、ACCESSは旧タイプで.mdbでした。
2.そのときは、JET.4.0でDAOで接続してました。
  
3.OFFICE環境が最新の2016になりました。
 そうしたら、ACCESSファイルが古いタイプということで、ファイル変換が起動して実施してくれました。
  ( これは、ACCESS の方です。 )
4.そこで、データベースをACCESS 2016に再生成して -accdbにしました。
5.EXCEL側のプログラムを、ADOにして、OLEDB.12.0に変更しました。
 そして、EXEL 2016でセーブし直しました。
 デバッグもして動作の確認もしました。
6.このときから、-xlsm になったような気がします。

 
の、6のファイルを開いたとき?
 
引用:
JET.4.0でDAOで接続

これは。。ADO?? JET 3.6 ?

投稿日時: 17/06/20 14:06:42
投稿者: katoyosi2010

SUZU 様
 
失礼しました。 DAO 3.6 のライブラリ参照で、下記のようにして作ってありました。
 
 
 
   Dim db As DAO.Database
    Dim rcs As DAO.Recordset
    Dim qry As QueryDef
    Dim MYSQL As String
    Dim H_DUMY As String
   --------
    Set db = OpenDatabase(FILENAME)
     
  --------
     
    Set qry = db.CreateQueryDef("", MYSQL)
    Set rcs = qry.OpenRecordset
 
   --------

回答
投稿日時: 17/06/20 15:45:15
投稿者: Suzu

当方のいろいろの不明点は、
プロバイダが見つからない部分の解決に関与する可能性は低いので、
スルーしてもらっていいです。
 
直接の回答としては、投稿日時: 17/06/20 12:52:50 になります。
 
 
 
 
ADOのドライバを入れ直してもエラーになる場合、DAOにて接続してみましょうか。
 
http://www.moug.net/faq/viewtopic.php?t=75742
Excel から Accessに接続してSQL発行する時、Replace関数が未定義関数エラーになる
 
にてskさんのサンプルコードがあります。
 
mdbの時の DAOのコードが残っているならそのコードがそのまま使えます。
「Microsoft DAO 3.6 Object Library」ではなく、
「Micosoft Office nn.n Access Database Engine Object Library」にチェックを入れれば
コードそのままで、accdbに接続可能です。

投稿日時: 17/06/20 17:03:23
投稿者: katoyosi2010

SUZU 様
 
いろいろありがとうございました。
 
教えていただいた、方法でトライしてみます。
 
有難うございました。