簡體   English   中英

使用 vba 處理多個工作簿時遇到問題

[英]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 庫嗎? 我該如何解決?

不要使用SelectActivate 盡管從直覺上看,它們似乎是非常有用的功能,但實際上它們很少有任何用處。

相反,請使用工作簿和工作表 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM