[英]Incoherent Range into Recordset
我在 Excel VBA 項目中使用的記錄集出現問題。 我正在嘗試將某個范圍讀入 Recordset,直到現在它始終有效。 但是這一次我想獲得一個不連貫的范圍,在我的例子中它由表的列組成,並通過以下函數將此范圍提供給記錄集(從@Martin Dreher 獲得)
'this is how I set the range
Set SourceRange = ThisWorkbook.Worksheets(1).Range("Tablename[[field1]:[field2]], " & _
"Tablename[[field3]:[field4]], Tablename[[field5]:[field6]]")
'this is the function I set my recordset with
Function GetRecordset(rng As Range)
Dim xlXML As Object
Dim rst As Object
Set rst = CreateObject("ADODB.Recordset")
Set xlXML = CreateObject("MSXML2.DOMDocument")
xlXML.LoadXML Replace(rng.Value(xlRangeValueMSPersistXML), "rs:name="" ", "rs:name=""")
rst.Open xlXML
Set GetRecordset = rst
End Function
當我通過 VBA 選擇范圍並且它是我想要的范圍時,但是當調用 getRecordset 和后記將數據從記錄集中復制出來時,我得到的只是第一個范圍的數據。
我編輯了變量的名稱,因為涉及到一些內部數據。
已經感謝您的幫助!
很高興你發現它有用。 如果您認為問題已解決,請確保標記有用的答案並關閉開放線程。
主題:
在您的函數中添加Debug.Print rng.value(xlRangeValueMSPersistXML)
以進行調試。 您會看到 XML 只包含您的第一個范圍,即使您將范圍與,好吧, Union
優先。
Afaik 沒有辦法解決這個問題。 嘗試使用連續范圍進行修復。
但是,如果你絕對需要兩個范圍的一個記錄,並且可以保證他們有兩個相同的行數和每Row(i)
在A
屬於Row(i)
中B
,那么解決方法是
With ThisWorkbook.Worksheets.Add
即時創建新工作表.Cells(1,1)
開始的連續范圍內將您的Union
范圍值輸出到該工作表.UsedRange
檢索 XML.Delete
沒有提示的工作表End with
將其放入您的GetRecordset
-Function 中,因為它同時解決了您在使用兩個標題行時遇到的問題。 如果性能是一個問題,請考慮向您的函數傳遞一個額外的Boolean
,以確定您的函數是否使用該解決方法。
希望有幫助。
編輯:我們不能只是從打開的記錄集中刪除一個未使用的Field
。 正如您所料,每個解決方法都有點臟。
由於我要測試性能,我只能給你一些測試的想法。
使用上面提到的Worksheets.Add
,如果重復執行,性能會降低。
但是,不是在每個循環中創建一個Worksheet
,您可以
Worksheet
,.UsedRange.Cells.Clear
每次迭代后.Delete
一次。 如果您使用.CopyFromRecordset
並從空白輸出表開始,則可能會更快
Rows(1)
中循環Cells
.EntireColumn.Delete
我會給 1. 試一試。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.