2011-11-01 2 views
4

잘 나는 방법을어떤 방법이 더 최적화 되었습니까?

를 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 문을 가지고 있습니다 .08 .조건> 태그 및 다른 5 개의 태그와 다른 2 개의 태그에 대한 이름은 2입니다. 스위치 케이스 문장은 사용할 수 없습니다. 내 질문은 vba 매크로의 실행 속도가 느려지므로 파일에 액세스하는 모든 상황에 대해 Im은 조건을 검사하고 파일에 액세스하므로 성능이 저하됩니다. 이것은 처음 접근

번째 방법

끝에 다음 배열을 생성하고 배열 체크 박스의 상태를 추적하고, 어레이를 통한 루프가있는 경우 (1) 다음 밖의를 WriteLine을 사용하는 것이다 그러지 마.

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 이러한 스피 배열을 만드는 접근 loops.In과 50 문에서도 경우를 사용하고 다시 loops.I의 6 배열을 만들기 믿는다 추측 할 수있다 메모리를 먹는다 또한 코드는 첫 번째 코드에 비해 약간 크고 이해하기가 약간 복잡합니다.

하지만 누가 더 빨리 할 수 ​​있을지 잘 모르겠습니다. 이상한 방법으로 도와주세요.

+2

아직 두 가지 방법을 벤치마킹 해 보셨습니까? 그걸 가장 확실한 방법으로 생각합니다. 귀하의 벤치마킹을위한 신뢰할 수있는 타이밍 방법에 대한 구글 "GetTickCount". – mwolfe02

+0

귀하의 질문에 대한 답변이 아니지만 귀하에게 유용 할 수있는 몇 가지 기능을 작성했습니다 : http://idevlop.blogspot.com/search/label/xml –

+0

VBA에는 "WriteLine"방법이 없으므로 의사 코드 또는 다른 프로그래밍 언어를 사용 중입니다. 무엇 이니? – JimmyPena

답변

1

매우 적은 양의 입출력이므로 쓰기 시간에 대한 걱정은 두 가지 방법 중 하나가 낮은 밀리 초 범위에 있어야하므로 불필요한 우려가되는 것 같습니다.

다음은 컨트롤 자체를 열거하여 간단하게 유지할 수있는 또 다른 방법입니다.

'//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 
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을 작성하는 것이 간단합니다.

관련 문제