Vba .在一个程序中找到适合我的,但在另一个程序中找不到

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 -

你好,我有下面的代码。本质上,它在每个工作表中获取特定范围的唯一值,并将其添加到同一工作表一侧的范围中

.find方法对我来说不像在另一个过程中那样有效,我想解释一下为什么或我做错了什么,或者当以不同的方式编写代码时,代码行为之间的差异。有道理吗

    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