哪种方法更优化?

时间:2011-11-01 10:54:46

标签: vba

我必须创建一个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循环。我相信创建一个数组,吃掉内存,代码也很少与第一个相比较大,而且理解起来有点复杂。

但我不确定哪种方式更快。请帮助这些或任何其他更聪明的方式非常感谢

2 个答案:

答案 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写出来会很简单。