Vba .在一个程序中找到适合我的,但在另一个程序中找不到
你好,我有下面的代码。本质上,它在每个工作表中获取特定范围的唯一值,并将其添加到同一工作表一侧的范围中 .find方法对我来说不像在另一个过程中那样有效,我想解释一下为什么或我做错了什么,或者当以不同的方式编写代码时,代码行为之间的差异。有道理吗Vba .在一个程序中找到适合我的,但在另一个程序中找不到,vba,excel,Vba,Excel,你好,我有下面的代码。本质上,它在每个工作表中获取特定范围的唯一值,并将其添加到同一工作表一侧的范围中 .find方法对我来说不像在另一个过程中那样有效,我想解释一下为什么或我做错了什么,或者当以不同的方式编写代码时,代码行为之间的差异。有道理吗 sub methodtwo() Dim cell As Range Dim strDATE As String Dim datehr As Range For i = 1 To Sheets.Count -
sub methodtwo()
Dim cell As Range
Dim strDATE As String
Dim datehr As Range
For i = 1 To Sheets.Count - 4
Sheets(i).Activate
Set datehr = Sheets(i).Range("H2", Sheets(i).Range("H2").End(xlDown))
For Each cell In datehr
strDATE = cell.Value
Set cell = Sheets(i).Range("L1:L400").Find(What:=strName)
If cell Is Nothing Then
Sheets(i).Range("L1").End(xlDown).Offset(1, 0).Value = cell
End If
Next cell
Next i
End Sub
下面是我以前写过的代码,也是写上面代码的参考。在下面的代码中,find方法可以完美地工作,并向指定的范围添加唯一的值……上面的代码没有
Sub methodone()
Dim sh As Worksheet
Dim r As Long
Dim a As Range
Dim al As Range
Dim strName As String
For Each sh In Worksheets
sh.Activate
sh.Range("K1").Activate
Set al = ActiveSheet.Range("A2:A13000")
For Each a In al
strName = a.Value
Set Cell = ActiveSheet.Range("K1:K400").Find(What:=strName)
If Cell Is Nothing Then
ActiveSheet.Range("K1").End(xlDown).Offset(1, 0).Value = a
End If
Next a
Next sh
End Sub
我希望methodtwo()能做与methodone()完全相同的事情,除了最后4页
问题明显吗?我正在关注细节。尤其是在使用以前编写的代码作为参考时。对于methodone(),我只需将strNAME更改为strDATE,这是将一个过程转换为另一个过程时的一个细节错误。我还将IF语句后面的“cell”改为“strDATE”
方法二似乎在寻找
strName
-这并没有宣布啊哦天哪…我没有把它改成strDATE。非常感谢。我真的应该更加小心。现在还有一个问题。IF语句中的下一行返回错误1004应用程序定义或对象定义的错误sheets(I).range(“L1”).end(xldown).offset(1,0).value=cell
,该错误通过将cell
替换为strDATE
@bezukhove>修复,请用新版本编辑您的帖子并澄清您的问题。你不应该在评论中提出新问题……向模块中添加Option Explicit
有助于捕捉那些狡猾的变量。
sub methodtwo()
Dim cell As Range
Dim strDATE As String
Dim datehr As Range
For i = 1 To Sheets.Count - 4
Sheets(i).Activate
Set datehr = Sheets(i).Range("H2", Sheets(i).Range("H2").End(xlDown))
For Each cell In datehr
strDATE = cell.Value
Set cell = Sheets(i).Range("L1:L400").Find(What:=strDATE)
If cell Is Nothing Then
Sheets(i).Range("L1").End(xlDown).Offset(1, 0).Value = strDATE
End If
Next cell
Next i
end sub