Collapse column

Autor Thema: VBA compiling probleme  (Gelesen 4309 mal)

Offline Wazzap

  • Newbie
  • *
  • Beiträge: 7
    • Profil anzeigen
  • Office-KnowHow: Amateur
  • VBA-KnowHow- : Wenig
  • Version [Office] : Office 2010
VBA compiling probleme
« am: März 30, 2015, 16:33:18 Nachmittag »
Hallo Excel Experten.
Ich muss für mein Studium ein Integralrechner in VBA programmieren. Da ich kein Informatik studiere überfordert mich das ganze ein wenig und im Code tauchen mehr und mehr Fehler auf deren Ursachen meist nicht soeinfach ersichtlich sind (für einen Laien).

Ich bekomme die Fehlermeldung " Compiling error : Argument not optional"

Ich hänge den code mal an, es wäre sehr nett wenn jemand den Fehler entdeckt und/oder weitere.

Option Explicit


Dim a As Double
Dim b As Double
Dim n As Integer
Dim ka As Double
Dim kb As Double
Dim d As Double

Sub Cleaning()
Cells.Clear
Cells(8, 250).Value = "i ="
Cells(8, 251).Value = "xi ="
Cells(8, 252).Value = "yi = f(xi) ="
End Sub

Sub Checkab()

     a = Integral.TB_untere.Value
     b = Integral.TB_obere.Value
     'Kontrolle ob untere Grenze kleiner ist als obere Grenze
     If a > b Then
        MsgBox "Der Wert von a muss kleiner sein als der Wert von b!"
     End If
     If a = b Then
       MsgBox "Der Wert von a muss kleiner sein als der Wert von b!"
     End If
End Sub
Sub Vorberechnung()

    a = Integral.TB_untere.Value
    b = Integral.TB_obere.Value
    n = Integral.TB_teilbereiche.Value
    ka = Integral.TB_ka.Value
    kb = Integral.TB_kb.Value
   
    d = (b - a) / n

    Dim i As Integer
    Dim xi As Double
    Dim yi As Double
   
   
    For i = 0 To n
    Cells(9 + i, 250).Value = i
    xi = a + i * d
    Cells(9 + i, 251).Value = xi
    yi = f(xi, ka, kb)
    Cells(9 + i, 252).Value = yi
    Next i
       
End Sub
Sub accurateSolution()

    a = Integral.TB_untere.Value
    b = Integral.TB_obere.Value
    ka = Integral.TB_ka.Value
    kb = Integral.TB_kb.Value

    Integral.TB_Exakt.Value = SF(b, ka, kb) - SF(a, ka, kb)
End Sub

Sub approximateSolution()

    Dim sum As Double
    sum = 0
    Dim i As Integer
    For i = 1 To n - 1
        sum = sum + Cells(9 + i, 252).Value
    Next i
   
    Integral.TB_trapez.Value = d / 2 * (Cells(9, 252).Value + _
    2 * sum + Cells(9 + n, 252))
End Sub
Function f(x As Double, ka As Double, kb As Double, e As Double) As Double

    f = ka * x * e(1) ^ x - kb * x
   
End Function

Function SF(x As Double, ka As Double, kb As Double, e As Double) As Double
    SF = ka * (x - 1) * e() ^ x - (x ^ 2 * kb) / 2
End Function


Das ist der Code des Modules.
Und das hier unten ist der Code der Userform
Option Explicit

Dim a As Double
Dim b As Double
Dim n As Integer
Dim ka As Double
Dim kb As Double


'Es werden alle Variablen global deklariert.

Private Sub BT_Clear_Click()
'Zurücksetzen aller Textboxen, so dass sie leer sind.
TB_untere.Locked = False
TB_obere.Locked = False
TB_teilbereiche.Locked = False
TB_ka.Locked = False
TB_kb.Locked = False
TB_ka.Value = ""
TB_kb.Value = ""
TB_untere.Value = ""
TB_obere.Value = ""
TB_teilbereiche.Value = ""
TB_trapez.Value = ""
TB_Exakt.Value = ""
End Sub



Private Sub BT_ende_Click()
Unload Me
'Button beendet Programm
End Sub

Private Sub TB_untere_Change()
If IsNumeric(TB_untere.Value) Then
a = TB_untere.Value
      If a = 0 Then
      MsgBox "Der Wert der unteren Grenze darf nicht Null sein!"
      TB_untere.Value = ""
      End If
           If a < 0 Then
           MsgBox "Der Wert der unteren Grenze muss größer als Null sein!"
           End If
Else
MsgBox "Es ist eine numerische Eingabe erforderlich!"
TB_untere.Value = ""
End If
'Wenn eine Zahl eingegeben wird, wird sie auf der Variablen a gespeichert,
'ist sie kleiner oder gleich Null erscheint eine Messagebox, dies geschieht auch
'wenn es sich um eine nicht numerische Eingabe handelt!
End Sub

Private Sub TB_obere_Change()
If IsNumeric(TB_obere.Value) Then
b = TB_obere.Value
      If b > 65534 Then
      MsgBox "Der Wert der oberen Grenze ist zu hoch. Bitte wählen sie einen Wert kleiner als 65534!"
      TB_obere.Value = ""
      End If
         
Else
MsgBox "Es ist eine numerische Eingabe erforderlich!"
TB_obere.Value = ""
End If
'Wenn eine Zahl eingegeben wird, wird sie auf der Variablen b gespeichert,
'ist sie zu groß erscheint eine Messagebox, dies geschieht auch
'wenn es sich um eine nicht numerische Eingabe handelt!
End Sub

Private Sub TB_teilbereiche_Change()
If IsNumeric(TB_teilbereiche.Value) Then
n = TB_teilbereiche.Value
        If n = 0 Then
        MsgBox "n muss eine natürliche Zahle sein!"
        TB_teilbereiche.Value = ""
                If Not CInt(n) = Abs(n) Then
                MsgBox " n muss eine natürliche Zahl sein!"
                TB_teilbereiche.Value = ""
                End If
        End If
Else
MsgBox "Es ist eine numerische Eingabe erforderlich!"
TB_teilbereiche.Value = ""
End If
'Es erscheinen Messageboxen wenn n=0 oder wenn n die Bedingungen einer natürlichen Zahl nicht erfüllt!
'Sind ale Bedingungen erfüllt wird der Wert auf der Variablen n gespeichert.
End Sub

Private Sub TB_ka_Change()
    If IsNumeric(TB_ka.Value) Then
     ka = TB_ka.Value
    Else
     MsgBox "Es ist eine numerische Eingabe erforderlich!"
     TB_ka.Value = ""
    End If
End Sub

Private Sub TB_kb_Change()
    If IsNumeric(TB_kb.Value) Then
     kb = TB_kb.Value
    Else
     MsgBox "Es ist eine numerische Eingabe erforderlich!"
     TB_kb.Value = ""
    End If
End Sub


Private Sub BT_ergebniss_Click()

TB_untere.Locked = True
TB_obere.Locked = True
TB_teilbereiche.Locked = True
TB_ka.Locked = True
TB_kb.Locked = True

Vorberechnung
accurateSolution
approximateSolution
 
TB_Exakt.Value = CDbl(TB_Exakt.Value)
TB_trapez.Value = CDbl(TB_trapez.Value)
End Sub

Ich danke euch schon jetzt vielmals
Mfg Fabian

Keine Lösung gefunden? Du kannst Dich gerne an unser erfahrenes Experten-Team wenden und Dein Anliegen in Auftrag geben.
>>> Schnell und einfach ein unverbindliches Angebot anfordern. Per E-Mail an anfrage@excel-inside.de oder per Online-Formular
<<<

!!! Wichtige Information
!!! Dieses Forum steht aus technischen Gründen ab dem 11. September 2019 nur noch im Lesemodus zur Verfügung.
Das NEUE Office-Fragen-Forum kannst du aber unter der gewohnten Domain https://office-fragen.de wie gewohnt nutzen.

- Wir freuen uns auf deinen Besuch im neuen Forum.

Offline maninweb

  • Global Moderator
  • Hero Member
  • *****
  • Beiträge: 1.063
    • Profil anzeigen
    • Excel Formula Translator
  • Office-KnowHow: Experte
  • VBA-KnowHow- : Sehr gut
  • Version [Office] : Office 2016
