Excel (VBA)

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

 
(Windows 10 Pro : Excel 2016)
実行時エラー -2147467259 80004005 について
投稿日時: 21/11/29 19:19:56
投稿者: mashimo

ADODB.Connectionを使用してDBに接続しているマクロで上記エラーが出て困っています。
Excelファイルは会社のネットワーク上にあるサーバに置いてあり、それを自PCから実行すると正常に動作しますが、そのファイルを自PCにコピーして実行すると「実行時エラー -2147467259 80004005 引数が無効です」と警告がでます。
他のPCで実行しても同じでした。
エラーそのものの解決と、ファイルの保存場所で発生したりしなかったりする原因解明をしたいです。
 
エラーがでるマクロ
 
Dim cn As Object 'ADODB.Connection
Dim rs As Object 'ADODB.Recordset
     
Set cn = CreateObject("ADODB.Connection")
cn.Open "Provider=Microsoft.ACE.OLEDB.16.0;WSS;IMEX=2;RetrieveIds=Yes;DATABASE=" & SharePointUrl & ";LIST=" & ListId_allData & ";"
Set rs = CreateObject("ADODB.Recordset")
     
Dim sql As String
sql = "SELECT MAX([更新日時]) FROM list WHERE [生産会社] = '" & ProductPlant & "'" & IIf(openOnly, " AND [報告状況]='OPEN'", "")
     
With rs
  .Open sql, cn
    .MoveFirst
     result = .Fields.Item(0).Value
     .Close
End With
cn.Close
 
上記のcn.Openの部分でエラーとなります。
 
アドバイスをよろしくおねがいします。お願いします。

投稿日時: 21/11/29 19:26:12
投稿者: mashimo

OSは64bit,Excelは32bit
 
Visual Basic For Applications
Microsoft Excel 16.0 Object Library
OLE Automation
Microsoft Office 16.0 Object Library
Microsoft Forms 2.0 Object Library
Microsoft Outlook 16.0 Object Library
上記が参照設定されています。

回答
投稿日時: 21/11/29 22:54:07
投稿者: WinArrow
投稿者のウェブサイトに移動

推測です。
正常に処理する時とエラーになるときの
>SharePointUrl
のパス文字列を比較して、検証してみると分かるかも?

投稿日時: 21/11/30 09:03:58
投稿者: mashimo

WinArrowさん
回答ありがとうございます
 
ご指摘のあったSharePointUrlはマクロ冒頭でConst定義しているものでした。
念の為、cn.Open内で使用されている他の変数もすべて比較しましたが、違いは有りませんでした。
また、変数をすべて直書きしてもてもエラーは出ました。
 
引き続きアドバイスをお願いします。m(_ _)m

回答
投稿日時: 21/11/30 09:36:30
投稿者: Suzu

mashimo さんの引用:
ご指摘のあったSharePointUrlはマクロ冒頭でConst定義しているものでした。
念の為、cn.Open内で使用されている他の変数もすべて比較しましたが、違いは有りませんでした。

 
引用:
Excelファイルは会社のネットワーク上にあるサーバに置いてあり、それを自PCから実行すると正常に動作しますが、そのファイルを自PCにコピーして実行すると

 
そのファイル は、cn の接続先?
であれば、逆に、違わないといけないのではありませんか?

投稿日時: 21/11/30 10:03:53
投稿者: mashimo

Suzuさん
回答ありがとうございます
 
このツール(Excelファイル)は社内のSharePointのDBにアクセスしています。
SharePointのDBのある場所とこのツールをおいてある場所は別ですが、SharePointがつながっている社内ネットワークの中ならどこからでも使用できることを前提に作成されているようです。
 
cnの接続先としてはSharePointのDBに固定で良いはずです。
 
引き続きよろしくおねがいします。
 
 
 

回答
投稿日時: 21/11/30 12:06:54
投稿者: Suzu

mashimo さんの引用:
このツール(Excelファイル)は社内のSharePointのDBにアクセスしています。
SharePointのDBのある場所とこのツールをおいてある場所は別ですが、SharePointがつながっている社内ネットワークの中ならどこからでも使用できることを前提に作成されているようです。
 
cnの接続先としてはSharePointのDBに固定で良いはずです。

 
SharePointサーバを社内に持っているのですね。
そうなると、詳しくは判りかねますが、
 
とりあえず、
・Office上で、SharePintへのログインか出来ているか。
・ブラウザから、そのURLにてログインできるか
・リストが正しいか
 
あたりを確認してみてください。

回答
投稿日時: 21/11/30 12:09:18
投稿者: WinArrow
投稿者のウェブサイトに移動

>SharePointのDBのある場所とこのツールをおいてある場所は別です
フォルダが異なるということでしょうか?
 
パスをどのように指定しているのでしょうか?
 
同一コンピュウータということで
 
"C:\"のようなパスを記述していませか?

投稿日時: 21/12/01 10:25:13
投稿者: mashimo

Suzuさん、 WinArrowさん
ご回答ありがとうございます
 
・Office上で、SharePintへのログインか出来ているか。
→できております
・ブラウザから、そのURLにてログインできるか
→これもできております
・リストが正しいか
→できているはずです。
 同じExcelがネットワーク内のフォルダにある場合は正常にアクセスできていますので
 URL/Listともに正しいです。
 そのExcelを自PCに持ってくると動かなくなります。
 ちなみに上の2つの質問に関しては自PCからのアクセスができています。
 
"C:\"のようなパスを記述していませか?
→上記のようなパスを記述している箇所は有りませんでした。
 
このExcelをメンテする必要があり、サーバー上のフォルダに置いたままだと正常に動くので、その場でメンテしている分には良いのですが、できれば自PCでメンテしたく。
そもそもこのエラーがなぜ出るのかがわからくて困っています。
 
引き続きアドバイスをよろしくおねがいします。

回答
投稿日時: 21/12/01 11:40:47
投稿者: Suzu

SharePoint自体 使用したことが無いので詳しくは判りませんが
 
Connection.Open でエラーとなっていますので。。。
 
SharePoint ADO でWEB検索すると
 
同様エラー
【Microsoft コミュニティー】
SPOのリストへのADO接続
https://answers.microsoft.com/ja-jp/msoffice/forum/all/spo%E3%81%AE%E3%83%AA%E3%82%B9%E3%83%88%E3%81%B8/d90bb8c6-2a7e-475b-a8ad-6dfbe377e4ee
 ファイルの保存場所に依存するとの事。と言うことは、権限やパスが変わるから??
 
 
接続URLやリストの確認について
【初心者備忘録】
[Office VBA]ADOでSharePointリストに接続する方法
https://www.ka-net.org/blog/?p=13195
 URLや、リスト を 確認してみてください。
 
あとは、
接続文字列について
【NYORO PRESS】
SharePoint のデータを ADO などで読む
http://nyoro2.net/wp/?p=398
 
【ConnectionStrings.com】
SharePoint connection strings
https://www.connectionstrings.com/sharepoint/
 
別の接続文字列を試すくらいしか思いつきません。

投稿日時: 21/12/02 10:58:42
投稿者: mashimo

Suzuさん
回答ありがとうございます
 
どうやら最初のリンクにあった権限の問題のようです。
ここらあたりを見直してみたいです。
 
同じソフトが保存場所によっては完全に作動するので、URLやLIST等は正しいので、間違いないと思います。
 
皆さん、どうもありがとうございました。
 
一旦クローズさせていただきます。