Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
356to360
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
356to360
356to360
Aktuelles Verzeichnis
Verzeichnis Index
Verzeichnis Index
Übersicht Verzeichnisse
Inhaltsverzeichnis

Was ist hier dran falsch?

Was ist hier dran falsch?
26.12.2003 12:41:03
MichBeck
Hi,
ich habe hier ne VBA-Anleitung und weiß nicht was man in diesem Fall hier machen kann, damit das funktioniert:


Sub Testproc(Optional Einkaufspreis As Variant, Optional Verkaufspreis As Variant)
If Not IsMissing(Einkaufspreis) Then Debug.Print Einkaufspreis
Debug.Print "Gewinn:", Verkaufspreis - Einkaufspreis
End Sub

8
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
Nix
26.12.2003 12:47:14
Ramses
Hi


Sub test()
Call Testproc(12.34, 34.45)
End Sub


Gruss Rainer
AW: Nix
26.12.2003 12:54:40
MichBeck
Aber das Problem ist ja, dass ein Fehler auftaucht, wenn man den Einkaufspreis einfach durch ein Komma ersetzt. Beides soll ja optional sein und wenn man da beispielsweise eingibt:
Call Testproc(, 300)
dann löst das einen Fehler aus
AW: Nix
26.12.2003 13:00:10
Josef Ehrensberger
Hi,

Du musst auch die zweite Anweisung (Debug.Print ....) in
die IF abfrage stellen, sonst wird natürlich ein Fehler
ausgelöst.

Gruß Sepp
Natürlich...
26.12.2003 13:00:40
Ramses
1. Sind Kommas in VBA-relevanten Berechnungen nicht erlaubt ( siehe mein Beispiel wie die Eingabe zu erfolgen hat )
2. Was soll er denn berechnen wenn ein Wert fehlt. Dann musst du halt eine Fehlerroutine einbauen.
Anzeige
AW: Was ist hier dran falsch?
26.12.2003 12:58:56
Reinhard
Hi Mich,
was willst du machen?
Ansonsten, schalte im VBA-EDitor bei Ansicht das Direktfenster ein, dnn ruf das Makro Testen() auf.
Gruß
Reinhard

Sub Testen()
Testproc 4.12, 14
Testproc 10
Testproc 0, 12.5
Testproc 0, 0
End Sub



Sub Testproc(Optional Einkaufspreis As Variant, Optional Verkaufspreis As Variant)
If Not IsMissing(Einkaufspreis) And Not IsMissing(Verkaufspreis) Then
Debug.Print "EK: "; Einkaufspreis; " VK: "; Verkaufspreis; "Gewinn: "; Verkaufspreis - Einkaufspreis
Else
Debug.Print "EK und/oder VK fehlt"
End If
End Sub

Anzeige
AW: Was ist hier dran falsch?
26.12.2003 13:26:42
MichBeck
Also erstmal danke für die zahlreiche Hilfe hier.

Zum Problem muss ich sagen, dass das auch etwas umständlich und für mich als VBA-Anfänger auch schwer zu erklären ist.
Da ich hier so ein „VBA mit Excel“-Lernbuch habe, versuche ich mich möglichst nahe an die Anweisungen zu halten, was mir diesmal jedoch Probleme bereitet. Wie ich ja bereits beschrieben habe, kommt als erstes folgende Zeile vor:
If Not IsMissing(Einkaufspreis) Then Debug.Print Einkaufspreis
Diese Zeile soll auslösen, dass wenn der Einkaufspreis angegeben wird (was er ja nicht unbedingt muss, da die Eingabe optional ist), genau dieser Einkaufspreis ausgegeben werden soll, ansonsten soll nix (also noch nicht einmal eine Null) rausgegeben werden. Das hat auch so geklappt. Doch die nächste Zeile dann nicht:
Debug.Print "Gewinn:", Verkaufspreis – Einkaufspreis
Diese Zeile klappt zwar, wenn sowohl Verkaufspreis und Einkaufspreis angegeben werden und auch wenn nur der Einkaufspreis angegeben wird, wenn jedoch nur der Verkaufspreis angegeben werden soll, ist das ein Problem, also bei:
Call Testproc(, 300)
Die zweite Angabe ist in diesem Fall der Verkaufspreis und in dem Buch steht, dass man den Einkaufspreis mit einem Komma als „Stellvertreter“ ersetzen darf. Wenn ich dies jedoch so abrufe, dann kommt der Fehler, dass die Typen unverträglich sind, was ich mir dadurch erkläre, dass ich in der Kopfzeile beide Variablen als Variant deklariert habe:
Sub Testproc(Optional Einkaufspreis As Variant, Optional Verkaufspreis As Variant)
Darauf habe ich versucht, sie anstatt als Variant als Single zu deklarieren, dass löste aber wiederum das Problem aus, dass die nächste Zeile, also If Not IsMissing(Einkaufspreis)… nicht mehr funktionierte, da es zumindest eine Null ausgab obwohl kein Einkaufspreis eingegeben wurde.
Ich hoffe ihr habt jetzt das etwas „umständliche“ Problem nachvollziehen können und könnt mir eine möglichst nahe Lösung (also die nur kleine Veränderungen beinhaltet) geben.

Vielen Dank.
Anzeige
AW: Was ist hier dran falsch?
26.12.2003 13:31:04
Josef Ehrensberger
Hi,

dann deklariere die Variablen doch als Double!

Gruß Sepp
So einfach geht es nicht...
26.12.2003 13:43:03
Ramses
Hallo

du musst schon die Konventionen die EXCEL erwartet einhalten, und dazu gehört leider auch mal, dass die zu übergebenden Zahlen keine Kommas enthalten dürfen wenn mit Ihnen in VBA gerechnet werden soll. VBA versteht nun nur mal Punkt als Dezimaltrennzeichen und verwendet Kommas als Trennzeichen für einzelne Parameter.

Ob du willst oder nicht,... daran führt kein Weg vorbei.
Zusätzlich kommt es noch darauf an, woher deine Variablen die Werte erhalten. Aus Zellen, Inputboxen oder Textboxen in Userforms. Jede hat seine speziellen Eigenheiten die man berücksichtigen muss.

Hier eine Variante wie man Fehler abfangen kann

Option Explicit


Sub Testproc(Optional Einkaufspreis As Variant, Optional Verkaufspreis As Variant)
If Not IsMissing(Einkaufspreis) And Not IsMissing(Verkaufspreis) Then
Debug.Print Einkaufspreis
Debug.Print Verkaufspreis
Debug.Print "Gewinn:", Verkaufspreis - Einkaufspreis
Exit Sub
End If
MsgBox "Ein Parameter wurde nicht angegeben"
End Sub


IsMissing funktioniert aber nur, wenn der optionale Parameter als "Variant" übergeben wurde.
Diese Variante funktioniert nicht

Option Explicit


Sub Testproc(Optional Einkaufspreis As Double, Optional Verkaufspreis As Double)
If Not IsMissing(Einkaufspreis) And Not IsMissing(Verkaufspreis) Then
Debug.Print Einkaufspreis
Debug.Print Verkaufspreis
Debug.Print "Gewinn:", Verkaufspreis - Einkaufspreis
Exit Sub
End If
MsgBox "Ein Parameter wurde nicht angegeben"
End Sub


Gruss Rainer
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige