2012-12-27 49 views
1

我懷疑.end(xlDown)有點奇怪。'End(xlDown)'strange strange

Dim rfound As Range 

Set rfound = Columns("B:B").Find(What:=Me.ComboBox1.Value, _ 
LookAt:=xlWhole, SearchOrder:=xlByRows, SearchDirection:=xlNext) 

If ComboBox1.Value <> "" And WorksheetFunction.CountIf(Range("B:B"), _ 
ComboBox1.Value) > 0 And rfound.Offset(0, 1).Value <> "" Then 
rfound.Offset(0, 1).End(xlDown).Offset(1, 0).Value = TextBox1.Value 

CommandButton1_click,代碼將在任何匹配的標準的B列搜索,然後OffSet向右小區提供我的條件都被滿足。但是,它會提示我一條消息Run-time error '1004': Application defined or object-defined error

我不知道問題出在哪裏。爲了說明:

enter image description here

+0

請給我一點時間來考慮答案。謝謝。 –

+0

通過使用.end(xlUp),參考我上面的最後一張圖片,如果我想在'公司A'中插入'產品'和'描述',這是不可實現的。 –

+2

在我們指出你的代碼出了什麼問題後,你編輯了你的問題 - 我們很難猜到你會事先修改。如果你期望持續的幫助,那麼我認爲你對待那些適當幫助你的人是合理的。 – brettdj

回答

9

您當前的代碼

  1. 想必發現B2rfound(注:這將是更好的測試,如果Find與後存在rfound`如果不rfound是Nothing然後)
  2. Then C2 is rfound.Offset(0, 1)
  3. rfound.Offset(0, 1).End(xlDown)查找列C中的最後一個單元格,因爲所有其他單元格都是空白的
  4. rfound.Offset(0, 1).End(xlDown).Offset(1, 0)嘗試在最後一行下面的一行中輸入一個值 - 無法做到。

從下仰望代替,即而非

Then rfound.Offset(0, 1).End(xlDown).Offset(1, 0).Value = TextBox1.Value
使用
Then Cells(Rows.Count, rfound.Offset(0, 1).Column).End(xlUp).Offset(1, 0) = TextBox1.Value

+0

您是否有時間深入研究這個問題?如果你願意,我可以在這裏發佈我的代碼。謝謝。 –

+0

我爲您提供瞭解決方案 - 您嘗試過嗎? – brettdj

+0

是的,我曾經。但是,我的代碼的另一部分將插入另一個新的數據到列B,C和D使用'.end(xlUp)'。 –

1

我的三個美分...

漂亮不是編寫複雜的代碼,但通過容易理解的線條來分解它,以便更容易理解代碼的功能。此外,它可以幫助如果發生錯誤,調試它...

  1. 你已經知道你要寫信給上校ç何必讓它更復雜更通過Offset
  2. 測試是否存在rfound作爲brettdj建議
  3. 使用xlUp查找最後一行。

看到這個例子。 (UNTESTED

Sub Sample() 
    Dim rfound As Range 
    Dim lRow As Long 

    With ThisWorkbook.Sheets("Sheet1") 
     Set rfound = .Columns(2).Find(What:=Me.ComboBox1.Value, _ 
     LookAt:=xlWhole, SearchOrder:=xlByRows, SearchDirection:=xlNext) 

     If Not rfound Is Nothing Then 
      If ComboBox1.Value <> "" And _ 
      WorksheetFunction.CountIf(.Range("B:B"), ComboBox1.Value) > 0 And _ 
      rfound.Offset(, 1).Value <> "" Then 

       '~~> Find the next available row in Col C 
       lRow = .Range("C" & .Rows.Count).End(xlUp).Row + 1 

       '~~> Directly write to the cell 
       .Cells(lRow, 3).Value = TextBox1.Value 
      End If 
     Else 
      MsgBox "Not Found" 
     End If 
    End If 
End Sub 
+0

'lRow = .Range(「C」&.Rows.Count).End(xlUp).Row + 1'將查找該列中空白處的最後一個單元格。我不希望發生這種情況。 –

+0

在這種情況下,您可以使用'xlDown',但要確保您執行了適當的錯誤處理,以檢查您是否尚未達到目前正在發生的行的末尾。 :) –

+0

是的,到最後,我確實設法解決我的問題,這要感謝大家給出的所有想法。再次非常感謝你! –