Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1920to1924
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

die Methode Value für... Fehlermeldung

die Methode Value für... Fehlermeldung
09.03.2023 19:58:47
Elle
Hallo
ich bräuchte dringend Hilfe bei meiner VBA Datei. Ich habe zwei UserFormen. In UserForm1 berechne ich mit verschiedenen TextBoxen in denen ich verschiedene Werte eintragen kann, drei verschiedene Werte. Die ganzen Werte sollen dann in der Tabelle gespeichert werden. Das klappt auch ohne Probleme. In UserForm2 sollen die Werte aus der Tabelle dann in eine ListBox geladen werden in der ich die Werte auswählen kann und die ausgewählten Werte dann in UserForm1, in die jeweiligen TextBoxen eingetragen und erneut berechnet kann. Bis dahin klappt es auch noch. Wenn ich die neuen Werte dann jedoch speichern möchte wird mir die Fehlermeldung "die Methode Value für das Objekt Range ist fehlgeschlagen" angezeigt und mein Excel stürzt ab. Beim debuggen wird mir dann selection.value=LfdNr makiert betrifft jedoch wenn ich selection.value=LfdNr auskommentiere die nächste Zeile usw..
Wäre super wenn mir jemand helfen könnte bin ganz neu im Programmieren und das ist mein erstes Projekt.

Private Sub cb_speichern_Click()
Dim i As Integer
If WerteBerechnet = False Then
MsgBox "Bitte zuerst eine Rechnung ausführen", vbCritical
Else
Worksheets("Tabelle1").Select
Range("A2").Select
LfdNr = 1

While Selection.Value > ""
Selection.Offset(1, 0).Select
LfdNr = LfdNr + 1
Wend

Selection.Value = LfdNr
Selection.Offset(0, 1).Value = tb_Länge.Value
Selection.Offset(0, 2).Value = tb_Breite.Value
Selection.Offset(0, 3).Value = tb_Höhe.Value
Selection.Offset(0, 4).Value = tb_Winkel.Value
Selection.Offset(0, 5).Value = CDbl(tb_A1.Value)
Selection.Offset(0, 6).Value = l
Selection.Offset(0, 7).Value = CDbl(tb_VolBodenplatte.Value)
Selection.Offset(0, 8).Value = CDbl(tb_VolMauer.Value)
Selection.Offset(0, 9).Value = CDbl(tb_VolGesamt.Value)
WerteBerechnet = False
End If
End Sub

6
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: die Methode Value für... Fehlermeldung
09.03.2023 21:24:36
ralf_b
probiers mal damit
Private Sub cb_speichern_Click()
Dim i As Integer
If WerteBerechnet = False Then
 '   MsgBox "Bitte zuerst eine Rechnung ausführen", vbCritical
  '  Exit Sub
End If
With Worksheets("Tabelle1")
    While .Range("A" & i + 1).Value > ""
        i = i + 1
    Wend
    
    With .Range("A" & i + 1)
        .Value = i + 1
        .Offset(0, 1).Value = tb_Länge.Value
        .Offset(0, 2).Value = tb_Breite.Value
        .Offset(0, 3).Value = tb_Höhe.Value
        .Offset(0, 4).Value = tb_Winkel.Value
        .Offset(0, 5).Value = CDbl(tb_A1.Value)
        .Offset(0, 6).Value = l
        .Offset(0, 7).Value = CDbl(tb_VolBodenplatte.Value)
        .Offset(0, 8).Value = CDbl(tb_VolMauer.Value)
        .Offset(0, 9).Value = CDbl(tb_VolGesamt.Value)
    End With
     WerteBerechnet = False
  End With
  
End Sub

Anzeige
AW: die Methode Value für... Fehlermeldung
09.03.2023 21:59:50
Elle
Hallo Ralf, das hat leider nicht funktioniert der Fehler wird mir dann bei .Value = i + 1angezeigt
Hier ist die UserForm1 (ohne die Neuerung):
Private Sub cb_speichern_Click()
Dim i As Integer
If WerteBerechnet = False Then
    MsgBox "Bitte zuerst eine Rechnung ausführen", vbCritical