Antw: VBA compiling probleme
« Antwort #1 am: März 30, 2015, 19:55:34 Nachmittag »
Hallo Fabian,

Du hast eigene Funktionen deklariert, die z.B. 4 Argumente benötigen. Z.B. f(...) und SF(...).
Wenn Du die Funktionen nutzt, musst Du auch entsprechend viele Argumente übergeben.

Wofür is das e As Double am Ende der Funktionen gedacht? Zumal Du dann auf ein Feld e(x)
zugreifen möchtest, was nicht geht. Falls Du eine Exponentiation mit der Zahl e meinst, dann
kannst Du die VBA-Funktion exp() verwenden, z.B. exp(10 * 10).

Den Userform-Code habe ich nicht angeschaut, das baue ich nicht nach. Könntest (auch für andere)
eine Beispieldatei hier hochladen.

Gruß


Microsoft Excel Expert · Microsoft Most Valuable Professional (MVP) from 01/2011 - 06/2019
https://de.excel-translator.de :: Online Excel-Formel-Übersetzer :: Alle Übersetzungen der Excel Funktionen & Fehlerwerte

Offline Wazzap

  • Newbie
  • *
  • Beiträge: 7
    • Profil anzeigen
  • Office-KnowHow: Amateur
  • VBA-KnowHow- : Wenig
  • Version [Office] : Office 2010
Office 2010: Antw: VBA compiling probleme
« Antwort #2 am: März 30, 2015, 22:31:40 Nachmittag »
Danke erstmal, der Compiling Error hat sich durch ersetzen von e(1) durch exp(1) erledigt.
Das Programm läuft soweit problemlos durch. Nur das ergebniss kommt mir ein wenig utopisch hoch vor und ist
merkwürdigerweise grau hinterlegt.

Momentan habe ich jedoch das Problem oder vielmehr den nervenden Nebeneffekt,das beim Check IsNumeric und leerem Textfeld trozdem zur Anzeige "Bitte numerische Zah angeben!" kommt. Das würde ich gern vermeiden.jemand ideen?

Ich pack die Datein mal in den Anhang.

Vielen Dank schonmal an alle die sich dait befassen
Mfg Fabian

Offline Wazzap

  • Newbie
  • *
  • Beiträge: 7
    • Profil anzeigen
  • Office-KnowHow: Amateur
  • VBA-KnowHow- : Wenig
  • Version [Office] : Office 2010
Antw: VBA compiling probleme
« Antwort #3 am: April 01, 2015, 16:24:26 Nachmittag »
Hat niemand eine Idee? Bitte helft mir doch :)

Offline maninweb

  • Global Moderator
  • Hero Member
  • *****
  • Beiträge: 1.063
    • Profil anzeigen
    • Excel Formula Translator
  • Office-KnowHow: Experte
  • VBA-KnowHow- : Sehr gut
  • Version [Office] : Office 2016
Antw: VBA compiling probleme
« Antwort #4 am: April 02, 2015, 08:30:12 Vormittag »
Hallo,

erscheint z.B. beim Zurücksetzen. Das liegt daran, dass Du dort die Werte der Textfelder zurücksetzt und somit dann
auch die Ereignisse auslöst. Zum Verhindern, kannst Du eine globale Variable in der UserForm deklarieren und diese
in jedem Ereignis abfragen. Z.B. auszugsweise so:

Code: Visual Basic
  1. :
  2. :
  3. Dim noEvents As Boolean
  4.  
  5. Private Sub BT_Clear_Click()
  6. :
  7. :
  8. noEvents = True
  9.  
  10. TB_ka.Value = ""
  11. TB_kb.Value = ""
  12. TB_untere.Value = ""
  13. TB_obere.Value = ""
  14. TB_teilbereiche.Value = ""
  15. TB_trapez.Value = ""
  16. TB_Exakt.Value = ""
  17.  
  18. noEvents = False
  19. :
  20. :
  21. Private Sub TB_obere_Change()
  22.  
  23. If Not noEvents Then
  24.  
  25.   If IsNumeric(TB_obere.Value) Then
  26.   :
  27.   :
  28.   Else
  29.  
  30.   MsgBox "Es ist eine numerische Eingabe erforderlich!"
  31.  
  32.   noEvents = True
  33.   TB_obere.Value = ""
  34.   noEvents = False
  35.  
  36.   End If
  37.  
  38. End If
  39.  
  40. End Sub
  41.  
