所以我在我的代码中遇到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,该行中没有设置对象或变量:
当我在循环外复制下面的那两行时,它完美地工作。有人可以告诉我在我的代码中我做错了什么吗?
答案 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