Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender

Forumthread: Formular bzw. Zahlen direkt in Zellen einlesen

Formular bzw. Zahlen direkt in Zellen einlesen
28.08.2024 15:03:57
chris58
Hallo Experten !
Ich habe meine Datei, die ich nun habe durchforstet und möchte Euch bitte mein Makro bzw. mein Formular direkt in die richtigen Zeilen eintragen zu lassen.
Mein Formlar in das ich meine Daten eigebe schreibt die Zahlen in die Zellen C17 bis C21. Von da werden diese in die jeweils letzte Zeile in die richtigen Zellen weitergeliefert. Ich bin dann schon mehrmals in diese Zellen gesprungen und die Daten irrtümlich gelöscht. Um das zu vermeiden, habe ich nach einer Lösung gesucht, die Daten direkt in die Zellen zu speichern. Das habe ich mit meinen bescheidenen Möglichkeiten erfolgreich machen können (sozusagen zusammengestoppelt).
Ich habe nun gesucht, ob es möglich ist, diese Zahlen die ich in das Formular eingebe, direkt in die richtigen Zellen zu liefern. Ich steig da einfach nicht durch. Ich komm da einfach nicht mit, was ich ändern muß/ kann/ soll. Am Ende geht dann gar nichts mehr.
Ich habe die Datei hier angehängt, damit ihr seht, was es machen soll.
Falls wer Zeit hat, würde ich mich über Eure Hilfe freuen.
Danke im voraus für die Mühe
chris58

https://www.herber.de/bbs/user/171868.zip
Anzeige

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

Betreff
Datum
Anwender
Anzeige
AW: Formular bzw. Zahlen direkt in Zellen einlesen
28.08.2024 20:57:09
ralf_b
vielleicht bringst du "einfach"(ja, ich hab gut reden) etwas Ordnung in deinen Code.
1. Eingabeprüfung der Textboxen
2. letzte Zeile ermitteln oder die erst freie Zeile
3. Daten in Zeile schreiben

Wozu prüfst du ob das Blatt existiert wenn du darin schon deine ganzen Buttons und Informationen(Zeile 1 bis 21) stehen hast?
Da macht nur Sinn wenn du die Messwerte in ein neues Blatt einfügen wolltest.



'wenn du dir diesen Schritt(Daten in die Zellen oben schreiben) sparen willst, dann lass ihn einfach weg
Range("C21").Value = CDbl(TextBox6.Text)

'es reicht einmal die erste freie Zeile zu ermitteln und nicht jedes Mal.
sMaxZeile = TB.Cells(TB.Rows.Count, 1).End(xlUp).Row + 1
'Daten in neue Tabelle übertragen
TB.Cells(sMaxZeile, 1) = ActiveWorkbook.ActiveSheet.Range("C7")
'Wenn du die Daten nicht in eine andere Datei eintragen willst brauchst du ActiveWorkbook.ActiveSheet. nicht davor setzen.
'Activeworkbook beschreibt unter Umständen nicht die Datei in der du den Code und/oder die Meßwerte
' usw. ......
'das wars schon


Anzeige
AW: Formular bzw. Zahlen direkt in Zellen einlesen
28.08.2024 21:36:10
Yal
Hallo Chris,

wenn man Hilfe wegen einem Nadel fragt, sollte man vermeiden, eine ganzen Heuhaufen zu übergeben :-)

Ich habe doch entdeckt, dass es sich um CommandButton4_Click geht.
Was sich wiedeholt, sollte man in einer separaten Sub ablegen: "IstNichtNum"
Manche komplexere Handlung ("Blatt_selektieren") kann man auch -zweck Übersicht- getrennt behandeln. Insbesondere, weil die Handlung von "On Error" immer nur inerhalb eines Subs wirkt.

Das einzige, was ich problematisch finden könnte, ist die Formel in Spalte L
R.Cells(12).FormulaR1C1 = "=TEXT(RC[-12],""TTTT"")" 'Formel in Spalte L
Da L die Spalte 12 ist, RC[-12] ergibt Spalte 0, die es nicht gibt.
daher
R.Cells(12).FormulaR1C1 = "=TEXT(RC[-11],""TTTT"")" 'Formel in Spalte L

Private Sub CommandButton4_Click()

Dim i, j
Dim R As Range
Const cNeuesBlatt As String = "Berechnung"

'Prüfung. Wenn einer "ist nicht numerisch", dann raus
If IstNichtNum(TextBox4) Or IstNichtNum(TextBox5) Or IstNichtNum(TextBox6) Or IstNichtNum(TextBox7) Then Exit Sub
'Übertragung
Range("C17").Value = CDbl(TextBox4.Text)
Range("C18").Value = CDbl(TextBox5.Text)
Range("C20") = ComboBox1.Value
Range("C21").Value = CDbl(TextBox6.Text)
Range("C19").Value = CDbl(TextBox7.Text)

'Es passiert alle auf ActiveSheet
StartZeile = Range("A3").End(xlUp).Row + 5
Cells(StartZeile, "C") = CDbl(Format(TextBox1, "#,##0.00"))
Cells(StartZeile + 1, "C") = TextBox3

Application.ScreenUpdating = False
'Wert zum neuen Blatt übertragen
Set R = Blatt_selektieren(cNeuesBlatt).Cells(Rows.Count, 1).End(xlUp).Offset(1, 0).EntireRow 'nächste leere Zeile ermitteln. R ist eine Zeile.
For Each i In Split("C7 C11 C6 C12 C13 C14 C21 C17 C18 C19 C20")
j = j + 1
R.Cells(j) = Range(i).Value 'Cells(1) von einer Zeile in der Spalte A dieser Zeile, 2 B, 3 C, usw.
Next
'Fromel einreichten
R.Cells(7).FormulaR1C1 = "=SUM(RC[1]+RC[4]-RC[2])" 'Formel in Spalte G: Gesamtverbrauch per Tag aus EVN & Einspeisung aus PV Anlage
R.Cells(8).FormulaR1C1 = "=(RC3-R[-1]C3)" 'Formel in Spalte H (relative Adressierung)
' =SUM(RC[1]+RC[4])
R.Cells(9).Interior.ColorIndex = 35 'Spalte I
' R.Cells(9).FormulaR1C1 = "=(RC[-1])/24"
R.Cells(12).FormulaR1C1 = "=TEXT(RC[-11],""TTTT"")" 'Formel in Spalte L
'Färbung
R.Interior.Pattern = xlSolid
R.Cells(5).Interior.ColorIndex = 36
R.Cells(7).Interior.ColorIndex = 34
'Abschluss
Range("A2").Select
Application.ScreenUpdating = True
Unload Me '--- Userform schließen
End Sub

Private Function Blatt_selektieren(ByVal BlattName As String) As Worksheet
Dim WS As Worksheet
'alles basiert auf ActiveWorkbook
On Error Resume Next
Set WS = Worksheets(BlattName)
If WS Is Nothing Then
Set WS = Worksheets.Add(After:=Worksheets(Worksheets.Count))
WS.Name = BlattName
End If
Set Blatt_selektieren = Worksheets(BlattName)
End Function

Private Function IstNichtNum(TxtBx As Control) As Boolean
If Not IsNumeric(TxtBx.Text) Then
MsgBox "PV Einspeisung eigeben - oder 0!" '---> Meldung
TxtBx.SetFocus '---> Textbox aktivieren
IstNichtNum = True
End If
End Function

(ungetestet)

VG
Yal
Anzeige
AW: Formular bzw. Zahlen direkt in Zellen einlesen
29.08.2024 08:32:18
chris58
Hallo !
Bin erste heute dazugekommen das auszuprobieren. Ich habe mich herumgespielt. Weiß nicht, was ich ersetzen soll und dadurch kommen immer wieder Fehler und ich komme wenn ich das was herumkopiere, in den Code hinein und dann gehts nicht mehr weiter.
Es sollte eigentlich, das was ich eingebe ins Formular, direkt in die nächste freie Zelle der jeweiligen Spalte hineingestellt werden, damit nicht der Umweg über die Zellen C17 bis C21 genommen wird. Es funktioniert ja, nur eben manchmal ist es schon passiert, das ich die Daten irrtümlich gelöscht habe und dadurch einen "Salat" gehabt habe.
Wenn das ginge, HERRLICH
Ansonst.................
lg chri58

