1

我对vba比较陌生。我很久以前就使用过 VB,所以我从那次经历中获得了很多信息。虽然现在我面临着更艰巨的任务,但我不知道该怎么做。

我有一个数据表,其中包含 E 列软件版本信息(即“3.1.1”、“3.1.2”等)。我创建了一个 for 循环,通过 E 进行搜索。在这个 for 中有几个这样的 if 语句:

If Cells(r, Columns("E").Column).Value = "3.1.2" Then 'find criteria

            'Copy the current row
            Rows(r).Select
            Selection.Copy

            'Switch to the sprint where you want to paste it & paste
            Sheets("Sprint 2").Select
            Rows(sprint2).Select
            ActiveSheet.Paste

            sprint2 = sprint2 + 1 'next row

            'Switch back to backlog & continue to search for criteria
            Sheets("Backlog").Select
ElseIf...

这对我来说很好,除了我需要在运行宏之前创建工作表。我想做的是:

  1. 搜索 E 列
  2. 用列 E* 中的所有唯一值填充数组[编辑]
  3. 为数组中的每个值创建一个工作表

我很想听听你们的想法。

4

1 回答 1

1

也许这有帮助:

Sub ColumnE()
Dim colE As Long, r As Long, c As Object, exists As Boolean
Dim values As Collection, i As Long
Set values = New Collection
colE = Columns("E").Column
r = Cells(Rows.Count, colE).End(xlUp).Row
For i = 1 To r ' step 1: loop through column E
    exists = False
    For Each c In values ' step 2: look in collection if the element was already inserted
        If c = Cells(i, colE) Then
            exists = True
            Exit For
        End If
    Next c
    If Not exists Then values.Add Cells(i, colE)
Next i
For Each c In values ' step 3: add a sheet for every value in collection
    Worksheets.Add  ' WARNING: you should test, if there already is a sheet with that name
    ActiveSheet.name = c
Next c
End Sub

我喜欢在 vba 中使用集合而不是数组,因为我可以动态添加新元素而无需调整大小。(但要视情况而定……)

于 2013-06-18T11:34:41.623 回答