2016-06-22 3 views
2

VBA 스크립트를 사용하여 다른 워크 시트의 인스턴스 값 순서대로 텍스트 섹션을 작성하고 싶습니다. 나는 워크 시트 A에있는 텍스트의 체크를 쓰는 코드의 섹션이VBA 셀의 값에 따라 반복되는 행

Dim selectedTest As String 
Dim activeCell As Range 
Dim outputCell As Range 
Dim currentValue As String 
Dim activePage As String 
Dim row As String 
Dim instancecol As String 

selectedTest = template.Range("I6, I6").value 
Set activeCell = template.Cells.Find(selectedTest + " Data") 
Set activeCell = activeCell.Offset(0, 1) 
instancecol = Split(activeCell(1).Address(1, 0), "$")(0) 
Set activeCell = activeCell.Offset(2, -1) 
currentValue = activeCell.value 
row = activeCell.row 
activePage = template.Range("B" + row) 

Set outputCell = json.Range("D26") 

outputCell.Activate 
outputCell.value = Chr(34) + "name" + Chr(34) + ": " + Chr(34) + activePage + Chr(34) + "," 
Set outputCell = outputCell.Offset(1, 0) 
outputCell.value = Chr(34) + "instance" + Chr(34) + ": " + Chr(34) + "1" + Chr(34) + "," 
Set outputCell = outputCell.Offset(1, 0) 
outputCell.value = Chr(34) + "Input" + Chr(34) + ": [" 
Set outputCell = outputCell.Offset(0, 1) 

While Not currentValue = "ENDPARSE" 

If Not (activeCell.Offset(0, 1).value = "") Then 

    Dim currentPage As String 
    Dim referenceType As String 
    Dim reference As String 
    Dim action As String 
    Dim wait As String 
    Dim screenshot As String 
    Dim instance As String 

    Set outputCell = outputCell.Offset(1, 0) 
    outputCell.value = "{" 
    Set outputCell = outputCell.Offset(1, 1) 


    row = activeCell.row 
    currentPage = template.Range("B" + row) 

    If Not (activePage = currentPage) Then 
     activePage = currentPage 
     Set outputCell = outputCell.Offset(-1, -1) 
     outputCell.value = "" 
     Set outputCell = outputCell.Offset(-1, 0) 
     outputCell.value = "}" 
     Set outputCell = outputCell.Offset(1, -1) 
     outputCell.value = "]" 
     Set outputCell = outputCell.Offset(1, -1) 
     outputCell.value = "}," 
     Set outputCell = outputCell.Offset(1, 0) 
     outputCell.value = "{" 
     Set outputCell = outputCell.Offset(1, 1) 
     outputCell.value = Chr(34) + "name" + Chr(34) + ": " + Chr(34) + activePage + Chr(34) + "," 
     Set outputCell = outputCell.Offset(1, 0) 
     outputCell.value = Chr(34) + "instance" + Chr(34) + ": " + Chr(34) + "1" + Chr(34) + "," 
     Set outputCell = outputCell.Offset(1, 0) 
     outputCell.value = Chr(34) + "Input" + Chr(34) + ": [" 
     Set outputCell = outputCell.Offset(1, 1) 
     outputCell.value = "{" 
     Set outputCell = outputCell.Offset(1, 1) 
    End If 

    referenceType = template.Range("C" + row) 
    reference = template.Range("A" + row) 
    action = template.Range("F" + row) 
    wait = template.Range("H" + row) 
    screenshot = template.Range("I" + row) 
    instance = template.Range(instancecol + row) 
    currentValue = activeCell.value 

    outputCell.value = Chr(34) + "type" + Chr(34) + ": " + Chr(34) + referenceType + Chr(34) + "," 
    Set outputCell = outputCell.Offset(1, 0) 
    outputCell.value = Chr(34) + "reference" + Chr(34) + ": " + Chr(34) + reference + Chr(34) + "," 
    Set outputCell = outputCell.Offset(1, 0) 
    outputCell.value = Chr(34) + "action" + Chr(34) + ": " + Chr(34) + action + Chr(34) + "," 
    Set outputCell = outputCell.Offset(1, 0) 
    outputCell.value = Chr(34) + "instance" + Chr(34) + ": " + Chr(34) + instance + Chr(34) + "," 
    Set outputCell = outputCell.Offset(1, 0) 
    outputCell.value = Chr(34) + "wait" + Chr(34) + ": " + Chr(34) + wait + Chr(34) + "," 

    If Not (currentValue = "") Then 
     Set outputCell = outputCell.Offset(1, 0) 
     outputCell.value = Chr(34) + "value" + Chr(34) + ": " + Chr(34) + currentValue + Chr(34) + "," 
    End If 

    Set outputCell = outputCell.Offset(1, 0) 
    outputCell.value = Chr(34) + "screenshot" + Chr(34) + ": " + Chr(34) + screenshot + Chr(34) 

    Set outputCell = outputCell.Offset(1, -1) 
    outputCell.value = "}," 

