【发布时间】:2020-11-16 18:55:53
【问题描述】:
我是编码新手,在这个领域几乎没有经验,我正在尝试在 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
我知道这些变量是我没有使用的,我认为这不是完成这项任务的最佳方式,但这是我现在理解的方式。使用类似的函数在辅助工作簿中写入没有问题,但是我从另一个 Excel 工作簿而不是 xml 文本文件中获取值。 with 命令现在是我的第二种方法......在我只使用选择工作簿和选择工作表之前,也没有工作。这是因为我正在使用指针和 arquive 库吗?我该如何解决这个问题?
【问题讨论】:
-
有关如何避免使用
Select的综合指南,请参阅this。