2017-05-22 1 views
0

Okay, ich weiß, es gibt mehrere Fragen ähnlich, aber zumindest von dem, was ich gefunden habe, ist mein Problem anders, also bitte mit mir ertragen. Ich erstelle ein Benutzerformular, mit dem Benutzer Daten in ein Tracking-Blatt eingeben können, aber es gibt bestimmte Szenarios, bei denen nur ein Teil der Daten gleichzeitig übermittelt wird, wodurch "Löcher" im Tracking-Blatt entstehen. Mein Ziel ist es, diese "Löcher" mit einem Punkt zu füllen, so dass relevante Daten in derselben Zeile zusammenbleiben anstatt in diese Löcher zu gelangen.Suchen und Ersetzen leere Zellen in einem dynamischen Bereich nach dem Übertragen von Daten VBA

Sheets("Tracker").Activate 
Worksheets("Tracker").Columns("A:J").Replace What:="", Replacement:=".", _ 
    SearchOrder:=xlByColumns, MatchCase:=False 

Ich weiß, ich im Wesentlichen excel sagee Spalten A bis J mit einer Zeit zu füllen, so meine Frage ist, gibt es einen einfacheren Weg, dies zu tun, oder eine Art und Weise zu geben, dass ich nur die letzten Zeile um die Perioden zu enthalten?

Aktualisierung: Dies ist der Code, den ich verwende, um die nächste verfügbare Zeile im Tracker für neue Daten zu finden. Wenn Teile der vorherigen Zeile fehlen, füllt das Makro diese unbenutzten Zellen mit den Daten der nächsten Zeile.

Set ws = Sheets("Tracker") Sheets("Tracker").Select 
ws.Range("E" & LastRow).Value = job_txtb.Text  
'Finds the last blank row 
LastRow = ws.Range("A" & ws.Rows.Count).End(xlUp).Row + 1 
'Adds the Job name Code into Col E & Last Blank Row 
+0

Wie werden irrelevante Daten in leere Zellen übertragen? (Löcher?) Werden die Daten aus der Reihe darunter irgendwie nach oben bewegt? Gibt es einen anderen Code, der das tut? –

+0

Funktioniert die zuletzt verwendete Zeile + 1 - oder befinden sich verschiedene leere Zeilen innerhalb des Blattes? Mit "Übertragen" meinen Sie auch die Übertragung der Daten aus dem Benutzerformular in die Tabelle? –

+0

Zuletzt verwendete Zeile +1 funktioniert in einem Ausmaß, aber zumindest so, wie es mir erscheint, wenn sie in Spalten erscheint. Wenn also eine leere Zelle in einer Zeile ist, füllt sie diese Zelle mit den Daten der nächsten Zeile Säule. Ja, die Übertragung bezieht sich auch auf die Übertragung der Daten vom Benutzerformular in das Arbeitsblatt. – accortdr

Antwort

0

Im Folgenden erhalten Sie die erste nicht verwendete Zeile. Ich verstehe nicht, warum Zeiten notwendig sind.

With ActiveSheet 
    On Error Resume Next 
    lastRow = .Cells.Find("*", .Cells(.Cells.Count), xlFormulas, _ 
    xlWhole, xlByRows, xlNext).Row 
    If Err <> 0 Then lastRow = 0 
End With 
firstUnusedRow = lastRow + 1 

Range("A" & firstUnusedRow).Value = Textbox1.Value 
Range("B" & firstUnusedRow).Value = Textbox2.Value 
Range("C" & firstUnusedRow).Value = Textbox3.Value 
'etc. 
'etc.,, 
+0

Ihr Code funktioniert gut, aber ich stoße auf ein Problem, wo nach der ersten Zeile im Blatt und ich gehe in Zeile 2, ersetzt es nur Zeile 2 statt eine Zeile nach unten, sondern nur wenn ich einen Teil der Daten übertragen. Deshalb habe ich versucht, leere Punkte mit einem Punkt zu füllen, so dass das Makro erkannte, dass die gesamte vorherige Zeile voll war, auch wenn es nur die teilweise Datenübertragung war. – accortdr

+0

OK, das ist jenseits dessen, was ich Ihnen helfen kann, ohne zu wissen, wie Ihre Benutzerform Teildaten in eine Reihe bringt. Aber die obige Lastrow-Methode gibt Ihnen die letzte verwendete Zeile auf einem Blatt, obwohl es nur eine Zelle oder tausend verwendet. Mein Rat ist, jede Zeile als einen einzigen Datensatz in einer Datenbank zu betrachten. Geben Sie dem Benutzer ein Listenfeld auf dem Formular mit allen Schlüsselkennungen des Datensatzes. Wenn der Benutzer also eine bestimmte Zeile ändern oder bearbeiten möchte, kann er dies einfach aus der Listbox auswählen. –

+0

Ich glaube, ich habe es bekommen, vielen Dank für deine Hilfe! Sehr geschätzt – accortdr

Verwandte Themen