Gruß
Microsoft Excel Expert · Microsoft Most Valuable Professional (MVP) from 01/2011 - 06/2019
https://de.excel-translator.de :: Online Excel-Formel-Übersetzer :: Alle Übersetzungen der Excel Funktionen & Fehlerwerte

Keine Lösung gefunden? Du kannst Dich gerne an unser erfahrenes Experten-Team wenden und Dein Anliegen in Auftrag geben.
>>> Schnell und einfach ein unverbindliches Angebot anfordern. Per E-Mail an anfrage@excel-inside.de oder per Online-Formular
<<<

!!! Wichtige Information
!!! Dieses Forum steht aus technischen Gründen ab dem 11. September 2019 nur noch im Lesemodus zur Verfügung.
Das NEUE Office-Fragen-Forum kannst du aber unter der gewohnten Domain https://office-fragen.de wie gewohnt nutzen.

- Wir freuen uns auf deinen Besuch im neuen Forum.

Offline Wazzap

  • Newbie
  • *
  • Beiträge: 7
    • Profil anzeigen
  • Office-KnowHow: Amateur
  • VBA-KnowHow- : Wenig
  • Version [Office] : Office 2010
Antw: VBA compiling probleme
« Antwort #5 am: April 03, 2015, 09:35:05 Vormittag »
Vielen Dank,ich werde es gleich mal ausprobieren.
Zufällig noch ne Idee warum das Ergebniss zwar vom reinen Zahlenwert her stimmt, aber zB. statt 198.786 nur 198786 da steht und man kein Komma etc sieht?

Mfg Fabian

Offline maninweb

  • Global Moderator
  • Hero Member
  • *****
  • Beiträge: 1.063
    • Profil anzeigen
    • Excel Formula Translator
  • Office-KnowHow: Experte
  • VBA-KnowHow- : Sehr gut
  • Version [Office] : Office 2016
Antw: VBA compiling probleme
« Antwort #6 am: April 03, 2015, 10:30:18 Vormittag »
Moin,

falls Du die Ausgabe im Textfeld meinst, musst Du diese formatieren, z.B., wenn x eine Variable vom Typ Double ist:

y = Format(x, "#,##0.00"), Format im EN-US-Format.

Gruß
Microsoft Excel Expert · Microsoft Most Valuable Professional (MVP) from 01/2011 - 06/2019
https://de.excel-translator.de :: Online Excel-Formel-Übersetzer :: Alle Übersetzungen der Excel Funktionen & Fehlerwerte

Offline Wazzap

  • Newbie
  • *
  • Beiträge: 7
    • Profil anzeigen
  • Office-KnowHow: Amateur
  • VBA-KnowHow- : Wenig
  • Version [Office] : Office 2010
Antw: VBA compiling probleme
« Antwort #7 am: April 03, 2015, 10:57:33 Vormittag »
Danke.  :)

Ich hab die Boolean Variable noEvent mit eingebaut, sieht soweit ganz gut aus. Jetzt meckert excel aber rum, das er die doch bitte noch definiert haben möchte.
Muss ich ihm noch sagen wann noEvent true und wann false ist?und vor allem wie.

Ich muss mich solangsam mal für mein ganzes Unwissen entschuldigen^^

Offline maninweb

  • Global Moderator
  • Hero Member
  • *****
  • Beiträge: 1.063
    • Profil anzeigen
    • Excel Formula Translator
  • Office-KnowHow: Experte
  • VBA-KnowHow- : Sehr gut
  • Version [Office] : Office 2016
Antw: VBA compiling probleme
« Antwort #8 am: April 03, 2015, 11:29:24 Vormittag »
Hallo,

dann musst Du diese auch definieren. Wie bei Dir oben ähnlich zu Dim a As Double dann Dim noEvents As Boolean.
Auf True setzen, wenn die Ereignisse = alles, was X_X_Click, usw. ist - ausgelöst werden. Ereignisse werden dann
ausgelöst, wenn Du einen Wert z.B. Textfeld änderst. Siehe der Beispielcode, von meinem zweiten Vorbeitrag, wo
das beispielhaft für ein Textfeld gemacht ist. Dieselbe Systematik dann überall wo Du es brauchst.

