Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1552to1556
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
Übertrag aus UF-TextBox in Tabelle
14.04.2017 18:41:52
Daniel
Hi
Ich habe, wie im Betreff angekündigt, eine Frage betreffs des Übertrags von TextBoxen in eine Tabelle.
(HG: In den letzten 3 Jahren habe ich mich quasi nicht mehr mit Excel beschäftigt...was sich jetzt rächt.)
Bisher habe ich es immer auf diese Weise gelöst:

With ActiveSheet
.Cells(.Cells(Rows.Count, 1).End(xlUp).Row + 1, 1).Activate
ActiveCell = TextBox1
ActiveCell.Offset(rowoffset:=0, columnoffset:=1).Activate
ActiveCell = TextBox2
End With

was ja auch grundsätzlich immer funktioniert - das Arbeitsblatt ist ohnehin aktiviert und von daher stellte das nie ein Problem dar.
Jetzt ist aber so, dass ich keine 10 TextBoxen mehr habe - sondern 200.
Und die sollen alle nach diesem Schema eingetragen werden...
Bedeutet:
Jeweils 5 gehören zusammen.
Also:
Es ist eine UF mit 200 TextBoxen, angeordnet in Zeilen zu je 5 TextBoxen.
In der Tabelle soll es auch genau so übertragen werden - 5 Zellen nebeneinander, nächste Zeile und nächsten 5 direkt unterhalb der ersten 5.
Mit "meiner" Methode würde ich das so machen:

With ActiveSheet
.Cells(.Cells(Rows.Count, 2).End(xlUp).Row + 1, 2).Activate
ActiveCell = TextBox3
ActiveCell.Offset(rowoffset:=0, columnoffset:=1).Activate
ActiveCell = TextBox4
ActiveCell.Offset(rowoffset:=0, columnoffset:=1).Activate
ActiveCell = TextBox5
ActiveCell.Offset(rowoffset:=0, columnoffset:=1).Activate
ActiveCell = TextBox6
ActiveCell.Offset(rowoffset:=0, columnoffset:=1).Activate
ActiveCell = TextBox7
ActiveCell.Offset(rowoffset:=1, columnoffset:=-4).Activate
ActiveCell = TextBox8
ActiveCell.Offset(rowoffset:=0, columnoffset:=1).Activate
ActiveCell = TextBox9
ActiveCell.Offset(rowoffset:=0, columnoffset:=1).Activate
ActiveCell = TextBox10
ActiveCell.Offset(rowoffset:=0, columnoffset:=1).Activate
ActiveCell = TextBox11
ActiveCell.Offset(rowoffset:=0, columnoffset:=1).Activate
ActiveCell = TextBox12
End With

bis ich die TextBox200 erreicht habe...
Aber das erscheint mir ein gewaltiger Quatsch.
Mir will aber ums verrecken nichts einfallen wie ich das anders machen könnte...
Hat jemand eine Idee?

8
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Übertrag aus UF-TextBox in Tabelle
14.04.2017 18:52:00
Matthias
Moin! Also ganz auf die schnelle und ungetestet würde ich es so machen. Solle ab Spalte B eintragen. Dort bei Spalte und Zeile sowie dem Userformnamen ggf. noch anpassen. Einfach malprobieren. VG

Start = ActiveSheet.Cells(Rows.Count, 2).End(xlUp).Row + 1
aktbox = 1 'zum duchzählen deiner Textboxen
For zeile = Start To Start + 39
For spalte = 2 To 6
ActiveSheet.Cells(zeile, spalte) = userform1.Controls("TextBox" & aktbox)
aktbox = aktbox + 1
Next spalte
Next zeile

