运行 时间错误 5 和一般 copy/paste for 循环

run time error 5 and general copy/paste for loop

我是 VBA 的新手,但对写作 python 比较满意。声明变量在两者之间有点不同,我相信这是我的大部分挣扎所在。

这是一个两部分的头痛:

1) 第一个令人头疼的问题是当我尝试 运行 下面的代码部分时,我得到 "Run-time error'5': Invalid Procedure call or argument"

cll.Offset(0, 1).Copy (Worksheets("Sheet7").cells(Rows.Count & "L").End(xlUp).Row)

我尝试将 "copy" 右侧的所有内容设置为变量,然后调用该变量,但我仍然收到相同的错误。我查看了许多关于引用列中最后一个空白单元格的教程和指南,我的代码与我发现的相匹配,尽管错误说明并非如此。

2.) 我正在处理的代码的大图是一个下拉列表(仅用于引用 50 个州),一个引用该列表中的州的代码,一个 counta工作表功能,以及一个单独的工作表,其中包含每个州的每个县。

我想 select 下拉列表中的一个州,将特定州的县从单独的工作表 ("Fips_Reference") 复制到我的活动表 ("Sheet7")。从那里我需要它来引用我的 counta (pcount) 并确定有多少单元格实际包含数据。例如,如果 counta = 2,那么我需要将每个县粘贴两次,以便该列从上到下读取 "County1" "County1" "County2" "County2" 等等。几天来,我一直在努力尝试嵌套循环和 if 语句,但一直被难倒。

Sub fipsloop2()

pcount = WorksheetFunction.CountA(Worksheets("StateSource").Range("b3:b8"))


Dim cll As Range
Dim rng As Range
Dim fip As Range
Dim state As Range

Set rng = Worksheets("FIPS_Reference").Range("c2:c3280")
Set fip = Worksheets("FIPS_Reference").Range("d2")
Set state = Worksheets("Sheet7").Range("C1")


For Each cll In rng
    If cll = state Then
        cll.Offset(0, 1).Copy (Worksheets("Sheet7").cells(Rows.Count & "L").End(xlUp).Row)
        ActiveCell.Offset(1, 0).Select
        'If pcount > 1 Then
    End If

Next


End Sub

我安排了 for...each 循环来查看包含州名称的一系列单元格,然后查看州名称是否与列表中的州匹配。如果匹配,它将向右偏移并将县值复制到我的活动工作簿中的一个单元格。我已经尝试了 do while 和 for each 以及 if 循环和逻辑的组合,但我相信这是我对 VBA 的天真伤害了我。

任何帮助都将非常有用,在此先感谢您!

我找到了上面所有问题的答案。我是天才!如果有人在类似情况下需要帮助,请参考下面的代码和这个 link ()

Sub fipsloop2()

pcount = WorksheetFunction.CountA(Worksheets("StateSource").Range("b3:b8"))

Dim cll As Range
Dim rng As Range
Dim fip As Range
Dim state As Range
Dim x As Integer
Dim i As Integer


Set rng = Worksheets("FIPS_Reference").Range("c2:c3280")
Set fip = Worksheets("FIPS_Reference").Range("d2")
Set state = Worksheets("Sheet7").Range("C1")

x = 3

For Each cll In rng
    If cll = state Then
        For i = 1 To pcount
            cll.Offset(0, 1).Copy (Worksheets("Sheet7").cells(x, 12))
            x = x + 1
        Next i
    End If
Next cll

End Sub