Du kannst zum Testen & Verständnis auch überall bei jedem Ereignis eine MsgBox einbauen. Dann siehst Du wann
und wo diese ausgelöst werden. Wenn alles klappt, die MsgBox wieder weg.

Gruß
Microsoft Excel Expert · Microsoft Most Valuable Professional (MVP) from 01/2011 - 06/2019
https://de.excel-translator.de :: Online Excel-Formel-Übersetzer :: Alle Übersetzungen der Excel Funktionen & Fehlerwerte

Keine Lösung gefunden? Du kannst Dich gerne an unser erfahrenes Experten-Team wenden und Dein Anliegen in Auftrag geben.
>>> Schnell und einfach ein unverbindliches Angebot anfordern. Per E-Mail an anfrage@excel-inside.de oder per Online-Formular
<<<

!!! Wichtige Information
!!! Dieses Forum steht aus technischen Gründen ab dem 11. September 2019 nur noch im Lesemodus zur Verfügung.
Das NEUE Office-Fragen-Forum kannst du aber unter der gewohnten Domain https://office-fragen.de wie gewohnt nutzen.

- Wir freuen uns auf deinen Besuch im neuen Forum.

Offline Wazzap

  • Newbie
  • *
  • Beiträge: 7
    • Profil anzeigen
  • Office-KnowHow: Amateur
  • VBA-KnowHow- : Wenig
  • Version [Office] : Office 2010
Antw: VBA compiling probleme
« Antwort #9 am: April 03, 2015, 12:05:17 Nachmittag »
Bei mir kreidet er direkt das erste noEvent in der If-Bedingung an und sagt mir " Compiling Error : Variable not defined"
Private Sub TB_ka_Change()
 
If Not noEvents Then
 
  If IsNumeric(TB_ka.Value) Then ka = TB_ka.Value
:
:
  Else
 
  MsgBox "Es ist eine numerische Eingabe erforderlich!"
 
  noEvents = True
  TB_ka.Value = ""
  noEvents = False
 
  End If
 
End If

End Sub

Ich habe deinen Beispielcode als Gerüst genommen und meine Variablen noch eingebaut. Aber irgendwo hab ich noch n Fehler gemacht..

Erstmal noch vielen Dank für deine Hilfe.

Offline maninweb

  • Global Moderator
  • Hero Member
  • *****
  • Beiträge: 1.063
    • Profil anzeigen
    • Excel Formula Translator
  • Office-KnowHow: Experte
  • VBA-KnowHow- : Sehr gut
  • Version [Office] : Office 2016
Antw: VBA compiling probleme
« Antwort #10 am: April 03, 2015, 16:39:34 Nachmittag »
Hallo,

hab's mal (auf die Schnelle und nur kurz durchgespielt) in Deine Beispieldatei eingebaut.

Gruß
Microsoft Excel Expert · Microsoft Most Valuable Professional (MVP) from 01/2011 - 06/2019
https://de.excel-translator.de :: Online Excel-Formel-Übersetzer :: Alle Übersetzungen der Excel Funktionen & Fehlerwerte

Offline Wazzap

  • Newbie
  • *
  • Beiträge: 7
    • Profil anzeigen
  • Office-KnowHow: Amateur
  • VBA-KnowHow- : Wenig
  • Version [Office] : Office 2010
Antw: VBA compiling probleme
« Antwort #11 am: April 03, 2015, 17:04:23 Nachmittag »
Ich weiß nich wie ich dir danken soll :))

Keine Lösung gefunden? Du kannst Dich gerne an unser erfahrenes Experten-Team wenden und Dein Anliegen in Auftrag geben.
>>> Schnell und einfach ein unverbindliches Angebot anfordern. Per E-Mail an anfrage@excel-inside.de oder per Online-Formular
<<<

!!! Wichtige Information
!!! Dieses Forum steht aus technischen Gründen ab dem 11. September 2019 nur noch im Lesemodus zur Verfügung.
Das NEUE Office-Fragen-Forum kannst du aber unter der gewohnten Domain https://office-fragen.de wie gewohnt nutzen.

- Wir freuen uns auf deinen Besuch im neuen Forum.