2015-06-23 51 views
0

你好,我有下面的代碼。本質上,它在每個工作表中抓取特定範圍的唯一值並將其添加到同一工作表一側的範圍內。.find適用於我的一個程序,但不是另一個

.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張。

問題是否明顯?我正在關注細節......尤其是在使用以前編寫的代碼作爲參考時。

+0

methodtwo似乎在尋找'strName'後 - 這不宣 – natancodes

+1

啊哦,親愛的...我沒有將其更改爲strDATE。非常感謝。我真的應該更加小心。現在還有另一個問題。 IF語句中的以下行返回錯誤1004應用程序定義或對象定義的錯誤'sheets(I).range(「L1」).end(xldown).offset(1,0).value = cell'這是通過替換'細胞'與'strDATE' – BezukhovPierre

+0

@BezukhovPierre編輯您的文章與新問題,並澄清您的問題。你不應該在評論中提出新的問題...... – Chrismas007

回答

0

for methodone()我只是不得不將strNAME更改爲strDATE,當將一個過程轉換爲另一個過程時,這是一個詳細錯誤。我也改變了「細胞」的IF語句「strDATE」

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 
+0

在你的模塊中加入Option Explicit可以幫助捕捉那些鬼鬼祟祟的變量。 – natancodes

相關問題