End If 

Set activeCell = activeCell.Offset(1, 0) 
currentValue = activeCell.value 
Wend 

outputCell.value = "}" 
Set outputCell = outputCell.Offset(1, -1) 
outputCell.value = "]" 
Set outputCell = outputCell.Offset(1, -1) 
outputCell.value = "}" 
Set outputCell = outputCell.Offset(1, -1) 
outputCell.value = "]" 
Set outputCell = outputCell.Offset(1, -1) 
outputCell.value = "}" 

Dim dataRange As Range 
Set dataRange = json.UsedRange 
Set fs = CreateObject("Scripting.FileSystemObject") 
Set a = fs.CreateTextFile(template.Range("I2,I2") + "\\" + template.Range("I3,I3") + ".json", True) 
For Each C In dataRange 
a.WriteLine (C.value) 
Next C 
a.Close 

template.Activate 

End Sub 

이 순간 워크 시트 A의 정보를 기록하는 워크 시트 B의 값을 취 내 출력은 다음과 같습니다

{   
"name": "Search",  
"instance": "1",   
"Input": [  
    { 
     "type": "button", 
     "reference": "Search", 
     "action": "Click", 
     "instance": "1", 
     "wait": "10", 
     "screenshot": "true" 
    }, 
    { 
     "type": "dropdown", 
     "reference": "PostcodeLogic", 
     "action": "SelectByText", 
     "instance": "2", 
     "wait": "10", 
     "value": "Is", 
     "screenshot": "true" 
    }, 
    { 
     "type": "text", 
     "reference": "PostCodeInput", 
     "action": "SendKeys", 
     "instance": "3", 
     "wait": "10", 
     "value": "AL2 4ED", 
     "screenshot": "true" 
    }, 
    { 
     "type": "button", 
     "reference": "Search", 
     "action": "Click", 
     "instance": "5", 
     "wait": "10", 
     "screenshot": "true" 
    }, 
    { 
     "type": "link", 
     "reference": "ClientName ", 
     "action": "Click", 
     "instance": "4", 
     "wait": "10", 
     "screenshot": "true" 
    } 
]  
}   

내가 원하는 모든 정보가 표시되며 제대로 작동합니다. 이제는 시험 덩어리를 instance 순으로 작성해야합니다. 나는 sequence이라는 필드를 가지고 숫자를 읽고 instance 필드에 넣습니다.

사과가 잘 설명되지 않은 경우 사과해야합니다. 아직 VBA에 새로운 내용이 있습니다.

+0

이전에 시퀀스 열에 정렬을 적용 할 수 있습니까? –

+0

시퀀스 번호가있는 열이 있습니다. 어느 곳에서 각 텍스트 청크에서'instance' 값을 얻습니다. 그러나 현재는 상단에서 하단으로 행을 읽습니다. 해당 열의 값에 따라 읽으 려합니다. 예 : 시퀀스 값 1, 2 등이있는 행 – Ross

+0

그래서 코드 앞에있는 열을 정렬 한 다음 정렬을 제거하십시오. –

답변

0

이와 비슷한 코드 형식을 사용하기 위해 답변으로 게시하지 않았습니다. 내 데이터가 A에 있고 B의 seq 번호가

Sub testing() 

Dim OutputCollection As New Collection     ' For ease 
Dim intMaxSeq As Integer 
Dim intSeq As Integer 
Dim intRow As Integer 

intMaxSeq = WorksheetFunction.Max(Range("N:N")) 

For intSeq = 1 To intMaxSeq 

    For intRow = 1 To Range("A1").End(xlDown).Row 

     If Range("N" & intRow) = intSeq Then 
      ' Your code will sit here to build the o/p 

      ' Like this example only!!!!!!!! 
      sheet("Output").range("a1").value=range("A" & introw).value 
      sheet("Output").range("b1").value=range("C" & introw).value 
      sheet("Output").range("c1").value=range("J" & introw).value 
      ' 



     End If 

    Next intRow 

Next intSeq 

End Sub 
+0

질문에 내 코드를 더 추가했습니다. 내가 작동하도록 코드를 넣은 곳에서 제대로 작동하는 것처럼 보일 수 있습니다. 현재 Sequence 열은 N입니다. 코드 청크를 채우는 데 사용되는 데이터는 A, C, F, H, I, K 열에 있습니다. 죄송합니다 조금 혼란스러워지고 있습니다. – Ross

관련 문제