Textbox 4 Heutige Leistung PV Anlage 48,20 gleich in nächste Freie Zeile der Spalte J
Textbox 5 Heutige Eigenverbrauch PV Anlage 22,40 gleich in nächste Freie Zeile der Spalte K
Textbox 6 Heutige Netzeinspeisung PV Anlage 25,80 gleich in nächste Freie Zeile der Spalte I
ComondBox1 Wetter für diesen Tag 2. Sonne/warm/bewölkter Himmel gleich in nächste Freie Zeile der Spalte N
Textbox 7 In die Batterie 7,37 gleich in nächste Freie Zeile der Spalte L
Anzeige
AW: Formular bzw. Zahlen direkt in Zellen einlesen
01.09.2024 15:21:46
ralf_b
benutzte den Code von Yal und lösche dein altes Command_Button4_Click Makro.
dann ersetzt du das Clickmakro von Yal durch dieses. Wenn du die beiden Codes vergleichst fällt dir sicher der Unterschied auf.
hier wird c17-c21 nicht mehr gefüllt
Private Sub CommandButton4_Click()

Dim i, j
Dim R As Range
Const cNeuesBlatt As String = "Berechnung"

'Prüfung. Wenn einer "ist nicht numerisch", dann raus
If (Not IsDate(TextBox3)) Or IstNichtNum(TextBox1) Or IstNichtNum(TextBox4) Or IstNichtNum(TextBox5) Or IstNichtNum(TextBox6) Or IstNichtNum(TextBox7) Then Exit Sub

'Es passiert alle auf ActiveSheet
Cells(6, "C") = CDbl(Format(TextBox1, "#,##0.00"))
Cells(7, "C") = CDate(TextBox3)

Application.ScreenUpdating = False
'Wert zum neuen Blatt übertragen
Set R = Blatt_selektieren(cNeuesBlatt).Cells(Rows.Count, 1).End(xlUp).Offset(1, 0).EntireRow 'nächste leere Zeile ermitteln. R ist eine Zeile.
For Each i In Split("C7 C11 C6 C12 C13 C14")
j = j + 1
R.Cells(j) = Range(i).Value 'Cells(1) von einer Zeile in der Spalte A dieser Zeile, 2 B, 3 C, usw.
Next

R.Cells(Columns("L").Column) = CDbl(TextBox7) 'C21
R.Cells(Columns("J").Column) = CDbl(TextBox4) 'C17
R.Cells(Columns("K").Column) = CDbl(TextBox5) 'C18
R.Cells(Columns("I").Column) = CDbl(TextBox6) 'C19
R.Cells(Columns("N").Column) = CDbl(ComboBox1) 'C20

'Fromel einreichten
R.Cells(7).FormulaR1C1 = "=SUM(RC[1]+RC[4]-RC[2])" 'Formel in Spalte G: Gesamtverbrauch per Tag aus EVN & Einspeisung aus PV Anlage
R.Cells(8).FormulaR1C1 = "=(RC3-R[-1]C3)" 'Formel in Spalte H (relative Adressierung)
' =SUM(RC[1]+RC[4])
R.Cells(9).Interior.ColorIndex = 35 'Spalte I
' R.Cells(9).FormulaR1C1 = "=(RC[-1])/24"
R.Cells(13).Formula = "=TEXT(" & R.Cells(1).Address & ",""TTTT"")" 'Formel in Spalte M
'Färbung
R.Interior.Pattern = xlSolid
R.Cells(5).Interior.ColorIndex = 36
R.Cells(7).Interior.ColorIndex = 34
'Abschluss
Range("A2").Select
Application.ScreenUpdating = True
Unload Me '--- Userform schließen
End Sub


das wars.
Anzeige
AW: Formular bzw. Zahlen direkt in Zellen einlesen
01.09.2024 17:26:18
chris58
Hallo !
Tja, ich habe das ja eh so gemacht, nur, da kommt einfach nichts. Ich habe den Commandbutton auf 17 geändert..........da ich ja mit 4 bereits einen hatte.
lg chris58

Hier die geänderte Datei:
https://www.herber.de/bbs/user/171909.zip
Anzeige
AW: Formular bzw. Zahlen direkt in Zellen einlesen
01.09.2024 19:32:23
ralf_b
https://www.herber.de/bbs/user/171910.zip
du hast verwechselt das Commandbutton4 die Bezeichnung des Speicherbuttons in der Userform ist. Die hat nichts mit dem Namen des Commandbuttons auf dem Arbeitsblatt zu tun. Drückst du den Knopf auf dem Arbeitsblatt wird ein Makro im Codemodule des Arbeitsblattes gestartet. Darin wird dann die Userform geöffnet.
Eine kleine Änderung im Code mußte ich noch machen.

Weiterhin solltest du den Code von Yal verwenden, Hast du aber nicht. Denn es fehlten die beiden Functions in deiner Beispieldatei.
Zudem verwendest du solche festen Bezüge. "=SUMME(C6-C1038)"
Deine Daten sind aber schon in Zeile größer 1300
Anzeige
AW: Formular bzw. Zahlen direkt in Zellen einlesen
01.09.2024 20:59:37
chris58
Hallo ralf_b !
Ich habe die ZIP Datei genommen und den Code in die Originaldatei eingefügt. Warum das bei mir nicht ging....................
Jedenfalls danke ........................
Die Formel "=SUMME(C6-C1038)" ist nur dazu da, damit ich weiß, wieviel Anlaufstrom ich vom Netz trotz vollem Akku verbrauche um den Gesamtanlaufstrom fürs ganz Jahr hinzuschätzen.
Was ich noch gemacht habe ist:
Ich habe in den Code, der nun dank Deiner und Yal funktioniert, folgendes dazu gemacht:
Range("A1368:R65000").Select
Selection.Interior.ColorIndex = xlNone
Range("A2").Select
da, mir der Code immer in die folgenden Zeilen keine Linien mehr bringt bzw. mit weiß färbt und dadurch keine Linien mehr zu sehen sind.
Bei der Färbung der 3 Spalten ...............entfärbt der Code die vor der neuen Zeile Stück 5 Zeilen, sodaß dann insgesamt 6 Zeilen nicht gefärbt sind.
'Färbung
R.Interior.Pattern = xlSolid
R.Cells(5).Interior.ColorIndex = 36
R.Cells(7).Interior.ColorIndex = 34
R.Cells(7).Interior.ColorIndex = 35

Kann man das noch ändern..................ich bin begeistert. Einfach Toll
Danke
chris58
Anzeige
AW: Formular bzw. Zahlen direkt in Zellen einlesen
01.09.2024 21:50:55
ralf_b
ich hab keinen Plan was du mit dieser Färberei meinst.
Prüfe wo du im ganzen Projekt irgendwas einfärbst oder entfärbst.
z.b WorkSheet_Change und Userform

ich bin dann hier raus. das Hauptproblem ist ja gelöst.






AW: Formular bzw. Zahlen direkt in Zellen einlesen
02.09.2024 11:19:25
chris58
Hallo ralf_b !
Ich möchte mich sehr herzlich für Deine Hilfe bedanken. Ich habe nach langem Suchen gefunden, was die Linien verschwinden läßt und die Korrektur gemacht.
Danke jedenfalls für Deine Zeit die Du geopfert hast.
lg chris58

'Färbung
R.Interior.Pattern = (statt xlSolid ) xlNone
R.Cells(5).Interior.ColorIndex = 36
R.Cells(7).Interior.ColorIndex = 34
R.Cells(9).Interior.ColorIndex = 35
Anzeige
;

Forumthreads zu verwandten Themen

Anzeige
Anzeige
Anzeige
Anzeige
Entdecke relevante Threads

Schau dir verwandte Threads basierend auf dem aktuellen Thema an

Alle relevanten Threads mit Inhaltsvorschau entdecken
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Entdecke mehr
Finde genau, was du suchst

Die erweiterte Suchfunktion hilft dir, gezielt die besten Antworten zu finden

Suche nach den besten Antworten
Unsere beliebtesten Threads

Entdecke unsere meistgeklickten Beiträge in der Google Suche

Top 100 Threads jetzt ansehen
Anzeige