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

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

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

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

Q&A

解決済

1回答

11695閲覧

EXCEL自ブック内のシートに対するADODB操作について【排他エラー】

ABCDEEFG

総合スコア20

VBA

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

0グッド

1クリップ

投稿2017/02/02 03:38

###前提・実現したいこと
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ビット版を使用。

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

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

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

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

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

guest

回答1

0

ベストアンサー

dbCon.Open ThisWorkbook.FullName

ADOを使ってワークブックを操作する場合は、操作するワークブックと実行するワークブックは分けたほうが良いですよ。

投稿2017/02/04 05:42

hihijiji

総合スコア4150

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

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

ABCDEEFG

2017/02/06 05:24

やはりそうなのですね・・・。 WEB上では自BOOKに対して接続しているサンプルも 多く見受けられたので大丈夫かと思っていましたが。。。 今回は、データを持っているシートを別BOOKに分けると影響が大きそうでしたので、 エラートラップで拾うようにして、該当エラーの場合は Resume Nextで継続処理するようにしました。 ご回答有難う御座います!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.49%

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

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

質問する

関連した質問