Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
996to1000
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

Eintrag eines neuen Datensatzes über eine UF

Eintrag eines neuen Datensatzes über eine UF
07.08.2008 12:41:41
Josef
Hallo!
Ich wollte mit folgendem Code einen neuen Datensatz in ein Tabellenblatt über eine Userform eintragen lassen. Das funktioniert aber deswegen nicht weil in jeder Spalte die nächste freie Zelle herangezogen wird.
Der Eintrag eines Datensatzes sollte jedoch in der selben Zeile erfolgen. wie würde hier bitte eine VBA lösung aussehen, wenn der Eintrag eines neuen Datensatzes in Abhängigkeit einer neuen Datensatznummer in der nächsten freien Zelle der Spalte A in derselben Zeile eingetragen werden soll?
Danke
Josef
On Error Resume Next
Dim wks As Worksheet
Set wks = Workbooks("Stellenpläne.xls").Worksheets("Tabelle1")
'hier wird meldung erzeugt ob daten geändert werden sollen
Dim mldg, stil, titel, grc
mldg = "Neuen Datensatz wirklich speichern?"
stil = vbYesNo + vbCritical + vbDefaultButton2
titel = "Frage ?"
grc = MsgBox(mldg, stil, titel)
If grc = vbYes Then
Else
Exit Sub
End If
wks.Range("a65536").End(xlUp).Offset(1, 0).Value = TextBox64.Text 'Abschnitt laufende Nummer
wks.Range("c65536").End(xlUp).Offset(1, 0).Value = ComboBox37.Text 'Abschnitt Text
wks.Range("d65536").End(xlUp).Offset(1, 0).Value = TextBox49.Text 'Kapitel laufende Nummer
wks.Range("e65536").End(xlUp).Offset(1, 0).Value = TextBox38.Text 'Kapitel Text
wks.Range("f65536").End(xlUp).Offset(1, 0).Value = TextBox63.Text 'Subkapitel laufende Nummer
wks.Range("g65536").End(xlUp).Offset(1, 0).Value = TextBox62.Text 'Subkapitel Text
wks.Range("h65536").End(xlUp).Offset(1, 0).Value = TextBox61.Text 'Kurzposition
wks.Range("i65536").End(xlUp).Offset(1, 0).Value = TextBox40.Text 'Indikation
wks.Range("j65536").End(xlUp).Offset(1, 0).Value = TextBox41.Text 'Info
wks.Range("k65536").End(xlUp).Offset(1, 0).Value = TextBox42.Text 'VO_BEST
wks.Range("l65536").End(xlUp).Offset(1, 0).Value = TextBox51.Text 'Beschreibung
wks.Range("m65536").End(xlUp).Offset(1, 0).Value = TextBox43.Text 'Rehab
wks.Range("n65536").End(xlUp).Offset(1, 0).Value = TextBox60.Text 'Artnr
wks.Range("o65536").End(xlUp).Offset(1, 0).Value = ComboBox38.Text 'STKANZ
wks.Range("p65536").End(xlUp).Offset(1, 0).Value = TextBox45.Text 'Funktion
wks.Range("q65536").End(xlUp).Offset(1, 0).Value = TextBox44.Text 'Wirkungsweise
wks.Range("r65536").End(xlUp).Offset(1, 0).Value = TextBox47.Text 'Erklärung
wks.Range("s65536").End(xlUp).Offset(1, 0).Value = TextBox46.Text 'Ausführung
wks.Range("t65536").End(xlUp).Offset(1, 0).Value = TextBox56.Text 'Erzeuger
wks.Range("u65536").End(xlUp).Offset(1, 0).Value = TextBox50.Text 'Körperregion
wks.Range("v65536").End(xlUp).Offset(1, 0).Value = ComboBox39.Text 'Laborparameter
wks.Range("w65536").End(xlUp).Offset(1, 0).Value = TextBox53.Text 'Leihgebühr
wks.Range("x65536").End(xlUp).Offset(1, 0).Value = TextBox54.Text 'ÜGR
wks.Range("y65536").End(xlUp).Offset(1, 0).Value = TextBox55.Text 'HGR
wks.Range("z65536").End(xlUp).Offset(1, 0).Value = TextBox52.Text 'UGR
wks.Range("aa65536").End(xlUp).Offset(1, 0).Value = TextBox53.Text 'Statistik
wks.Range("ab65536").End(xlUp).Offset(1, 0).Value = TextBox58.Text 'Statistik Text
wks.Range("ac65536").End(xlUp).Offset(1, 0).Value = TextBox59.Text 'FOKO Bereich
End Sub

9
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Eintrag eines neuen Datensatzes über eine UF
07.08.2008 12:48:28
Beverly
Hi Josef,
nach diesem Prinzip:

Dim loZeile As Long
loZeile = wks.Range("a65536").End(xlUp).Offset(1, 0)
wks.Range("A" & loZeile) = TextBox64.Text 'Abschnitt laufende Nummer
wks.Range("C" & loZeile) = ComboBox37.Text 'Abschnitt Text
wks.Range("D" & loZeile) = TextBox49.Text 'Kapitel laufende Nummer




FEHLER!
07.08.2008 12:57:00
Rudi
Hallo Karin,
das ergibt aber ein Range-Objekt:

loZeile = wks.Range("a65536").End(xlUp).Offset(1, 0)


richtig ist
loZeile = wks.Range("a65536").End(xlUp).Offset(1, 0).Row
Gruß
Rudi

Anzeige
AW:
07.08.2008 13:24:45
Beverly
Hi Rudi,
das ist richtig, man sollte das Ergebnis prüfen, bevor man einen Code postet. Aber ich würde sowieso generell folgenden Code für die Ermittlung der ersten freien Zelle nach der letzten belegten verwenden, weil er 1. unabhängig von der Excelversion ist und 2. kein falsches Ergebnis liefert wenn die letzte Zelle belegt ist:

loZeile = IIf(IsEmpty(Cells(Rows.Count, 1)), Cells(Rows.Count, 1).End(xlUp).Row, Rows.Count) + 1




Anzeige
AW: AW:
07.08.2008 13:29:00
Rudi
Hallo Karin,

man sollte das Ergebnis prüfen, bevor man einen Code postet


dann mach das auch.


loZeile = IIf(IsEmpty(Cells(Rows.Count, 1)), Cells(Rows.Count, 1).End(xlUp).Row, Rows.Count) + 1


ergibt Rows.Count+1, falls die letzte Zelle nicht leer ist.
Richtig ist


loZeile = IIf(IsEmpty(Cells(Rows.Count, 1)), Cells(Rows.Count, 1).End(xlUp).Row + 1, Rows.Count)


Gruß
Rudi

AW: AW:
07.08.2008 14:33:00
Beverly
Hi Rudi,
klar doch, habe ich - noch bin ich in der Lage, meine eigenen Gedanken ausreichend gut nachvollziehen. Es ging hierbei nur ums Prinzip, die Ermittlung der letzten belegten Zelle einer Spalte von der Version unabhängig zu machen (und dann erst die nächste freie zu finden). Aber für den konkreten Fall der Ermittlung der nächstfolgenden Zeile mit meinem Code will ich ihn gerne noch erweitern, sodass er auch auf die Fragestellung von Josef anwendbar ist:

Dim loZeile As Long
loZeile = IIf(IsEmpty(Cells(Rows.Count, 1)), Cells(Rows.Count, 1).End(xlUp).Row, Rows.Count) _
+ 1
If loZeile > Rows.Count Then MsgBox "Die letzte Zelle in Spalte A ist schon belegt"


Wenn wir schon das konkrete Beispiel von Josef als Grundlage der Diskussion nehmen, dann solltest du beachten, dass mit deinem Code die letzte Zelle (wenn sie erreicht wurde) dann ständig überschrieben würde, ohne dass der Bearbeiter das merkt. Also wäre da auch eine Prüfung (welcher Art auch immer) erforderlich.



Anzeige
AW: AW:
07.08.2008 14:59:43
Rudi
Hallo Karin,
mit der ergänzenden Prüfung ist dein Code absolut sinnvoll.

dann ständig überschrieben würde


das weiß ich auch.
Ergänzend noch:
Range("A" &loZeile) sieht zwar hübsch aus, ist aber nicht sinnvoll, da es erst in Zeile/ Spalte interpretiert werden muss und somit gegenüber Cells(loZeile, 1) relativ langsam ist. Macht im konkreten Fall aber allenfalls Mikrosekunden aus.
Bei 100000 Zugriffen merkt man/frau es aber deutlich.
Gruß
Rudi

AW: AW:
07.08.2008 15:27:48
Beverly
Hi Rudi,
danke für die Ergänzung:

Range("A" &loZeile) sieht zwar hübsch aus, ist aber nicht sinnvoll, da es erst in Zeile/ Spalte
interpretiert werden muss und somit gegenüber Cells(loZeile, 1) relativ langsam ist.


Das ist vollkommen richtig. Allerdings ist für den Fragesteller (kaum VBA-Kenntnisse) die Range-Schreibweise erst einmal verständlicher und besser nachvollziehbar, wobei man sich auf jeden Fall mit der Cells(Zeile, Spalte)-Schreibweise schon frühzeitig anfreunden sollte, um insbesondere bei großen Datenmengen keine Performance-Probleme zu bekommen.



Anzeige
AW: Eintrag eines neuen Datensatzes über eine UF
07.08.2008 13:38:51
Josef
Hallo Beverly!
Danke für Deine Antwort und Deine Hilfe.
Josef

AW: Eintrag eines neuen Datensatzes über eine UF
07.08.2008 12:52:00
Rudi
Hallo,

With wks.Range("a65536").End(xlUp).Offset(1, 0)
.Offset(0, 0) = TextBox64 'Abschnitt laufende Nummer
.Offset(0, 2) = ComboBox37 'Abschnitt Text
.Offset(0, 3) = TextBox49 'Kapitel laufende Nummer
.Offset(0, 4) = TextBox38 'Kapitel Text
'weiter so bis
.Offset(0, 28) = TextBox59 'FOKO Bereich
end with


Gruß
Rudi

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige