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

VBE - Direktfenster und VBA: Klammersetzung

VBE - Direktfenster und VBA: Klammersetzung
14.07.2016 20:28:12
Michael
Hi zusammen,
a) ich habe es irgendwie geschafft, das Direktfenster in XL2000 "abzukoppeln", und jetzt isses auch in XL2007 nicht mehr dazu zu bewegen, sich beim Öffnen unter das Codefenster zu positionieren. Gut, offensichtlich wird das versionsübergreifend in der registry abgelegt (das "option explicit" übrigens auch).
Aber wie bekomme ich das wieder in den "Normalzustand"? Unter "Fenster" habe ich nichts Brauchbares gefunden, unter Extras/Optionen auch nicht...
b) ich habe irgendwie noch keine Logik entdeckt, wann man in VBA Parameter in Klammern setzen muß und wann nicht.
MsgBox "Test ohne Klammer" geht so
MsgBox ("Test mit Klammer") oder so
MsgBox Dir("*.xls*") aber Dir nur MIT Klammern (weil function?)
Range("A1:A10").Sort Range("a1"), xlAscending, Header:=xlNo
geht ohne, mit Klammern kommt "Fehler beim Kompilieren: Erwartet ="
Gerade Range.Sort geht manchmal wie oben, manchmal muß ich aber die Parameternamen (Key:= usw.) mit angeben, auch das ohne (für mich) erkennbare Logik.
Mit b) komme ich spätestens mit Probieren zurecht, aber a) ist echt lästig: ich würde mich freuen, wenn jemand Erhellendes beitragen würde.
Schöne Grüße,
Michael

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

Betreff
Datum
Anwender
Anzeige
AW: VBE - Direktfenster und VBA: Klammersetzung
14.07.2016 21:16:05
Daniel
HI
zu b)
das kannst du dir in etwa so vorstellen (obs auch genauso ist, weiß ich nicht)
eine Befehlszeile in VBA besteht immer aus einem Befehl (bzw einer Funktion) und seiner Parameterliste.
eine Klammersetzung ist nicht erforderlich:
Befehl_1 Parameter_1a, Parameter_1b, Parameter_1c
wenn jetzt einer dieser Parameter selber wieder eine Funktion mit eigenen Parametern ist, also
Parameter_1a ist eigentlich : Befehl_2 Parameter_2a, Parameter_2b
dann müssen die Parameter von Befehl_2 in Klammern gesetzt werden, damit Compiler erkennen kann, wo die Parameterliste des Befehl_2 aufhört und die Liste des Befehls1 weiter geht:
Befehl_1 Befehl_2(Paramter_2a, Parameter_2b), Parameter_1b, Parameter_1c
in deinem Beispiel ist DIR ja der erste Parameter von MSGBOX, daher müssen die Parameter von DIR in Klammern gesetzt werden.
mit den Parametern und ihren Namen ist das so:
jeder VBA-Befehl oder -Funtkion erwartet die Eingabe der Parmeterwerte in einer bestimmten Reihenfolge, bzw jeder Parameter hat seine festgelegte Postition in der Reihe.
Gibst du die Werte in genau der erwarteten Reihenfolge an, kannst du den Namen weglassen.
Gibst du die Werte in einer anderen Reihenfolge an, musst du den Namen dazu schreiben, damit die Werte den richtigen Parametern zugeordnet werden müssen.
Man kann beides mischen.
In der Regel macht man es so, dass man bei vielgenutzen und Funktionen mit wenig Paramtern irgendwann die Reihenfolge im Kopf hat, und dann nur noch die Werte in der richtigen Reihenfolge angibt.
bei Funktionen mit vielen Parametern, die dann oft auch noch Optional sind und es nicht erforderlich ist, alle Parameter anzugeben, verwendet man dann lieber die Parameternamen.
Damit ist der Code dann auch leichter verständlich und es ist fehlersicherer.
Bei einem falsch geschriebenen Parameternamen bekommst du eine Fehlermeldung und kannst den Fehler sofort korrigieren, bei einem falsch platziertem Wert wird der Code in der Regel ausgeführt, du bekommst aber ein falsches Ergebis und musst dich auf die Fehlersuche machen.
Gruß Daniel
Anzeige
herzlichen Dank,
15.07.2016 11:20:25
Michael
Ihr Beiden,
a) ist fummelig, hat aber dann doch funktionert: Erleichterung! Das Problem war übrigens weniger, daß das Direktfenster "abgedockt" war, als daß es sich in dem Zustand nur sehr seltsam verschieben ließ (ich konnte quasi zuschauen, wie es pro verschobenem pixel neu gezeichnet wurde).
b) die Erklärung mit msgbox & dir klingt logisch, aber bei s = Dir("*.xls*") muß ich auch klammern. Ob das vielleicht wirklich daran liegt, daß es eine Function ist und keine Sub?
.Sort geht komischerweise nur ohne Klammern (das ist eine Prozedur/Sub), während .Find nur mit Klammern geht, weil es eine Function ist. ?
Den Hinweis mit den Parameternamen kann ich insofern nachvollziehen, als es gut möglich ist, daß ich bei einem komplizierteren als dem zitierten Fall evtl. ein , zwischendrin vergessen habe, trotz Intellisense.
Nochmal vielen Dank an Euch & schöne Grüße,
Michael
Anzeige
Das Ergebnis einer Fkt weist man idR ...
15.07.2016 12:11:15
Luc:-?
…einer Variablen zu, Michael,
und eine solche Konstruktion erfordert stets Klammerung der Argumente. Ähnlich sieht's bei komplexen Parametern oder der Zuweisung des Klickwertes einer MsgBox an eine Variable aus. Der Aufruf einer SubProzedur muss per Call mit geklammerten Parametern (sofern sie welche benötigt) erfolgen, bei der Alternative ohne Call nicht.
So etwas findet man relativ schnell selber raus. Einfach probieren!
Gruß, Luc :-?
PS: Die aktuelle Version von DataSet ist 1.2!
Besser informiert mit …
Anzeige
also dann ist meine Vermutung
15.07.2016 13:36:04
Michael
ja richtig, Luc :-?,
daß es um Function vs. Prozedur geht.
Das mit call & () war mir jetzt nicht bewußt.
Ich hatte ja bereits eingangs geschrieben, daß ich hier weniger ein "Problem" habe (ein Bekannter hat mal gesagt, das hat ein 14-Jähriger, der beim Onanieren auf dem Klo erwischt wird) als nach einer "zufriedenstellenden" Gesetzmäßigkeit such(t)e.
So weit dann alles klar.
Deine beiden Posts von gestern und nächtens habe ich wahrgenommen, nur zur Info.
Erst mal danke & Grüße,
Michael
Na, denn... ;-) owT
15.07.2016 16:40:46
Luc:-?
:-?

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige