创建一个循环,将特定范围内的值与连续的contidions复制到另一个工作表

时间:2017-12-14 13:26:58

标签: excel vba excel-vba

我有一个名为“2017年时间报告”的工作簿,其中包含12个工作表(每个工作表都有一年中每个月的名称 - 从“1月”到“12月”)和一个名为“ListFunc”的支持表。在此支持表中,我注册了有关我的同事的基本信息(从第2行开始),如下所示:

a)在第1栏中,工人的编号(变量“NFunc”); b)在第二列中,工人的名字(变量“名称”); c)在第3列中,工人的扇区(变量“CodSector”) - 从S1到S7;

我打算创建一个程序,随后搜索每个扇区代码并且(因为每个扇区有多个工作者),它会将工作者的编号和名称(与每个扇区代码相关联)复制到任何给定的月份工作表。它将类似于:“搜索扇区S1,并为每个条目复制工人的编号和名称”然后“搜索扇区S2,并为每个条目复制工人的编号和名称”,依此类推,直到我达到部门S7。

我尝试稍微调查并遇到了几个解决方案,这些解决方案允许我安装一个ALMOST工作得很好的程序。它如下(现在,我只是定义变量“CodSector”,因为它是我在这段代码中唯一需要的那个):

    Sub test()

    Application.Workbooks("2017 Time Reports").Activate

    Dim CodSector As Range
    Dim copyRange As Range
    Dim firstAddress As String
    Dim i As Integer
    Dim Row As Integer
    Row = 3

    Set CodSector = Worksheets("ListFunc").Range(Range("C1"), Range("C" & 
    Rows.Count))
    'So that, if I add a new worker, it will be considered the next time I 
    copy the range for another monthly sheet

    Dim ws, ws1 As Variant
    Set ws = Worksheets("ListFunc")
    Set ws1 = Worksheets(InputBox("Insert month in full"))

    For i = 1 To 7
        Set copyRange = CodSector.Find("S" & i, , , xlPart)

        If Not copyRange Is Nothing Then
            firstAddress = copyRange.Address
            Do
                ws1.Range(Cells(Row, 3), Cells(Row, 4)).Value = 
    Intersect(copyRange.EntireRow, ws.Columns("A:B")).Value
                'So that the result of the intersection in ws (worksheet 
    "ListFunc") is pasted in the given range of ws1 (worksheet "[Month of 
    the year]")
            Row = Row + 1
                Set copyRange = CodSector.FindNext(copyRange)

            Loop While copyRange.Address <> firstAddress
        End If
    Next i

    ws1.Activate

    End Sub

我的问题如下:在表达式ws1.Range(Cells(Row, 3), Cells(Row, 4)).Value = Intersect(copyRange.EntireRow, ws.Columns("A:B")).Value中 - 如果我更改“ws”的开头“ws1”(这意味着“ListFunc”工作表中交集的结果将被粘贴到相同的工作表),代码运行完美没有任何问题 - 但显然这不是我想要的。就像现在一样,它一直突出显示这一行并给我以下错误:

  

运行时错误'1004':应用程序定义的错误或对象定义的错误。

如果有一个比我更专业的人找到了为什么这会一直给出这个错误并帮助我解决它,那将非常感激!

1 个答案:

答案 0 :(得分:1)

完全限定您的通用单元格引用,如下所示:

ws1.Range(ws1.Cells(Row, 3)

如果没有它,它会假定ActiveSheet会导致问题。