Wie erkläre ich eine Konstante variable, deren Wert eine Funktion aufrufen

In einem VBA-Modul habe ich die folgende Deklaration von Konstanten:

Private Const const_abc  =  3000
Private Const const_def  =   900
Private Const const_etc  =    42
'  and so on and so forth

Nun, ich habe zum initialisieren dieser Werte mit einer einmal Funktion aufrufen, idealerweise etwas wie so

Private Const const_abc = someFunc(18)
Private Const const_def = someFunc( 7)
Private Const const_etc = someFunc( 5)
'  and so on and so forth

Natürlich, dies funktioniert nicht in VBA. Also, gibt es ein gemeinsames Muster auf, wie man mit so einer Anforderung?

Ich könnte wahrscheinlich gehen, wie so

Private const_abc As Double
Private const_def As Double
Private const_etc As Double

sub initConsts()
    const_abc = someFunc(18)
    const_def = someFunc( 7)
    const_etc = someFunc( 5)
end sub

Aber dann müsste ich, um sicherzustellen, dass initConsts heißt, die würde ich eher nicht tun.

Bearbeiten Als je die Frage S O, ich bin mit MS-Access.

  • Welche Anwendung sind Sie mit der Zusammenarbeit?
  • ist es egal? VBA ist VBA keine Frage der Anwendung...
  • Ich bin mit Access.
  • Konstanten werden müssen, um auswertbare beim kompilieren - Sie können nicht zuordnen von Werten aus Funktionen. Ansonsten sind Sie ganz normale Globale Variablen. Was ist der beste Ansatz zu verwenden, hängt von den Kosten der Zuweisung der Werte: wenn es low-cost -, dann könnten Sie besser dran, so dass Sie in Funktionen, so erhalten Sie immer den gewünschten Wert ein.
  • Eine Konstante ist nur das: eine Konstante. Sein Wert kann nicht geändert werden, während der code-Ausführung.
  • Ich verstehe, dass das problem ist, dass ich schon einige code mit einer Konstanten, die ich jetzt (wie pro Anforderung) initialisiert mit dem Wert einer Funktion. Stellt sich heraus, dass in einem solchen Fall mit Konstanten mit VBA mich veranlasst, einige unvorhergesehene Probleme.
  • Dann vielleicht würde es helfen, zu erklären, was genau diese problem sind.
  • wie pro Anforderung zu - Dann muss Sie sich ändern, um nicht mehr Konstanten, da Sie nicht mehr enthalten Konstante Werte, sondern ändern sich zur Laufzeit basierend auf dem Aufruf der Funktion.
  • da für verschiedene Anwendungen verschiedene Ereignisse, die kann oder kann nicht ausgesetzt werden, in der verschiedene Objekte (z.B. Datenbank mit AutoExec() vs. Arbeitsmappe mit Workbook_Open())
  • warum nicht Sie anrufen möchten initConsts ? Das scheint der logische Ansatz.
  • Wie ich aufgezeigt habe, in meiner Frage, das ist, was ich schon getan habe, aber jetzt würde ich anrufen eine initVars() Verfahren für jede Anwendung, die diese Variablen benutzt, früher bekannt als Konstanten, und ich möchte lieber nicht tun.
  • Ich sehe nicht, wie, wie Sie haben keine Wahl. Wenn die variable gesetzt werden muss, um das Ergebnis einer Funktion aufrufen, ist es nicht mehr eine Konstante. Der Aufruf der Funktion geschieht nur zum Zeitpunkt der Ausführung des Codes und damit der Wert ist variabel. Variablen müssen initialisiert werden, wenn irgendwo der code ausgeführt wird - Sie können nicht einfach auf Magische Weise erhalten Sie die richtigen Werte.
  • wenn dies der Fall ist, dann soll es so sein, aber es scheint, dass VBA ist über die einzige Sprache, die ich habe kommen durch so eine Einschränkung, so war ich nicht sicher, ob ich bin etwas Blick.
  • "Einschränkung"? Es ist keine Einschränkung; es ist Absicht design. Konstanten sind so konzipiert, genau das zu sein - konstant, D. H. nicht im Wert verändern) -, und Variablen, die entworfen sind, um Ihre Werte zu verändern (variieren). Fast jede Sprache unterscheidet zwischen Ihnen, wie ein Englisch-Wörterbuch. Sie sind benannt nach Ihrem Verwendungszweck. Es gibt keine Begrenzung - es ist ein Konstrukt entworfen.
  • "für jede Anwendung, die diese Variablen benutzt" - ich bin mir nicht sicher, was Sie hier bedeuten, wie würde der code enthalten sein, in der eine einzige Instanz der Anwendung ausgeführt wird aus. In dem Fall könnte man nur ändern Sie den Gültigkeitsbereich der Variablen zu Public oder Global und verwenden Sie Sie überall?
  • die Datei mit diesen Variablen/Konstanten freigegeben sind ein paar Anwendungen. Diese Anwendungen verwenden die VBE - Schnittstelle zum laden der Datei in das Modul-Sammlung zugreifen. Diese Anwendungen Zugriff auf Funktionen, die in der freigegebenen Datei, die wiederum davon abhängen, ob diese Variablen/Konstanten.
  • Wenn Sie VBE-Zugriff aktiviert, Sie können die Konstanten in einer VBS-Datei, und dann direkt schreiben Sie die Konstanten im Modul mit der Application.VBE Objekt oder die Einstellung einen Verweis darauf. Andere als die, würde ich vorschlagen, dass Sie eine Klasse erstellen-Modul statt, mit der Class_Initialize() Methode, und legen Sie die privaten Variablen, dann nur mit einem Property Get() Methode zu machen als nur Lesen. Ich glaube, dein problem hier ist eigentlich in Bezug auf Umfang und nicht um variable vs. Konstante
  • Schöne, Konstanten sind nicht konstant. Sie sollten in der Lage sein zu sehen das dilemma. Was Sie brauchen, ist Variablen wie erläutert im detail von Ken Weiß.
  • Ich habe bereits erklärt das dilemma schon und was das problem ist, dass mit ihm kommt - in der Tat, habe ich auch so geschrieben in meiner Frage. Ich bin nicht sicher, ob Sie und Ken Weiß bewusst sind, dass es Sprachen, die es ermöglichen, initialisieren von Konstanten mit einem Aufruf zu einer Funktion. Da ich nur VBA gelegentlich, ich hoffte, dass die VBA in der Lage ist so ein Ding auch, und wenn es nicht kann ich immer noch betrachten Sie dies als eine Einschränkung.
  • OK, ich habe nicht gesehen, eine solche Sprache, so mögen Sie Recht haben. Jedoch, der einzige Grund, für die nicht nur Variablen verwenden, statt so sein sollte, dass diese irgendwie verändert werden könnte, von "unkontrollierten" code. Obwohl sehr unwahrscheinlich, wenn das Ihre Sorge, wickeln Sie Sie in eine Klasse, wie in dem Beispiel von Peter.

Schreibe einen Kommentar