Else
    Worksheets("Tabelle1").Select
    Range("A2").Select
    Anzahl = 1
    
    While Selection.Value > ""
        Selection.Offset(1, 0).Select
        Anzahl = Anzahl + 1
    Wend
    
    Selection.Value = Anzahl
    Selection.Offset(0, 1).Value = tb_Länge.Value
    Selection.Offset(0, 2).Value = tb_Breite.Value
    Selection.Offset(0, 3).Value = tb_Höhe.Value
    Selection.Offset(0, 4).Value = tb_Winkel.Value
    Selection.Offset(0, 5).Value = CDbl(tb_A1.Value)
    Selection.Offset(0, 6).Value = l
    Selection.Offset(0, 7).Value = CDbl(tb_VolBodenplatte.Value)
    Selection.Offset(0, 8).Value = CDbl(tb_VolMauer.Value)
    Selection.Offset(0, 9).Value = CDbl(tb_VolGesamt.Value)
    WerteBerechnet = False
End If
End Sub
Private Sub UserForm_Activate()
'Konstante beim ersten Öffnen festlegen
d = 0.2
End Sub
Private Sub tb_Höhe_Exit(ByVal Cancel As MSForms.ReturnBoolean)
'Höhenwert aus Formular einlesen und auf Eingabegrenzen prüfen
WerteBerechnet = False                                              'Wert wurde geändert, Berechnung erforderlich
If tb_Höhe.Value >= 1 Then                                          'Minimal gültige Eingabe
    Else: MsgBox " Minimalwert der Höhe von 1m unterschritten", vbCritical     'sonst Wert zu klein Melden
    tb_Höhe.SetFocus
    tb_Höhe.Value = 1                                               'Mindestwert speichern
End If
If tb_Höhe.Value = 10 Then                                         'Maximal gültige Eingabe
    Else
    MsgBox "Maximalwert der Höhe 10m überschritten", vbCritical      'sonst Wert zu groß melden
    tb_Höhe.SetFocus
    tb_Höhe.Value = 10                                              'Maximalwert speichern
End If
End Sub
Private Sub tb_Breite_Exit(ByVal Cancel As MSForms.ReturnBoolean)
'Breite der Bodenplatte aus Formular einlesen und Eingabegrenzen prüfen
WerteBerechnet = False                                              'Wert wurde geändert Berechnung erforderlich
 
If tb_Breite.Value >= 1 Then                                       'Minimal gültige Eingabe
    Else
    MsgBox "Minimalwert der Länge 1m unterschritten", vbCritical   'sonst Wert zu klein melden
    tb_Breite.SetFocus
    tb_Breite.Value = 1                                            'Mindestwert speichern
End If
    
If tb_Breite.Value = 5 Then                                       'Maximal gültige Eingabe
    Else
    MsgBox "Maximalwert der Länge von 5m überschritten", vbCritical 'sonst Wert zu groß Melden
    tb_Breite.SetFocus
    tb_Breite.Value = 5                                            ' Maximalwert speichern
End If
End Sub
Private Sub tb_Länge_Exit(ByVal Cancel As MSForms.ReturnBoolean)
'Länge der Bodenplatte aus Formular einlesen und Eingabegrenzen prüfen
WerteBerechnet = False                                              'Wert wurde geändert Berechnung erforderlich
 
If tb_Länge.Value >= 1 Then                                        'Minimal gültige Eingabe
    Else
    MsgBox "Minimalwert der Länge 1m unterschritten", vbCritical   'sonst Wert zu klein melden
    tb_Länge.SetFocus
    tb_Länge.Value = 1                                             'Mindestwert speichern
    
End If
    If tb_Länge.Value = 5 Then                                    'Maximal gültige Eingabe
    Else
    MsgBox "Maximalwert der Länge 5m überschritten", vbCritical    'sonst Wert zu groß melden
    tb_Länge.SetFocus
    tb_Länge.Value = 5                                             'Maximalwert speichern
    
End If
tb_A1.Value = tb_Länge * 0.2                                       'Abstand Mauer zu Vorderkant Bodenplatte
End Sub
Private Sub tb_Winkel_Exit(ByVal Cancel As MSForms.ReturnBoolean)
'Winkel der Mauerposition aus Formular einlesen und auf Eingabegrenzen prüfen
WerteBerechnet = False                                              'Wert wurde geändert BErechnung erforderlich
If tb_Winkel.Value >= 0 Then                                       'Minimal gültige Eingabe
    Else
    MsgBox "Minimalwert von 0° unterschritten", vbCritical         'sonst Wert zu klein melden
    tb_Winkel.SetFocus
    tb_Winkel.Value = 0                                            'Minimalwert speichern
End If
If tb_Winkel.Value = 180 Then                                     'Maximal gültige Eingabe
    Else
    MsgBox "Maximalwert von 180° überschritten", vbCritical        'sonst Wert zu groß melde
    tb_Winkel.SetFocus
    tb_Winkel.Value = 180                                          'Maximalwert speichern
End If
End Sub
Function VolumenFundament(a, b) As Double
V1 = a * b * d
'Berechnet das Volumen des Fundamentes
VolumenFundament = V1
End Function
Function VolumenMauer(a As Double, b As Double, alpha As Double, h As Double, A1 As Double) As Double
'Berechnet das Volumen der Mauer
Dim AlphaRad As Double
'Eingabewinkel Alpha in Berechnungswinkel umwandeln
'Eingabewinkel wird dabei um 90° gedreht und anschliesend für Berechnung im Bogenmaß umgewandelt
AlphaRad = (alpha - 90) * (WorksheetFunction.Pi() / 180)
'Berechnung der LÄnge l der Mauer
If alpha >= 90 Then                                     '1.Fall: Winkeleingabe ist zwischen 90 und 180 Grad
        If b * Tan(AlphaRad) >= a - A1 Then             'und Hyponthenuse C des Hilfsdreiecks schneidet die obere Seite b
        l = (a - A1) / (Sin(AlphaRad))                  'Seite A des Hilfsdreiecks ist a-A1
        Else
        l = b / (Cos(AlphaRad))                         'sonst 2.Fall: Seite B des HIlfsdreicks ist immer b
        End If
Else                                                    ' 3.Fall: Winkeleingabe ist kleiner als 90 Grad
    If b * Tan(Abs(AlphaRad)) = A1 Then                'und Hypothenuse des Hilfsdreiecks schneidet die b Seite
    l = b / Cos(Abs(AlphaRad))                          'Seite B des Hilfsdreiecks ist immer b
    Else
    l = A1 / Sin(Abs(AlphaRad))                         'sonst 4.Fall: Seite a des Hilfdreiecks ist immer A1
    End If
End If
'Volumenberechnung
VolumenMauer = Round(l * d * h, 3)
           
