VBA看不到我在循环外创建的对象

时间:2017-09-04 11:30:42

标签: excel vba

所以我在我的代码中遇到FindNext的问题,就像vba一样,我看不到我在循环外创建的对象。

Sub Macro1()

'Dwa skoroszyty
Dim ws1, ws2 As Worksheet
Set ws1 = Sheets("Sheet1")
Set ws2 = Sheets("Wynik")

Dim NaglowekWiersz, NaglowekKolumna As Integer
NaglowekKolumna = 1
NaglowekWiersz = 1
Worksheets("Sheet1").Activate

Set LpDoZnalezienia = ws1.Range("A:A").Find("lp.", LookAt:=xlPart)
Set RazemDoZnalezienia = ws1.Range("A:A").Find("Razem", LookAt:=xlWhole)

'Petla do szukania pracowników
For a = 1 To 3

If (a > 1) Then
    Set LpDoZnalezienia = ws1.Range("A:A").FindNext(LpDoZnalezienia).Offset(1, 0)
    Set RazemDoZnalezienia = ws1.Range("A:A").FindNext(RazemDoZnalezienia)
End If

'Znalezienie danego pracownika
Set Pracownik = ws1.Range(LpDoZnalezienia, RazemDoZnalezienia).Resize(, 12)
Worksheets("Wynik").Activate

For b = 1 To 35
'Dana Wartość z arkusza wynik aka nagłówek
Dim szukanaWartosc As String
szukanaWartosc = ws2.Cells(1, NaglowekKolumna).Value

'Znaleziona wartosc w arkuszu Sheet1
Worksheets("Sheet1").Activate
Set WartoscDoZnalezienia = Pracownik.Find(szukanaWartosc, LookAt:=xlWhole)
If WartoscDoZnalezienia Is Nothing Then
    GoTo Line
Else
    Set Znalezione = WartoscDoZnalezienia.Offset(0, 2)
End If
Worksheets("Wynik").Activate
ws2.Cells(NaglowekWiersz + 1, NaglowekKolumna) = Znalezione.Value

Line:
'Przesuniecie naglowka o 1 w arkuszu wynik aby szukalo kolejnej wartości
NaglowekKolumna = NaglowekKolumna + 1
Next b
NaglowekKolumna = a
NaglowekWiersz = NaglowekWiersz + 1
Next a

End Sub

当我尝试使用先前声明的FindNext查找它给我运行时错误91,该行中没有设置对象或变量:

代码转到findNext

时出错

Error when the code go to findNext

当我在循环外复制下面的那两行时,它完美地工作。有人可以告诉我在我的代码中我做错了什么吗?

1 个答案:

答案 0 :(得分:2)

Find()FindNext()有点棘手,文档有点令人困惑。

用于.Find()的{​​{1}}存储在.FindNext中,而不是ws1.Range("A:A")中。简而言之,您需要在范围内保留正在操作查找的LpDoZnalezienia实例。

因此,问题的解决方案将是:

Range

值得注意的是:如果您只有1或2次出现“lp”。或者“Razem”你将第二次获得第一个Range,没有内部处理来检查With ws1.Range("A:A") Set LpDoZnalezienia = .Find("lp.", LookAt:=xlPart) If Not LpDoZnalezienia Is Nothing Then For a = 1 To 3 If (a > 1) Then Set LpDoZnalezienia = .FindNext(LpDoZnalezienia).Offset(1, 0) End If End If End With With ws1.Range("A:A") Set RazemDoZnalezienia = .Find("Razem", LookAt:=xlWhole) If Not RazemDoZnalezienia Is Nothing Then For a = 1 To 3 If (a > 1) Then Set RazemDoZnalezienia = .FindNext(RazemDoZnalezienia) End If End If End With 是否已经给你一个特定的.FindNext()。你必须自己编写代码..例如:

Range