Office - Word, Excel und Co. 9.744 Themen, 41.408 Beiträge

Excel: Mittels Userform (VBA) Daten in eine Tabelle einfügen (mit Rahmen)

minbari / 33 Antworten / Baumansicht Nickles

Moin,

ich bin gerade dabei, eine Excel-Tabelle zu erstellen.
Mittels einer Eingabemaske (Userform) werden die Daten in eine Tabelle eingefügt.

Ich habe soweit alles fertig. Das Einzige, was noch nicht funktioniert ist, dass die eingetragenen Daten in eine Zelle mit Rahmen eingefügt werden.

Es geht hier speziell um den Rahmen!

Folgenden Code verwende ich:

Private Sub Abbrechen_Button_Click()

' Eingabefenster schließen

Unload Eingabemaske

End Sub


Private Sub Eintragen_Button_Click()

' Eingaben der Maske in das Fahrtenbuch übernehmen

Dim StartZeile&
Dim Ws As Worksheet
Set Ws = ActiveSheet
StartZeile = Ws.Cells(65536, 2).End(xlUp).Row + 1
Ws.Cells(StartZeile, 2) = CDate(Text_Datum.Text)
Ws.Cells(StartZeile, 3) = Zweck
Ws.Cells(StartZeile, 4) = Fahrzeug
Ws.Cells(StartZeile, 5) = Begleitung
Ws.Cells(StartZeile, 6) = Bemerkung

' nach Datum sortieren

Range("B6:F3300").Sort Key1:=Range("B7")

' Eingabemaske schließen

Unload Eingabemaske

End Sub


Private Sub UserForm_Initialize()

'Automatischer Eintrag Datum

Eingabemaske.Text_Datum.Value = Date

'Dropdownmenü Begleitung

Eingabemaske.Begleitung.RowSource = "Daten!$A$2:$A$8"

'Dropdownmenü Fahrzeug

Eingabemaske.Fahrzeug.RowSource = "Daten!$C$2:$C$15"

'Dropdownmenü Bemerkung

Eingabemaske.Bemerkung.RowSource = "Daten!$E$2:$E$9"

'Dropdownmenü Zweck der Fahrt

Eingabemaske.Zweck.RowSource = "Daten!$G$2:$G$32"


End Sub

Ich benutze Excel 2016.


Betreffen würde es B6:F6, wobei dies natürlich veränderlich ist, da immer neue Einträge eine Zeile tiefer ansetzen.

Habt Ihr eine Idee?

Danke für die Hilfe!

minbari

bei Antwort benachrichtigen
mumpel1 minbari „Excel: Mittels Userform (VBA) Daten in eine Tabelle einfügen (mit Rahmen)“
Optionen

Wie soll die Linienart sein? Soll um jede Zelle ein Rahmen sein, oder nur um die Gesamttabelle? Bei letzteren könntest Du mit einer intelligenten Tabelle arbeiten.

bei Antwort benachrichtigen
mawe2 minbari „Excel: Mittels Userform (VBA) Daten in eine Tabelle einfügen (mit Rahmen)“
Optionen
Das Einzige, was noch nicht funktioniert ist, dass die eingetragenen Daten in eine Zelle mit Rahmen eingefügt werden.

Verstehe ich das richtig?

Wenn die Zellen ohne Rahmen ausgestattet sind, funktioniert das Einfügen der Werte per VBA.

Wenn jedoch Rahmen vorhanden sind, funktioniert es nicht mehr?

Ist das das Problem?

bei Antwort benachrichtigen
minbari mawe2 „Verstehe ich das richtig? Wenn die Zellen ohne Rahmen ausgestattet sind, funktioniert das Einfügen der Werte per VBA. ...“
Optionen

Nein, das Eintragen der Daten funktioniert einwandfrei. Ich möchte jetzt nur noch, dass die beschriebenen Zellen mit Rahmen versehen werden. 
Im Grunde sind das 5 Zellen pro Zeile. Fängt an bei B6:F6.
Wobei sich dies mit jeder neuen Zeile nach unten verschiebt.

Die Rahmenart wäre schwarz, dünn, außen.

bei Antwort benachrichtigen
mawe2 minbari „Nein, das Eintragen der Daten funktioniert einwandfrei. Ich möchte jetzt nur noch, dass die beschriebenen Zellen mit ...“
Optionen

Ich würde die Tabelle vorher schon mit den Rahmen versehen, dann muss man dafür keinen extra VBA-Code schreiben.

bei Antwort benachrichtigen
minbari mawe2 „Ich würde die Tabelle vorher schon mit den Rahmen versehen, dann muss man dafür keinen extra VBA-Code schreiben.“
Optionen

Genau das wollte ich nicht.

Das wird eine Jahrestabelle mit geschätzten 3000-4000 Eintragungen.

bei Antwort benachrichtigen
hddiesel minbari „Genau das wollte ich nicht. Das wird eine Jahrestabelle mit geschätzten 3000-4000 Eintragungen.“
Optionen

Hallo minbari,

warum fügst du die Rahmen, nicht per bedingter Formatierung ein?

Formel zur Ermittlung der zu formatierenden Zellen verwenden
=$B2>0

Deinen Wunschrahmen / Außen wählen

Wird angewendet auf z.B
=$B$2:$F$4000

Alle Zeilenbereiche von Spalte B bis Spalte F erhalten einen Rahmen, wenn die Zelle in der Spalte B > 0 ist.

Oder per VBA

Sub Rahmen_Bedingte_Formatierung()

    ' Rahmen im Bereich B:F, bis zur letzen Zeile, in welcher die Zelle in Spalte B > 1
    With ActiveSheet.Range("B2:F" & ActiveSheet.Cells(Rows.Count, "B").End(xlUp).Row)
        .FormatConditions.Delete
        .FormatConditions.Add Type:=xlExpression, Formula1:="=$B2>0"
        .FormatConditions(.FormatConditions.Count).SetFirstPriority
        .FormatConditions(1).Borders(xlLeft).LineStyle = xlContinuous
        .FormatConditions(1).Borders(xlRight).LineStyle = xlContinuous
        .FormatConditions(1).Borders(xlTop).LineStyle = xlContinuous
        .FormatConditions(1).Borders(xlBottom).LineStyle = xlContinuous
        .FormatConditions(1).StopIfTrue = False
    End With
End Sub

Windows 10 Pro 64-Bit, 22H2: MS Office Pro Plus 2016 32-Bit: Mein Motto: Leben und leben lassen: Gruss Karl
bei Antwort benachrichtigen
mawe2 minbari „Genau das wollte ich nicht. Das wird eine Jahrestabelle mit geschätzten 3000-4000 Eintragungen.“
Optionen
Genau das wollte ich nicht.

Egal, ob das 4000 Zeilen sind oder 40000: Die Rahmen setzt man einmal und dann war's das.

Wenn es definitiv per VBA erledigt werden muss, könntest Du diesen Code

Dim i As Integer
For i = 2 To 6
Ws.Cells(StartZeile, i).Borders(xlEdgeLeft).LineStyle = xlContinuous
Ws.Cells(StartZeile, i).Borders(xlEdgeTop).LineStyle = xlContinuous
Ws.Cells(StartZeile, i).Borders(xlEdgeBottom).LineStyle = xlContinuous
Ws.Cells(StartZeile, i).Borders(xlEdgeRight).LineStyle = xlContinuous
Next i

nach Deiner Zeile

Ws.Cells(StartZeile, 6) = Bemerkung

einfügen.

Damit werden im Anschluss an die Befüllung der Zellen die selben Zellen mit Rahmen versehen.

Gruß, mawe2

bei Antwort benachrichtigen
mumpel1 mawe2 „Egal, ob das 4000 Zeilen sind oder 40000: Die Rahmen setzt man einmal und dann war s das. Wenn es definitiv per VBA ...“
Optionen
Egal, ob das 4000 Zeilen sind oder 40000: Die Rahmen setzt man einmal und dann war's das.

Man nutzt m.E. eher eine intelligente Tabelle. Damit wird, neben den Formeln, auch der Rahmen automatisch erweitert.

bei Antwort benachrichtigen
mawe2 mumpel1 „Man nutzt m.E. eher eine intelligente Tabelle. Damit wird, neben den Formeln, auch der Rahmen automatisch erweitert.“
Optionen
Man nutzt m.E. eher eine intelligente Tabelle.

Ja, meinetwegen.

Aber was wäre das Problem, wenn die betreffenden Spalten von vornherein komplett mit Rahmen ausgestattet wären?

Inzwischen gibt es ja auch eine Lösung per VBA; mal sehen, ob der TS damit zufrieden ist?

bei Antwort benachrichtigen
winnigorny1 mawe2 „Ja, meinetwegen. Aber was wäre das Problem, wenn die betreffenden Spalten von vornherein komplett mit Rahmen ausgestattet ...“
Optionen
Aber was wäre das Problem, wenn die betreffenden Spalten von vornherein komplett mit Rahmen ausgestattet wären?

Das vermisse ich sogar beim Calculator von LO. - Jedenfalls käme mir das durchaus zu Pass. - Kann mir allerdings auch User und Anwendungsfälle vorstellen, in denen es andere User nerven und stören könnte. Das alte Problem - es klappt einfach nicht, es allen Recht zu machen.

Gut wäre jedenfalls eine Möglichkeit das per One-Klick-Lösung im Menue anzubieten....

Gruss aus dem schoenen Hamburg, Winni
bei Antwort benachrichtigen
mawe2 winnigorny1 „Das vermisse ich sogar beim Calculator von LO. - Jedenfalls käme mir das durchaus zu Pass. - Kann mir allerdings auch ...“
Optionen
Das vermisse ich sogar beim Calculator von LO. - Jedenfalls käme mir das durchaus zu Pass.

Man kann doch mit Libre Office Calc die Rahmen setzen, die man benötigt.

Was genau vermisst Du da?

bei Antwort benachrichtigen
mumpel1 mawe2 „Ja, meinetwegen. Aber was wäre das Problem, wenn die betreffenden Spalten von vornherein komplett mit Rahmen ausgestattet ...“
Optionen
Aber was wäre das Problem, wenn die betreffenden Spalten von vornherein komplett mit Rahmen ausgestattet wären?

Weil man dann wieder beim Drucken aufpassen muss. Wenn Du 4000 Zeilen mit Rahmen versiehst, aber nur in 100 Zeilen Daten stehen, werden trotzdem alle 4000 Zeilen ausgedruckt, und somit für 3900 Zeilen umsonst Papier verschwendet. Und optisch sieht es auch nicht schön aus.

bei Antwort benachrichtigen
winnigorny1 mumpel1 „Weil man dann wieder beim Drucken aufpassen muss. Wenn Du 4000 Zeilen mit Rahmen versiehst, aber nur in 100 Zeilen Daten ...“
Optionen
Weil man dann wieder beim Drucken aufpassen muss.

Wo wäre das Problem, ist es denn so schwierig, beim Drucken dem Drucker mitzuteilen, dass er nur die Seiten 1 - xxx drucken soll? Das würde ich nicht als Problem sehen. Wer auf so etwas nicht aufpassen kann, hat m.E. selber Schuld....

Gruss aus dem schoenen Hamburg, Winni
bei Antwort benachrichtigen
hddiesel winnigorny1 „Wo wäre das Problem, ist es denn so schwierig, beim Drucken dem Drucker mitzuteilen, dass er nur die Seiten 1 - xxx ...“
Optionen

Hallo winni,

aufpassen kann der PC übernehmen, indem man den Druckbereich vor dem Drucken per Makro festlegt, dann gibt es auch keine leeren Blätter, nach der letzten bedruckten Tabellen-Seite.

Windows 10 Pro 64-Bit, 22H2: MS Office Pro Plus 2016 32-Bit: Mein Motto: Leben und leben lassen: Gruss Karl
bei Antwort benachrichtigen
winnigorny1 hddiesel „Hallo winni, aufpassen kann der PC übernehmen, indem man den Druckbereich vor dem Drucken per Makro festlegt, dann gibt es ...“
Optionen
aufpassen kann der PC übernehmen, indem man den Druckbereich vor dem Drucken per Makro festlegt

Tja - noch besser als über die Druckoptionen vor dem Losdrucken..... Aber egal. Das unterstreicht ja nur noch, was ich schrieb. Ich sehe da halt kein Problem drin. - Langt jetzt aber auch. Ich verabschiede mich jetzt höflich aus dieser Diskussion und wünsche dir noch einen schönen Tag.

Gruss aus dem schoenen Hamburg, Winni
bei Antwort benachrichtigen
mawe2 mumpel1 „Weil man dann wieder beim Drucken aufpassen muss. Wenn Du 4000 Zeilen mit Rahmen versiehst, aber nur in 100 Zeilen Daten ...“
Optionen

Dass sowas heutzutage noch gedruckt werden könnte, hatte gar nicht mehr im Blick.

Ich drucke solches Zeug schon seit Jahren nicht mehr aus. Dafür wäre mir das Papier echt zu schade. Egal ob 100 Zeilen oder mehr.

Der TS schrieb ja, dass es insgesamt ca. 4000 Zeilen sein könnten.

Bei ca. 50 Zeilen pro A4-Seite wären das etwa 80 Seiten!

Sorry: Sowas druckt man doch heute nicht mehr aus...

Wer will sowas auf Papier haben???

bei Antwort benachrichtigen
hddiesel mumpel1 „Weil man dann wieder beim Drucken aufpassen muss. Wenn Du 4000 Zeilen mit Rahmen versiehst, aber nur in 100 Zeilen Daten ...“
Optionen

Hallo mumpel1,

darum mein Vorschlag mit der bedingten Formatierung, so löse ich das schon viele Jahre per Hand über einen festen Bereich, oder variabel per Makro bis zur letzten belegte Zeile,  z.B. in der Spalte B.

Alle Zeilen-Bereiche der Spalten B:F, in welcher die Zelle in der Spalte B kein Wert enthält, werden keine Rahmen gesetzt, das ist wohl auch das Ziel von minbari, warum auch immer.

Windows 10 Pro 64-Bit, 22H2: MS Office Pro Plus 2016 32-Bit: Mein Motto: Leben und leben lassen: Gruss Karl
bei Antwort benachrichtigen
minbari mawe2 „Egal, ob das 4000 Zeilen sind oder 40000: Die Rahmen setzt man einmal und dann war s das. Wenn es definitiv per VBA ...“
Optionen

Genau danach habe ich gesucht!!!!

Dankeschön!!!!

bei Antwort benachrichtigen
hddiesel minbari „Genau danach habe ich gesucht!!!! Dankeschön!!!!“
Optionen

Hallo minbari,

Danke für deine Rückmeldung.

Windows 10 Pro 64-Bit, 22H2: MS Office Pro Plus 2016 32-Bit: Mein Motto: Leben und leben lassen: Gruss Karl
bei Antwort benachrichtigen
Borlander mawe2 „Egal, ob das 4000 Zeilen sind oder 40000: Die Rahmen setzt man einmal und dann war s das. Wenn es definitiv per VBA ...“
Optionen
Dim i As Integer
For i = 2 To 6
Ws.Cells(StartZeile, i).Borders(xlEdgeLeft).LineStyle = xlContinuous
Ws.Cells(StartZeile, i).Borders(xlEdgeTop).LineStyle = xlContinuous
Ws.Cells(StartZeile, i).Borders(xlEdgeBottom).LineStyle = xlContinuous Ws.Cells(StartZeile, i).Borders(xlEdgeRight).LineStyle = xlContinuous
Next i

Ist zwar schon ewig her, dass ich mal VBA programmiert habe, aber ich würde eher mit einer Range arbeiten, statt alle Zellen einzeln zu formatieren. Das ist im Zweifelsfall auch deutlich schneller.

Oder spricht da irgendwas technisches dagegen?

bei Antwort benachrichtigen
mawe2 Borlander „Ist zwar schon ewig her, dass ich mal VBA programmiert habe, aber ich würde eher mit einer Range arbeiten, statt alle ...“
Optionen
ich würde eher mit einer Range arbeiten, statt alle Zellen einzeln zu formatieren. Das ist im Zweifelsfall auch deutlich schneller.

Da wirst Du bei den 5 Zellen, die hier formatiert werden, keinerlei Performanceunterschied feststellen.

Die Schleife war einfach für mich der schnellste Ansatz, um dem TS hier eine Lösung aufzuzeigen.

Man muss bei solchen Programmieraufgaben auch immer abwägen, wie viel weitere Zeit man in vermeintliche Performanceverbesserungen investiert, wenn diese am Ende sowieso nicht spürbar sind.

Oder spricht da irgendwas technisches dagegen?

Das spricht technisch nichts dagegen.

bei Antwort benachrichtigen
Borlander mawe2 „Da wirst Du bei den 5 Zellen, die hier formatiert werden, keinerlei Performanceunterschied feststellen. Die Schleife war ...“
Optionen

Hatte das so verstanden, dass da alle betroffenen Zeilen formatiert werden sollen.

bei Antwort benachrichtigen
mawe2 Borlander „Hatte das so verstanden, dass da alle betroffenen Zeilen formatiert werden sollen.“
Optionen

In dem Moment sind nur 5 Zellen betroffen.

bei Antwort benachrichtigen
minbari Nachtrag zu: „Excel: Mittels Userform (VBA) Daten in eine Tabelle einfügen (mit Rahmen)“
Optionen

Eine Sache ist mir allerdings gerade aufgefallen:

Wenn ich auf drucken gehe, möchte er 33 Seiten drucken, obwohl nur Seite 1 Inhalte hat.

Wie kann ich dies Problem lösen?

Ich wollte jetzt nicht extra dafür einen neuen Thread eröffnen.

Vielen Dank für die Hilfe!!

minbari

bei Antwort benachrichtigen
mawe2 minbari „Eine Sache ist mir allerdings gerade aufgefallen: Wenn ich auf drucken gehe, möchte er 33 Seiten drucken, obwohl nur Seite ...“
Optionen
Wie kann ich dies Problem lösen?

Alle Zeilen unterhalb des relevanten Bereichs, in dem Inhalte drin stehen markieren, dann Zellen löschen.

Das selbe machst Du mit allen (vermeintlich) leeren Spalten rechts vom relevanten Bereich.

Danach sollten nur noch die Seiten in der Seitenvorschau erscheinen, wo wirklich Inhalte drauf sind.

bei Antwort benachrichtigen
minbari mawe2 „Alle Zeilen unterhalb des relevanten Bereichs, in dem Inhalte drin stehen markieren, dann Zellen löschen. Das selbe ...“
Optionen

Ja, da hätte ich auch selbst drauf kommen können... die einfachsten Wege sind immer noch die besten...

Dankeschön!

bei Antwort benachrichtigen
minbari mawe2 „Alle Zeilen unterhalb des relevanten Bereichs, in dem Inhalte drin stehen markieren, dann Zellen löschen. Das selbe ...“
Optionen

Ich habe jetzt alle Zeilen ab Zeile 9 gelöscht.

Dadurch möchte er jetzt die 33 leeren Seiten nicht mehr drucken.

Soweit so gut, allerdings druckt er alle Zeilen ab Zeile 10 nicht mehr... Angezeigt werden sie, gedruckt nicht.

Das verstehe, wer will...

bei Antwort benachrichtigen
hddiesel minbari „Ich habe jetzt alle Zeilen ab Zeile 9 gelöscht. Dadurch möchte er jetzt die 33 leeren Seiten nicht mehr drucken. Soweit ...“
Optionen

Hallo minbari,

um Dir zu helfen, sollte man deine Tabelle kennen.

Der Druckbereich geht von Spalte A bis zur Spalte ?

Die erste Druckzeile ist ?

Zur Ermittlung der letzten Druckzeile, steht der letzte Wert in der Spalte ?

Hier als Beispiel, ein einfach anzupassendes Makro für den Druckbereich, die entsprechenden Werte deiner Tabelle anpassen.

Sicher geht es einfacher, aber als Beispiel sollte es genügen.

Sub Druckbereich_Spalten_Zeilen()
    Dim intRows As Long

    With ActiveSheet
        Application.ScreenUpdating = False

        ' Maximale Datenzeile festlegen z.B. letzter Wert in der Spalte 2
        intRows = .Cells(Rows.Count, 2).End(xlUp).Row

        ' Druckbereich und Seitenumbrüche löschen.
        .PageSetup.PrintArea = ""
        .ResetAllPageBreaks

        ' Druckbereich neu festlegen Spalten A1 bis z.B. G & intRows
        .PageSetup.PrintArea = "$A$1:$G$" & intRows

        ' Events und Bildschirmaktualisierung einschalten.
        Application.ScreenUpdating = True

    End With

End Sub

Windows 10 Pro 64-Bit, 22H2: MS Office Pro Plus 2016 32-Bit: Mein Motto: Leben und leben lassen: Gruss Karl
bei Antwort benachrichtigen
mawe2 minbari „Ich habe jetzt alle Zeilen ab Zeile 9 gelöscht. Dadurch möchte er jetzt die 33 leeren Seiten nicht mehr drucken. Soweit ...“
Optionen

Evtl. musst Du einen fehlerhaft definierten Druckbereich löschen.

bei Antwort benachrichtigen
minbari mawe2 „Evtl. musst Du einen fehlerhaft definierten Druckbereich löschen.“
Optionen

Ich hatte den Druckbereich überhaupt nicht definiert.

bei Antwort benachrichtigen
minbari mawe2 „Evtl. musst Du einen fehlerhaft definierten Druckbereich löschen.“
Optionen

Moin,

ich habe den Druckbereich gelöscht.

Jetzt möchte er nicht mehr 33 leere Seiten löschen.
Allerdings erweitert sich der Druckbereich nicht mehr.

Im Normal fall ist es doch so, dass Excel alles ausdruckt, wo Inhalte vorhanden sind.
Beispiel: In Zeile 1-5 ist etwas eingetragen, also wird Zeile 1-5 gedruckt.
Wenn ich jetzt später etwas in Zeile 6 eintrage, dann wird auch diese Zeile mitgedruckt.
Der Druckbereich erweitert sich quasi automatisch!

Und das tut er bei mir nicht! Wieso nicht?

minbari

bei Antwort benachrichtigen
mawe2 minbari „Moin, ich habe den Druckbereich gelöscht. Jetzt möchte er nicht mehr 33 leere Seiten löschen. Allerdings erweitert sich ...“
Optionen
Im Normal fall ist es doch so, dass Excel alles ausdruckt, wo Inhalte vorhanden sind. Beispiel: In Zeile 1-5 ist etwas eingetragen, also wird Zeile 1-5 gedruckt. Wenn ich jetzt später etwas in Zeile 6 eintrage, dann wird auch diese Zeile mitgedruckt. Der Druckbereich erweitert sich quasi automatisch!

Ja, so kenne ich das auch.

Und das tut er bei mir nicht! Wieso nicht?

Ich kann es Dir leider nicht sagen.

Was passiert denn, wenn Du die Tabelle als PDF exportierst?

Oder wenn Du sie ausnahmsweise in einem anderen Kalkulations-Dateiformat speicherst (z.B. *.odt) und sie mit einem anderen Kalkulationsprogramm öffnest (z.B. Libre Office Calc)?

bei Antwort benachrichtigen
minbari mawe2 „Ja, so kenne ich das auch. Ich kann es Dir leider nicht sagen. Was passiert denn, wenn Du die Tabelle als PDF exportierst? ...“
Optionen

Erledigt!!

Ich habe den Druckbereich gelöscht und per Formel einen dynamischen Druckbreich eingefügt!

Jetzt läuft es!

Danke für die Hilfe!

minbari

bei Antwort benachrichtigen