2017-01-11 4 views
0

ich Laufzeitfehler '1004'Excel VBA - Fehler '1004', wenn der Wert in den letzten nicht leeren Zeile einzufügen

Anwendungs ​​definiert oder Objekt definierte Fehler

wenn i‘ m versuche den Wert ab B19 einzugeben.

Unten sind die Code:

Private Sub test() 

If Application.CountIf(Sheets("Sheet1").Columns(2), Range("A5").Value) Then 
    MsgBox "Already taken, try another username" 
Else 
    MsgBox "Done" 
    Sheets("Sheet1").Range("B19" & Rows.Count).End(xlUp).Offset(1, 0) = Range("A5").Value 

End If 

End Sub 

Der Zweck dieses Codes ist Wert von A5 einzufügen nicht leere Zeile ausgehend von B19 dauern.

+1

Ihre Adresse: '("B19" & Rows.Count)' beschließt, 'B191048576', die eine ist illegale Adresse. Daher der Fehler. Die letzte leere Zelle in Spalte B wird von 'cells (rows.Count," B ") zurückgegeben. End (xlup) .offset (1,0)' ** ABER ** Du musst speziell nach 'B19' testen nicht leer, wenn Sie mit 'B19' beginnen wollen –

Antwort

0

Sie könnte dies versuchen:

Private Sub main() 
    With Sheets("Sheet1") 
     With .Range("B19:B" & WorksheetFunction.Max(.Cells(.Rows.Count, 2).End(xlUp).Row, 19)) 
      If Application.CountIf(.Cells, .Parent.Range("A5").Value) > 0 Then 
       MsgBox "Already taken, try another username" 
      Else 
       .Cells(.Rows.Count + IIf(IsEmpty(.Cells(.Rows.Count)), 0, 1)).Value = .Parent.Range("A5").Value 
       MsgBox "Done" 
      End If 
     End With 
    End With 
End Sub 
+0

Sie ein Lebensretter..danke – Jeeva

+0

Sie sind willkommen – user3598756

+0

ich implementieren den Code von ändern Sie es wie folgt: ändern Sie "B19: B" zu "L19: L" und A5 zu B24. Es beginnt jedoch von Zeile 47 an einzugeben. – Jeeva

0

2 Kommentare:

Erstens: CountIf eine Zahl zurückgibt, so, wenn es atleast ein Graf ist, sollten Sie prüfen, ob das Ergebnis> 0 (nicht bei True).

Zweitens: Um in die letzte Zeile mit Daten nach Range ("B19") zu gelangen, müssen Sie .Range("B" & .Rows.Count).End(xlUp).Offset(1, 0) verwenden.

den Code Versuchen Sie unter:

Private Sub test() 

With Sheets("Sheet1") 
    If Application.CountIf(.Columns(2), .Range("A5").Value) > 0 Then 
     MsgBox "Already taken, try another username" 
    Else 
     If .Cells(.Rows.Count, "B").End(xlUp).Row < 19 Then ' <-- check if the last row in Column B is less than 19 
      .Range("B19").Value = .Range("A5").Value 
     Else 
      .Range("B" & .Rows.Count).End(xlUp).Offset(1, 0).Value = .Range("A5").Value 
     End If 

     MsgBox "Done"   
    End If 
End With 

End Sub 
+0

Das wäre falsch, wenn in Spalte B kein Wert vorhanden ist. In diesem Fall möchte das OP, dass der Wert in B19 geschrieben wird. – Vityata

+0

Ich bin mir nicht sicher, ob Sie recht haben, da ich es wahrscheinlich verstanden habe, dass er Daten bis "B19" hat, deshalb möchte er die letzte Zeile mit Daten (nach "B19") finden und "A5" in die die erste leere Zeile darunter (ich könnte mich irren - die PO wird das besser erklären) –

+0

Man kann immer noch von B19 unabhängig davon starten, ob er vorher Daten hat oder nicht. – Vityata

Verwandte Themen