Excel VBA 質問スレッド No.737 (未解決)

Excel VBAにて 違うデータを更新してしまう件

投稿者 : ひろひろ     投稿日時 : 2022/05/22(Sun) 00:42:11     OS : Windows 10     EXCEL : Excel 2021
Excel VBAにて 違うデータを更新してしまう件について質問させてください。
Excel VBAを使用して、SharePoint リストのデータ更新を行っていますが、
全く別のIDのデータを潰して上書きしてしまう時があります。
例えば 1のデータを読み込んで 開始日 終了日を更新したいとします。
すると 2のデータを上書きしてしまうのです。
例)
ID 顧客 案件名 金額 開始日 終了日
1 AAA XXX  300
2 BBB ZZZ  500  
↓ 更新すると
ID 顧客 案件名 金額 開始日 終了日
1 AAA XXX  300
2 AAA XXX  300 2022/1/1  2022/3/31
となってしまいます。 次のデータを・・・というわけではなく 全く違うデータを上書きしてしまうのです。
でも毎回そうなるわけではなく 10件ぐらい続けて入れたときに変になる時がある・・・という感じなのです。 何がいけないのか分かりますでしょうか?
ロジックを一部抜粋で載せておきます。
ちなみに こちらのロジックは最新なのですが 上記現象が起きたときは、
Withが二重になっていました。 
With Adors
 With Userform1
   ~   
 End With
end with

これがいけないのでしょうか?

Dim cn As Object 'ADODB.Connection

'O365環境
Const SharePointUrl As String = "https://**************"
Const ListId As String = "{******-****-****-****-*******}" ' Sharepint List ID
Dim W_WFID As Long
W_WFID = UserForm1.U_WFID

'On Error GoTo ErrHandl

Set cn = CreateObject("ADODB.Connection")
DoEvents 'ファイルOpen時の おまじない
cn.Open "Provider=Microsoft.ACE.OLEDB.16.0;WSS;IMEX=2;RetrieveIds=Yes;DATABASE=" & SharePointUrl & ";LIST=" & ListId & ";" 'プロバイダーは適宜変更
Set Adors = CreateObject("ADODB.Recordset")
On Error GoTo ErrHandl1
With Adors
DoEvents 'ファイルOpen時の おまじない
.Open "SELECT * FROM list Where ID =" & W_WFID, cn, adOpenDynamic, adLockOptimistic
.Fields.Item("ApplicationType") = UserForm1.U_申請区分.Value ' 申請区分
.Fields.Item("EMPID") = UserForm1.U_EMPID ' Sales peAdorson
.Fields.Item("Customer") = UserForm1.U_CusID ' Customer
.Fields.Item("Title") = UserForm1.U_Project.Value ' Project
.Fields.Item("StartDate") = UserForm1.U_StartDate.Value ' 開始日
.Fields.Item("EndDate") = UserForm1.U_EndDate.Value ' 終了日
.Fields.Item("ContractValue") = UserForm1.U_Value.Value ' 契約金額

.Update


End With

'11.処理時間の計測終了&メッセージ出力
WK_ENDTIME = Time
WK_ENDTIME = WK_ENDTIME - WK_STARTTIME

MsgBox "更新しました。処理時間は" & Minute(WK_ENDTIME) & "分" & Second(WK_ENDTIME) & "秒でした"
cn.Close

Set adoCn = Nothing 'オブジェクトの破棄
Set cn = Nothing 'オブジェクトの破棄

Exit Sub

[返信 1] Re : Excel VBAにて 違うデータを更新してしまう件
投稿者 : tok     投稿日時 : 2022/05/23(Mon) 13:30:16
回答が付かないようなので気づきだけですが、
>   Dim W_WFID As Long
これ有っていますか?

> .Open "SELECT * FROM list Where ID =" & W_WFID, cn, adOpenDynamic, adLockOptimistic
If .Fields.Item("ID") <> W_WFID Then
Stop
End If
> .Fields.Item("ApplicationType") = UserForm1.U_申請区分.Value ' 申請区分
入れてデバッグしてみたらいかがですか?

[返信 2] Re : Excel VBAにて 違うデータを更新してしまう件
投稿者 : ひろひろ     投稿日時 : 2022/05/23(Mon) 14:39:09
> If .Fields.Item("ID") <> W_WFID Then
> Stop
> End If

> 入れてデバッグしてみたらいかがですか?

上記を入れてやってみましたが、 値は =なので
STOPしません。
MCGBOXにてそれぞれの値を出してみましたが やはり一緒でした。

[返信 3] Re : Excel VBAにて 違うデータを更新してしまう件
投稿者 : 通りすがり     投稿日時 : 2022/05/23(Mon) 19:23:20
https://detail.chiebukuro.yahoo.co.jp/qa/question_detail/q11262203691
で同じ質問をしているようですが、そこでの修正前ソースの二重 Withは下記の記載。
> With Adors
>  .Open "SELECT * FROM list Where ID =" & W_WFID
>  With Userform1
>   Adors.Fields.Item("ContractValue") = .U_Value.Value
>   .Update
>  End With
> End with
修正前ソースは Userform1.Update の処理をしていますけど、今回の修正ソースは Adors.Update の
処理をさせてますよね。(上記サイトでも同じ書き込みが有りましたけど。)

これが悪かったのか、他の修正に悪いところが有ったのかは知りませんが、まずは修正箇所を比較し、
何のために何故そのように変えたのかを調べて下さい。
修正した人も、修正の必要が有ったので直した(いい加減に書き換えた訳ではない)はずでは?

当掲示板について
返信入力フォーム
お 名 前  :
内  容   :
ステータス  : この質問を解決済みにする

認証コード  :
        キャプチャ画像


( 処理日時 : 2022-07-07 12:38:08 )

Page
Top