###前提・実現したいこと
EXCEL VBAで、Sheet1[Data]に元データを持ち、
必要な情報だけを抽出して、Sheet2に表示する機能を作っています。
また、Sheet2で編集した情報を使い、
Sheet1[Data]を更新するような仕組みにもなっています。
データの呼び出し・更新にはADODBを利用して、
シートをデータベースのようにSQLを発行して操作していますが、
データベースへの更新のタイミング「dbCmd.Execute」で
下記のメッセージが出てしまいます。
※更新データは150行くらいありますが、エラーが発生するのは
毎回決まった行です。(データ内容は全て同じ)
何が原因なのでしょうか?
###発生している問題・エラーメッセージ
実行時エラー'-2147467259(80004005)': 他のユーザが同じデータに対して同時に変更を試みているので、プロセスが停止しました。
###該当のソースコード
Public Function updDataView() As Boolean Dim dbCon As Object Dim dbCmd As Object Dim strSQL As String Dim tgtRow As Long Set dbCon = CreateObject("ADODB.Connection") Set dbCmd = CreateObject("ADODB.Command") dbCon.Provider = "Microsoft.Ace.OLEDB.12.0" dbCon.Properties("Extended Properties") = "Excel 8.0;" dbCon.Open ThisWorkbook.FullName dbCmd.ActiveConnection = dbCon For tgtRow = 1 To Range("CHKVIEW").Rows.Count strSQL = "" strSQL = strSQL & vbCrLf & "UPDATE [DATA$] SET" 'BLNO(SO No.) strSQL = strSQL & vbCrLf & " A0001 = 'A'" strSQL = strSQL & vbCrLf & ", A0002 = 'B'" strSQL = strSQL & vbCrLf & ", A0003 = 'C'" strSQL = strSQL & vbCrLf & ", A0004 = 'D'" strSQL = strSQL & vbCrLf & ", A0005 = 'E'" strSQL = strSQL & vbCrLf & ", X9002 = now()" strSQL = strSQL & vbCrLf & "WHERE A0000 = '1' dbCmd.CommandText = strSQL dbCmd.Execute Next tgtRow End Function
###試したこと
dbCon.Provider = "Microsoft.Ace.OLEDB.12.0"
の部分を、
dbCon.Provider = "Microsoft.Jet.OLEDB.4.0"
にすると、正常に動作します。
また、エラー画面でデバッグへ移ると、
「dbCmd.Execute」で停止していますが、
F5を押すと、そのまま正常に継続処理可能です。
ループの開始前と後にトランザクションをかませてみたり、
更新時点にWaitを入れてみたりしましたが、改善には至りませんでした。
###補足情報(言語/FW/ツール等のバージョンなど)
Excel2010 32ビット版を使用。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2017/02/06 05:24