AW: Übertrag aus UF-TextBox in Tabelle
14.04.2017 19:56:21
Daniel
Hallo Matthias
Danke für deine schnelle Antwort.
Ich hab das jetzt grad versucht - und festgestellt das es nicht geht...ich hab, denke ich, irgendeine fehlerhafte Variable.
Aber das ist eigentlich auch nicht weiter schlimm - weil ich grad auf nen anderen Ansatz gekommen bin.
Und zwar:
Es beginnt IMMER in Zeile 14.
Und jede dieser TextBoxen muss, beim aktivieren der UF, alle Inhalte der Zellen in eben dieser Reihenfolge einlesen.
Ich dachte mir also...ich mach es so:
Dim spalte As Integer
For spalte = 3 To 150
ActiveSheet.Cells(14, spalte - 1) = Me.Controls("TextBox" & CStr(spalte)).Text
Next spalte
(3, weil das die erste TextBox ist die übertragen wird und 150 hab ich mal einfach so genommen.)
Zeile 14 ist fix.
Das klappt auch alles...wenn ich es in einer Zeile haben wollen würde...
Gibt es eine Möglichkeit nach Spalte 6:
- eine Zeile nach unten
- in Spalte 2
zu wechseln und den nächsten Eintrag vorzunehmen?
Und - nur keinen Stress ;)
Es ist Ostern und ich hab Zeit :-)
Danke für eure Hilfe.
Daniel
Anzeige
AW: Übertrag aus UF-TextBox in Tabelle
14.04.2017 20:19:15
Daniel
Ergänzend zu meinem letzten Beitrag:
Nach ein wenig überlegen kam ich zum Schluss...es geht ja doch...
Dim zeile As Integer
Dim spalte As Integer
For zeile = 14 To 5
For spalte = 3 To 7
ActiveSheet.Cells(zeile, spalte - 1) = Me.Controls("TextBox" & CStr(spalte)).Text
Next spalte
Next zeile
(Die zeile = 14 To 20 ist wieder nur exemplarisch zu sehen.)
Das Problem...richtig:
Es beginnt in Zeile 14, Spalte 2 und endet in Zeile 20, Spalte 7.
So weit ist ja alles wie gewünscht - aber es sind halt auch immer die ersten 5 TextBoxen.
Wie bekomme ich also die TextBoxen "leer" - alle, nicht nur die ersten 5...?
MfG
Daniel
Anzeige
AW: Übertrag aus UF-TextBox in Tabelle
14.04.2017 20:41:19
Matthias
Bei der Variante musst du mit einem Zähler für den Index der Textboxen arbeiten und diesem immer nach jedem Eintrag um 1 hochzählen (wobei der nicht unbedingt ein cstr davor braucht). Aus der wechselnden Nummer von Spalte kann man den in diesem Falle nicht berechnen. So wie bei meinem ersten Post. Da war aktbox der zähler.
Hinweise noch: Im geposteten Code von dir geht Zeile nicht bis 20 sondern nur bis 5 !
VG
AW: Übertrag aus UF-TextBox in Tabelle
14.04.2017 20:46:36
Daniel
Und nochmal...weil ich heute in bisschen arg langsam bin...(ich entschuldige mich dafür eure Zeit so in Anspruch zu nehmen...
Dim Start As Long
Dim zeile As Integer
Dim spalte As Integer
Dim aktbox As Long
Start = ActiveSheet.Cells(Rows.Count, 2).End(xlUp).Row + 1
aktbox = 3 'zum duchzählen deiner Textboxen
For zeile = Start To Start + 36
For spalte = 2 To 6
If aktbox > 157 Then
Exit For
End If
ActiveSheet.Cells(zeile, spalte) = Me.Controls("TextBox" & CStr(aktbox)).Text
aktbox = aktbox + 1
Next spalte
Next zeile
Ich hab deinen Code etwas ergänzt Matthias.
Ansonsten hat er beinahe tadellos funktioniert...was mich irritiert ist nur eins:
Ich schaff es nicht, dass er die TextBoxen abrackert...
Im Moment sind es 157 TextBoxen auf der UF.
Die überträgt auch ohne zu meckern und absolut richtig in die dafür vorgesehenen Zellen...
(Danke dafür).
Aber er will auch immer über die 157 hinaus...und das funzt halt nicht...
Hat nochmal n paar Minuten gedauert bis ich daran dachte eine If-Abfrage einzubauen...
(Ja, wie gesagt: heute keiner der schnellsten...)
Letztendlich werde ich mich aber für die alternative Lösung entscheiden...
Dim zeile As Integer
Dim spalte As Integer
Dim aktbox As Integer
aktbox = 3
For zeile = 14 To 20
For spalte = 3 To 7
ActiveSheet.Cells(zeile, spalte - 1) = Me.Controls("TextBox" & CStr(aktbox)).Text
aktbox = aktbox + 1
Next spalte
Next zeile
Hat den einfachen Grund:
Zur späteren Nachbearbeitung des Blattes ist es einfach einfacher, weil ich direkt eine Zelle entsprechend ansprechen kann und keine (unnötige) Verlängerung der Tabelle bekomme.
ABER....
Ohne deinen Anstoß wäre ich nicht auf die Idee gekommen es so zu machen.
Ich danke dir für deine Hilfe...
MfG
Daniel
Anzeige
AW: Übertrag aus UF-TextBox in Tabelle
14.04.2017 20:50:52
Matthias
Kein Problem! Schön, wenn man helfen konnte. Wobei ich die Variante mit dem einzeiligen Code (der mit Int und mod) in der for SChleife auch nicht schlecht fand - so im nachhineinbetracht. :-) VG
AW: Übertrag aus UF-TextBox in Tabelle
14.04.2017 20:35:31
Matthias
Hallo! Also wenn du es so machen willst, auch kein Problem. Die andere Variante mit 2 Schleifen über Zeile und Spalte und einem Zähler für die Textboxen ist aber m.E. etwas übersichtlicher und leichter bei der Wartung / Anpassung bzw. bei der Fehlersuche. :-) War aber wie geschrieben nicht getestet - könnte also sein, dass da was falsch geschrieben war. Aber macht nichts. Bei deiner Variante den Code so abwandeln (der Zeilenumbruch ist nur auf Grund der Eingabemaske hier im Forum) :