End Function
Private Sub cb_berechnen_Click()
tb_VolBodenplatte = VolumenFundament(CDbl(tb_Länge.Value), CDbl(tb_Breite.Value))
tb_VolMauer = VolumenMauer(CDbl(tb_Länge.Value), CDbl(tb_Breite.Value), CDbl(tb_Winkel.Value), CDbl(tb_Höhe.Value), CDbl(tb_A1.Value))
tb_VolGesamt.Value = CDbl(tb_VolBodenplatte) + CDbl(tb_VolMauer)
WerteBerechnet = True
End Sub
Userform2:
Private Sub cb_bearbeiten_Click()
Dim tb_Länge As Double
Dim tb_Breite As Double
Dim tb_Höhe As Double
Dim tb_Winkel As Double
Dim tb_A1 As Double
UserForm1.tb_Länge.Value = lb_LfdNr.List(lb_LfdNr.ListIndex, 1)
UserForm1.tb_Breite.Value = lb_LfdNr.List(lb_LfdNr.ListIndex, 2)
UserForm1.tb_Höhe.Value = lb_LfdNr.List(lb_LfdNr.ListIndex, 3)
UserForm1.tb_Winkel.Value = lb_LfdNr.List(lb_LfdNr.ListIndex, 4)
UserForm1.tb_A1.Value = lb_LfdNr.List(lb_LfdNr.ListIndex, 5)
UserForm1.Show
End Sub
Private Sub UserForm_Activate()
'allgemeine Einstellungen
'Überschriften
lb_LfdNr.ColumnHeads = True
'Spaltenanzahl
lb_LfdNr.ColumnCount = 10
'Spaltenbreite
lb_LfdNr.ColumnWidths = "30;60;60;60;60;60;60;80;60;60;"
'Listbox mit we
lb_LfdNr.RowSource = Tabelle1.Range("Bauwerkdaten").Address
'Spalte auswählen können
lb_LfdNr.ListStyle = fmListStyleOption
End Sub

Anzeige
AW: die Methode Value für... Fehlermeldung
10.03.2023 00:26:36
ralf_b
Völlig unnötig den anderen Code zu posten. Weil die ganzen Verweise auf die Controls habe ich nicht und kann den Code somit hier nicht laufen lassen. Und der andere Code hat gar nichts mit deinem Value Problem zu tun.
Bei mit läuft das Value = i +1 durch wenn ich die nächsten Zeilen auskommentiere und die Controls somit umgehe.
Also hast du irgendwas falsch übernommen. Lade eine Beispieldatei hoch.
AW: die Methode Value für... Fehlermeldung
09.03.2023 21:26:40
onur
Ausser dass der Code recht unbeholfen ist (das ist völlig normal am Anfang) und i den Wert 0 hat, da du nix damit machst, ausser zu dimensionieren, ist mir auf Anhieb nix aufgefallen. Poste doch mal die Datei.
Anzeige
Schon gelöst oder nicht?
10.03.2023 17:59:56
Yal
Noch ein Vorschlag:
Private Sub cb_speichern_Click()
Dim Z As Range 'Z wie Zelle
'Prüfung mit Exitus
    If Not WerteBerechnet Then
        MsgBox "Bitte zuerst eine Rechnung ausführen", vbCritical
        Exit Sub
    End If
'normale Behandlung
    With Worksheets("Tabelle1")
    'Zeile der ersten Leere Zellen in Spalte A ab A2:
        Set Z = Range(.Range("A2"), .Range("A99999")).SpecialCells(xlCellTypeBlanks).Cells(1).EntireRow
    End With
'nur eine Zeile, daher entspricht es Spalte 1, Spalte 2, usw
    Z.Cells(1) = Z.Row
    Z.Cells(2) = tb_Länge.Value
    Z.Cells(3) = tb_Breite.Value
    Z.Cells(4) = tb_Höhe.Value
    Z.Cells(5) = tb_Winkel.Value
    Z.Cells(6) = CDbl(tb_A1.Value)
    Z.Cells(7) = l
    Z.Cells(8) = CDbl(tb_VolBodenplatte.Value)
    Z.Cells(9) = CDbl(tb_VolMauer.Value)
    Z.Cells(10) = CDbl(tb_VolGesamt.Value)
    WerteBerechnet = False
End Sub
VG
Yal
Anzeige
AW: Schon gelöst oder nicht?
11.03.2023 09:10:39
Elle
Hallo ja das Problem ist schon gelöst. Der Fehler lag wahrscheinlich darin, dass ich in der Variablendeklaration die Textboxen als Variablen deklariert habe :/ Als ich das rausgeholt habe lief mein Programm wieder. Trotzdem Dankeschön für den Vorschlag. LG

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige