VBA根据单元格中的值迭代行

VBA根据单元格中的值迭代行,vba,excel,Vba,Excel,我想让我的VBA脚本按照另一个工作表中实例值的顺序编写一段文本。我有一段代码将一段文本写到工作表a 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.Rang

我想让我的VBA脚本按照另一个工作表中实例值的顺序编写一段文本。我有一段代码将一段文本写到工作表a

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
这将从工作表B中获取值,将信息写入工作表A。此时,我的输出如下所示:

{           
"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"
    }   
]       
}           
正如您所看到的,我想要的所有信息都在那里并且工作正常。我现在需要使它能够按照
实例
的顺序写出测试块。我有一个名为
sequence
的字段,它先读取数字,然后将其放入
instance
字段


如果没有很好地解释这一点,我深表歉意,这对VBA来说还是很新鲜的。

类似的内容,不是作为答案发布的,只是为了使用代码格式。我的数据在A中,序号在B中

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

您以前能对序列列应用排序吗?有一列具有序列号。这就是我从每个文本块中获取
实例
值的地方。然而,现在它从上到下读取行。我希望它的读数取决于该列中的值。e、 序列值为1的g行,然后是2,等等。所以在代码之前对列进行排序,然后删除排序。这是一个包含500多行的表。并非每一行都有序列号。对于代码的其他部分,要求某些行按顺序排列。如果我能让VBA为我订购它,那将是一个理想的选择。你需要将所有数据放在一个集合(数组、集合、字典)中,然后在上面编写你自己的排序例程。可以,一种解决方法,将数据放入工作表,然后排序,然后进行格式化,所以只需将数据放入工作表,排序,然后执行代码。我在问题中添加了更多代码。我似乎能找出你把代码放在哪里使它工作。目前,序列列是N。用于填充代码块的数据来自A、C、F、H、I、K列。很抱歉,有点困惑。