Dim spalte As Integer
For spalte = 3 To 150
ActiveSheet.Cells(14 + Int((spalte - 3) / 5), (spalte - 3) Mod 5 + 2) = _
Me.Controls("TextBox" & CStr(spalte)).Text
Next spalte
DAbei wird durch Berechnung mit Rest bzw. des ganzzahligen Anteils der Division der Spaltenwechsel durchgeführt. Ansonsten würde es nur mit Hilfsvariablen und zusätzlichen Zeilen gehen - das hier macht aber das selbe. :-) Evtl. nochmal einen Kommentar mit dem Ziel der Berechnung einfügen, damit du später noch weist, was die Berechnung machen sollte (spreche da aus eigener Erfahrung :-) ) oder die Rechnung für Zeile und Spalte aus dem Cells rausziehen und in extra Zeilen innerhalb des for durchführen.
VG
Anzeige
AW: Übertrag aus UF-TextBox in Tabelle
14.04.2017 20:56:23
Daniel
Ehrlich gesagt...
Kam ich gar nicht mehr dazu nochmal was zu lesen...
Bei jedem Beitrag den ich geschrieben habe, kam mir eine Lösungsidee...
Die ich dann auch gleich umgesetzt hab und den nächsten Beitrag geschrieben hab...hab das jetzt erst gelesen von dir *rofl*
Du hast recht - deine Lösung ist auch sehr schön.
In jedem Fall hats hier jetzt unterschiedliche Ansätze für unterschiedliche Aufgabenstellungen - vielleicht hilft es ja dem einen oder anderen mit ähnlichem Problem weiter...und bei...wieviel sinds jetzt?
3? 4? unterschiedlichen Lösungen kann man jemanden mit ähnlicher Fragestellung auf jeden Fall hier rein schicken - und hoffen das er eine Lösung für sich findet ;)
Hat mir gefallen mal wieder :-)
Bis demnächst :-)
Daniel
Anzeige

301 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige