UserForm: TextBox Wert in Double ändern bei Übergabe an Tabelle

Ich bekomme es einfach nicht hin, das mit diesem Code der Wert aus der TextBox in ein Double gewandelt wird. Es kommt immer in Laufzeitfehler (der erste Fehler bei .Offset(,3) und der nächste bei .Offset(,17) mit Werte unverträglich.) Was ist an folgendem Code falsch? Kann mir da mal einer behilflich sein?

Private Sub cmdUebernahmeEingabedaten_Click()
Dim lngIndex As Long
With Tabelle10
With .Cells(.Rows.Count, 1).End(xlUp).Offset(1)
.Value = EG_Raumname.Value
.Offset(, 1).Value = EG_LfdNrFuerLeuchte.Value
.Offset(, 2).Value = CDbl(EG_Startjahr.Value)
.Offset(, 3).Value = CDbl(EG_LeuchtenAnzahlAlt.Value)
.Offset(, 4).Value = CDbl(EG_AnzahlLMAlt.Value)
.Offset(, 5).Value = EG_BezeichnungLMAlt.Value
.Offset(, 6).Value = CDbl(EG_LebensdauerLMAlt.Value)
.Offset(, 7).Value = CDbl(EG_WattLMAlt.Value)
.Offset(, 8).Value = EG_VGAlt.Value
.Offset(, 9).Value = CDbl(EG_AnzahlVGAlt.Value)
.Offset(, 10).Value = CDbl(EG_AnzahlStarterAlt.Value)
.Offset(, 11).Value = CDbl(EG_BetriebsstundenTag.Value)
.Offset(, 12).Value = CDbl(EG_BetriebstageJahr.Value)
.Offset(, 13).Value = CDbl(EG_KostenLMAlt.Value)
.Offset(, 14).Value = CDbl(EG_KostenEEFVGAlt.Value)
.Offset(, 15).Value = CDbl(EG_KostenStarterAlt.Value)
.Offset(, 16).Value = CDbl(EG_ZeitLMAlt.Value)
.Offset(, 17).Value = CDbl(EG_ZeitVGAltNeu.Text)
.Offset(, 18).Value = CDbl(EG_KostenHMAlt.Value)
.Offset(, 19).Value = CDbl(EG_LeuchtenAnzahlNeu.Value)
.Offset(, 20).Value = CDbl(EG_AnzahlLMNeu.Value)
.Offset(, 21).Value = EG_BezeichnungLMNeu.Value
.Offset(, 22).Value = CDbl(EG_LebensdauerLMNeu.Value)
.Offset(, 23).Value = CDbl(EG_WattLMNeu.Value)
.Offset(, 24).Value = EG_VGNeu.Value
.Offset(, 25).Value = CDbl(EG_AnzahlVGNeu.Value)
.Offset(, 26).Value = CDbl(EG_AnzahlStarterNeu.Value)
.Offset(, 27).Value = CDbl(EG_KostenLeuchtenNeu.Value)
.Offset(, 28).Value = CDbl(EG_KostenLMNeu.Value)
.Offset(, 29).Value = CDbl(EG_KostenStarterNeu.Value)
.Offset(, 30).Value = CDbl(EG_ZeitAltNeuNeu.Value)
.Offset(, 31).Value = CDbl(EG_ZeitLMNeu.Value)
.Offset(, 32).Value = CDbl(EG_KostenHMNeu.Value)
.Offset(, 33).Value = CDbl(EG_KostenTechniker.Value)
.Offset(, 34).Value = CDbl(EG_CO2.Value)
.Offset(, 35).Value = CDbl(EG_KostenkWh.Value)
End With
End With

Hallo zusamen,

habe problem gelöst.
Habe noch eine Prüfung der Eingabefelder voran gesetzt und schon klappt es.
Hier der neue Code:

Private Sub cmdEingabeEndeErgebnis_Click()
Dim ctl As Control

For Each ctl In Me.Controls
If ctl.Tag = „X“ Then
If Len(ctl) = 0 Then
MsgBox „Bitte füllen Sie alle Felder aus“ & vbCrLf & „Wenn Angabe nicht möglich, dann 0“, vbOKOnly + vbOKOnly, „Fehler bei der Eingabe!“
ctl.SetFocus
Exit Sub
End If
End If
Next ctl

Dim lngIndex As Long
With Tabelle10
With .Cells(.Rows.Count, 1).End(xlUp).Offset(1)
.Value = EG_Raumname.Value
.Offset(, 1).Value = EG_LfdNrFuerLeuchte.Value
.Offset(, 2).Value = CDbl(EG_Startjahr.Value)
.Offset(, 3).Value = CDbl(EG_LeuchtenAnzahlAlt.Value)
.Offset(, 4).Value = CDbl(EG_AnzahlLMAlt.Value)
.Offset(, 5).Value = EG_BezeichnungLMAlt.Value
.Offset(, 6).Value = CDbl(EG_LebensdauerLMAlt.Value)
.Offset(, 7).Value = CDbl(EG_WattLMAlt.Value)
.Offset(, 8).Value = EG_VGAlt.Value
.Offset(, 9).Value = CDbl(EG_AnzahlVGAlt.Value)
.Offset(, 10).Value = CDbl(EG_AnzahlStarterAlt.Value)
.Offset(, 11).Value = CDbl(EG_BetriebsstundenTag.Value)
.Offset(, 12).Value = CDbl(EG_BetriebstageJahr.Value)
.Offset(, 13).Value = CDbl(EG_KostenLMAlt.Value)
.Offset(, 14).Value = CDbl(EG_KostenEEFVGAlt.Value)
.Offset(, 15).Value = CDbl(EG_KostenStarterAlt.Value)
.Offset(, 16).Value = CDbl(EG_ZeitLMAlt.Value)
.Offset(, 17).Value = CDbl(EG_ZeitVGAltNeu.Text)
.Offset(, 18).Value = CDbl(EG_KostenHMAlt.Value)
.Offset(, 19).Value = CDbl(EG_LeuchtenAnzahlNeu.Value)
.Offset(, 20).Value = CDbl(EG_AnzahlLMNeu.Value)
.Offset(, 21).Value = EG_BezeichnungLMNeu.Value
.Offset(, 22).Value = CDbl(EG_LebensdauerLMNeu.Value)
.Offset(, 23).Value = CDbl(EG_WattLMNeu.Value)
.Offset(, 24).Value = EG_VGNeu.Value
.Offset(, 25).Value = CDbl(EG_AnzahlVGNeu.Value)
.Offset(, 26).Value = CDbl(EG_AnzahlStarterNeu.Value)
.Offset(, 27).Value = CDbl(EG_KostenLeuchtenNeu.Value)
.Offset(, 28).Value = CDbl(EG_KostenLMNeu.Value)
.Offset(, 29).Value = CDbl(EG_KostenStarterNeu.Value)
.Offset(, 30).Value = CDbl(EG_ZeitAltNeuNeu.Value)
.Offset(, 31).Value = CDbl(EG_ZeitLMNeu.Value)
.Offset(, 32).Value = CDbl(EG_KostenHMNeu.Value)
.Offset(, 33).Value = CDbl(EG_KostenTechniker.Value)
.Offset(, 34).Value = CDbl(EG_CO2.Value)
.Offset(, 35).Value = CDbl(EG_KostenkWh.Value)
End With
End With
End Sub

Private Sub cmdEingabeEndeErgebnis_Click()
Dim ctl As Control
For Each ctl In Me.Controls
If ctl.Tag = „X“ Then
If Len(ctl) = 0 Then
MsgBox „Bitte füllen Sie alle Felder aus“ & vbCrLf & „Wenn
Angabe nicht möglich, dann 0“, vbOKOnly + vbOKOnly, „Fehler
bei der Eingabe!“
ctl.SetFocus
Exit Sub
End If
End If
Next ctl
Dim lngIndex As Long

Hallo Ole,

welche Bewandnis hat es mit dem X in den Tags?

Einmal vbOKOnly reicht

ctl.setFocus brauchste nicht wenn du die Eigenschaft des cmb "TakeFocusOnKlick auf False setzt.

Das Dim lngIndex steht fasch. Vba kompiliert auch paar Dinge bevor es startet und dann compiliert. Für alle Dims wird also vor Start schon Platz reserviert.
Deshalb und für die Übersicht gehören alle Dims nach oben.
Abgesehen davon das die Codezeile eh weg kann.

Gruß
Reinhard

Hallo Reinhard,

wenn ich Dich recht verstehe muss das Dim lngIndex As lon unter dem Dim ctl An Control?

Zu den beiden vbOKOnly kann ich nur sagen, das ich das so im Internet gefunden habe und dort stand das auch mit dem X. Ich habe erst letzte Woche Mittwoch angefangen mich mit VBA zu beschäftigen.

Gruß Ole

Das doppelte vbOKOnly bezieht es sich auf den Zeilenumbruch den ich in der MsgBox habe?

Das doppelte vbOKOnly bezieht es sich auf den Zeilenumbruch
den ich in der MsgBox habe?

Hallo Ole,

nein, Zeilenumbruch bewirkt vbLF

VbOKOnly bewirkt das der User in der MsgBox eine Schaltfläche mit Caption „Ok“ sieht
Würde dein doppeltes VbOKOnly vom Debugger/Vba akzeptiert so stünden in der MsgBox gleiche Buttons. Vba sagt sich, nö, son Kram machen wir nicht und unterschlägt eines.
Oder VbOkOnly hat den Wert 0, dann kannste noch mehr dahinschreiben denn
0=0+0+0

Lese in der Hilfe zu Msgbox nach da steht auch wie man was addieren kann.

Gruß
Reinhard

Hallo Reinhard,

danke für die Erklärung. Werde mir das in meinen Fragebogen tragen. Diesen habe ich mir angelegt um aufkommende Fragen noch genauer nachzulesen.
Habe natürlich das zweite ok rausgenommen.

Ich habe da noch mal eine Frage zu einem Eintrag von heute von mir.

Ich möchte da den Wert in einer Textbox (hier ist eine Tabelle mit Lfd.Nr. 001 bis 500 zugewiesen) über einen CommandButton um 1 erhöhen.
Der CommandButton heißt „cmdMehrLeuchtenImRaum“ und das Textfeld heißt
„EG_LfdNrFuerLeuchte“.
Hat dafür einer eine Lösung?
Ich habe es mit diesem Code versucht, doch da bekomme ich ständig einen Laufzeitfehler 5: ungültiger Prozeduraufruf oder ungültiges Argument.

Private Sub cmdMehrLeuchtenImRaum_Click()

Dim value As Integer
EG_LfdNrFuerLeuchte.value = "Punkt " & Format(Val(Mid(EG_LfdNrFuerLeuchte.value, InStr(EG_LfdNrFuerLeuchte.value, " "))) + 1, „000“)

End Sub … mehr auf http://w-w-w.ms/a4d85y

Vieleicht weißt Du da einen Rat.

Gruß
Ole

Hallo Ole,

wenn ich Dich recht verstehe muss das Dim lngIndex As lon
unter dem Dim ctl An Control?

„muß“ nicht. Ich sags mal so, bei Leuten die nie bis selten in Foren nachfragen sah ich das nie so, da waren alle Dims Consts u.ä. immer anfangs des Codes.
In manchen Programmiersprachen ist das sogar Pflicht *glaub*
Für den jetzigen Code egal da du ja die Variable gar nicht nutzt.

Zumindest kriegste vom Ausbilder Punktabzug wenn du dich bei Struktogrammen nicht an die Regel erst Definition, dann Deklaration, dann der Rest.
Sorry, ist so 2+ Jahrzehnte her daß ich 4-6 Wochen lang C hatte.

Jetzt mache ich keine Struktogramme, es kommt selten vor daß ich beim einfach loscoden den Überblick verlier. Dann „schmiere“ ich für den Code oder Codebereich auf ein Blatt einen PAP (kannste googeln). Dann codiere ich den und das führt meist sofort zum Ziel ansonsten nehm ich den PAP mit in den Park und überprüf die Logik.

Zu den beiden vbOKOnly kann ich nur sagen, das ich das so im
Internet gefunden habe und dort stand das auch mit dem X.

*menno* muß ich dir alles aus der Nase ziehen. *leicht säuerlich guck*
Mich interessiert warum DU da bei manchen der TBs bei Tag ein X eingetragen hast.

Um „leicht säuerlich“ nicht zu steigern BITTE ich dich alle Beitragsfolgen wo wir beide beteiligt sind auszudrucken. Dann streichst du alle meine Nachfragen die du so beantwortet hast das ich damit was anfangen kann durch. Bei den übrigen bitte
ich um aussagefähige Antworten, danke.

Ich habe erst letzte Woche Mittwoch angefangen mich mit VBA zu beschäftigen.

Respekt, dafür hast du schon sehr gute Dinge drauf *sehr staun*

Gruß
Reinhard

Private Sub cmdMehrLeuchtenImRaum_Click()
Dim value As Integer
EG_LfdNrFuerLeuchte.value = "Punkt " &
Format(Val(Mid(EG_LfdNrFuerLeuchte.value,
InStr(EG_LfdNrFuerLeuchte.value, " "))) + 1, „000“)

End Sub

Hallo Ole,

wenn in EG_LfdNrFuerLeuchte kein Leerzeichen drinsteht errgibt Instr(…) eine 0 und Mid(Text,0) bringt diesen Fehler.

Was soll der Unsinn mit
Dim value As Integer
Vermeide grundsätzlich von Vba benutzte Namen als eigene Variablen zu deklarieren. Benutze myValue oder meinWert oder sonstwas.
Also dieses Dim wiedermal löschen, macht keinen Sinn und bringt ggfs. nur Ärger.

Gruß
Reinhard