我必须创建一个xml文件并为其编写一些标签。我创建了xml文件,就像正常创建文本文件但扩展名为.xml并使用这些语句
第一种方法
a.writeline("<root>")
if (check_boxapp.value = true ) then
a.writeline("<condition>value</condition>")
end if
if (check_boxname.value = true ) then
a.writeline("<condition>value1</condition>")
end if
像这些,我有大约50 if语句.20 for&lt;条件&gt;标签和其他5用于其他标签和其他2用于命名标签。所以我不能去开关案例的声明。我的问题是它是否会降低vba宏的执行速度,因为对于每个if语句我都在访问文件。我检查条件并访问文件,因此它会降低性能。这是我的第一个方法
第二种方法
创建一个数组并跟踪数组中复选框的状态,然后在最后循环遍历数组,如果它有1,则使用writeline else dont。
之类的东西if chechk_box.value = true then
a(i) = 1
end if
and at the end
for i = 1 to 20
if(a(i)=1) then
a.writeline("something")
end if
next i
for i = 1 to 10
if(a(i)=1) then
a.writeline("something")
end if
next i
可能我想我有大约6个循环。在这些方法中,我创建一个数组并使用50 if statments然后再使用6 for循环。我相信创建一个数组,吃掉内存,代码也很少与第一个相比较大,而且理解起来有点复杂。
但我不确定哪种方式更快。请帮助这些或任何其他更聪明的方式非常感谢
答案 0 :(得分:1)
这是一个非常少量的I / O,担心写入时间似乎是一个不必要的问题,因为任何一种方法都应该在低毫秒范围内。
通过枚举控件本身,您可以采取另一种方法来保持简单;
'//checkbox example
Dim Ctrl As Control
For Each Ctrl In Me.Controls
if TypeName(Ctrl) = "CheckBox" Then
'//look at each checkbox
'//you could use the controls .name to pull out its node value
'//by using a naming convention like "chk_XML_NodeValue" + mid$(Ctrl.Name, 9)
'//or by putting the node value in the Tag propery of the control (in the designer or code)
if (Ctrl.value) then
a.writeline "<condition>" & Ctrl.Tag & "</condition>"
end if
End If
Next
答案 1 :(得分:0)
使用MSXML对象模型在内存中创建文件,然后使用DOMDocument.Save将整个内容转储到磁盘。我假设VBA在这里 - 您在示例中使用“WriteLine”,但VBA没有“WriteLine”方法。
例如:
Dim xmlDoc As Object ' MSXML2.DOMDocument60
Dim pi As Object ' MSXML2.IXMLDOMNode
Dim rootelem As Object ' MSXML2.IXMLDOMNode
Dim valueNode As Object ' MSXML2.IXMLDOMNode
' create new MSXML Document
Set xmlDoc = CreateObject("MSXML2.DOMDocument.6.0")
' add XML declaration at top of file
Set pi = xmlDoc.createProcessingInstruction("xml", "version='1.0' encoding='UTF-8'")
xmlDoc.appendChild pi
' create root element
Set rootelem = xmlDoc.createElement("root")
xmlDoc.appendChild rootelem
If check_boxapp.value then
Set valueNode = xmlDoc.createElement("condition")
valueNode.nodeTypedValue = "value"
rootelem.appendChild valueNode
End If
If check_boxname.value then
Set valueNode = xmlDoc.createElement("condition")
valueNode.nodeTypedValue = "value1"
rootelem.appendChild valueNode
End If
' save to disk
xmlDoc.Save "C:\MyFile.xml"
现在您有了一个有效的XML文件。调整此代码(使用Alex K提供的代码)循环复选框并将XML写出来会很简单。