2011-02-23 53 views
0

我正在使用搜索功能來比較數據,以查看工作表中是否存在標識符,但是如果它的數字不通過VB腳本找到它,如果我手動找到它,它會發現它很好..這是令人難以置信的。Excel VB搜索功能找不到號碼

以下代碼位於循環中,該循環覆蓋一張工作表中的每個SKU ID以查看它是否存在於另一張工作表中。 (如果有更好的方法可以讓我知道) 如果沒有找到sku,它會將它添加到表單中,因爲它通過vb腳本找不到它,即使它已經存在存在...讓我知道如果這沒有意義,我會試着重申。一個SKU總是獨一無二的

Sheets(productsheet).Select 
     On Error Resume Next 
     Cells.Find(What:=sku, After:=ActiveCell, LookIn:=xlFormulas, LookAt _ 
     :=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:= _ 
     False, SearchFormat:=False).Activate 

     If Err.Number <> 0 Then 
      newSKU = newSKU + 1 
      Range("A" & CurrentRow).Select 
      ActiveCell.Value = trimmedSku 
      ActiveCell.Font.Color = red 
      With Selection 
       .HorizontalAlignment = xlLeft 
       .VerticalAlignment = xlTop 
       .WrapText = True 
       .Orientation = 0 
       .AddIndent = False 
       .IndentLevel = 0 
       .ShrinkToFit = False 
       .ReadingOrder = xlContext 
       .MergeCells = False 
      End With 

      Range("B" & CurrentRow).Select 
      ActiveCell.Value = skudescription 
      With Selection 
       .HorizontalAlignment = xlLeft 
       .VerticalAlignment = xlTop 
       .WrapText = True 
       .Orientation = 0 
       .AddIndent = False 
       .IndentLevel = 0 
       .ShrinkToFit = False 
       .ReadingOrder = xlContext 
       .MergeCells = False 
      End With 

      Range("D" & CurrentRow).Select 
      ActiveCell.Value = sku 
      With Selection 
       .HorizontalAlignment = xlLeft 
       .VerticalAlignment = xlTop 
       .WrapText = True 
       .Orientation = 0 
       .AddIndent = False 
       .IndentLevel = 0 
       .ShrinkToFit = False 
       .ReadingOrder = xlContext 
       .MergeCells = False 
      End With 

      Range("I" & CurrentRow).Select 
      ActiveCell.Value = 1 

      Range("K" & CurrentRow).Select 
      ActiveCell.Value = cost 

      Range("L" & CurrentRow).Select 
      ActiveCell.Value = price 

      Range("M" & CurrentRow).Select 
      ActiveCell.Value = price 

      Range("O" & CurrentRow).Select 
      ActiveCell.Value = "Y" 

      Range("P" & CurrentRow).Select 
      ActiveCell.Value = "N" 

      Range("Q" & CurrentRow).Select 
      ActiveCell.Value = "Y" 

      Range("AI" & CurrentRow).Select 
      ActiveCell.Value = 1 

      CurrentRow = CurrentRow + 1 
     Else 
      'Skip because it was found 
     End If 
+0

工作表是否處於活動狀態?還是剛選? – 2011-02-23 15:19:35

+0

。選擇激活它,不是?我也完成了。激活相同的結果。 – Tyler 2011-02-23 15:41:59

回答

0

沒有必要選擇或激活任何東西來做你想做的。由於您的一些查找參數,您可能無法找到該值,但我會首先重寫代碼以避免更改工作表。類似於

Dim sh As Worksheet 
Dim rFound As Range 

Set sh = ThisWorkbook.Sheets("productsheet") 

Set rFound = sh.Cells.Find(sku, , xlValues, xlPart) 

If rFound Is Nothing Then 
    Set rNext = sh.Cells(sh.Rows.Count, 1).End(xlUp).Offset(1, 0) 
    rNext.Value = trimmedsku 
    rNext.Offset(0, 1).Value = skudescription 
    rNext.Offset(0, 3).Value = sku 
    rNext.Offset(0, 8).Value = 1 
    rNext.Offset(0, 10).Value = cost 
    rNext.Offset(0, 11).Value = price 
    rNext.Offset(0, 12).Value = price 
    rNext.Offset(0, 14).Value = "Y" 
    rNext.Offset(0, 15).Value = "N" 
    rNext.Offset(0, 16).Value = "Y" 
    rNext.Offset(0, 34).Value = 1 
End If 

如果rFound出現Nothing(sku未找到)並且它不應該是,那麼請確保Find的參數是正確的。你想看看xlFormulas還是xlValues?整體或部分?

我在查找參數中沒有看到任何會使其更具限制性的東西,所以我無法給你任何關於要更改哪些參數的具體建議。也許你可以做一個新的測試程序,類似於我發佈的內容,並查看是否不改變工作表的幫助。

+0

我的主要問題是我必須在SKU中修剪()多餘的空格,以便生成其中一個報告,但無論如何,這看起來都是更好的方法。 – Tyler 2011-02-24 20:49:27