[英]Having issues working with multiple woorkbooks using vba
我是編碼新手,在這個領域幾乎沒有經驗,我正在嘗試在 Excel 上使用 VB 學習一些東西。
所以,我試圖在 XML 中捕捉幾個單詞並將它們寫在新工作簿上,但我不知道為什么,當我調用新工作簿並嘗試對其進行編輯時,它會將值寫入上一個工作簿,這是不應該發生的。
Sub loadXML()
Dim vFolder As String, vFile As String, vFileName As String
Dim vLineFile As Integer, vLineTAG As Integer, vLineResource As Integer
Dim vRange As String, vNode As String, vRange2 As String
Dim vWindowMain As String, vWindowFile As String, vWindowXML As String, vXMLSheetName As String
Dim XDoc As Object
Dim myNodes As IXMLDOMNodeList, myChildNodes As IXMLDOMNodeList
Dim myElement As IXMLDOMElement
Dim myNode As IXMLDOMNode, myChildNode As IXMLDOMNode
Dim nNode As Integer
Dim nChildNode As Integer
'principal
vWindowMain = ActiveWorkbook.Name
'planilha resource
Sheets("Plan1").Select
vRange = "A1"
vXMLSheetName = Range(vRange).Value + "Orionv5.xlsx"
Workbooks.Open vXMLSheetName, UpdateLinks:=False
vWindowXML = ActiveWorkbook.Name
vLineFile = 2
'main workbook
Windows(vWindowMain).Activate
Sheets("Plan1").Select
vRange = "A1"
vFolder = Range(vRange).Value
Do While True
Application.ScreenUpdating = False
vLineFile = vLineFile + 1
Windows(vWindowMain).Activate
Sheets("Plan1").Select
vRange = "A" + Trim(Str(vLineFile))
vFile = Range(vRange).Value
vFileName = vFolder + "\" + vFile 'xml arquives are listed on the main workbook
If vFile = "" Then
Exit Do
End If
Windows(vWindowXML).Activate
'open xml
Set XDoc = CreateObject("MSXML2.DOMDocument")
XDoc.async = False: XDoc.validateOnParse = False
XDoc.load (vFileName)
Set myNodes = XDoc.SelectNodes("//data/value")
If myNodes.Length > 0 Then
For nNode = 0 To myNodes.Length - 1
Set myNode = myNodes(nNode)
If myNode Is Nothing Then
Debug.Print "Nenhum item encontrado"
Else
Set myChildNodes = myNode.ChildNodes ' Get the children of the first node.
For nChildNode = 0 To myChildNodes.Length - 1
vNode = myChildNodes(nChildNode).Text
Windows(vWindowXML).Activate
With Workbooks("XmlOrionv5.xlsx") 'secondary workbook is not being the one receiving the values, why?
vRange2 = "A" + Trim(Str(nNode + 2))
Range(vRange2).Value = vNode
End With
Next nChildNode
End If
Next nNode
Else
Debug.Print "Nenhum item encontrado"
End If
Loop
我知道那些我沒有使用的變量,我認為這不是完成這項任務的最佳方式,但這是我現在有意義的方式。 我使用類似的 function 寫入輔助工作簿沒有問題,但我從另一個 Excel 工作簿而不是 Z0F635D0E0F3874FFF8B581C132E6C7AZ 教科書獲取值。 with 命令現在是我的第二種方法......在我只使用 select 工作簿和 select 工作表之前,也沒有工作。 這是因為我正在使用指針和 arquive 庫嗎? 我該如何解決?
不要使用Select
和Activate
。 盡管從直覺上看,它們似乎是非常有用的功能,但實際上它們很少有任何用處。
相反,請使用工作簿和工作表 object。 您可以使用這些對象在您想要的位置進行更改。
例如
Dim wb As Workbook
Dim ws As Worksheet
Set wb = Workbooks("NAME") 'Change the name to the correct name
Set ws = wb.Worksheets(1) 'Change nr. to correct index, or use name
With ws
'e.g.
.Range("A1:A10").Value = "test"
End With
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.