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

vba array Abfrage ob exist

vba array Abfrage ob exist
21.06.2017 11:25:26
yummi
Hallo Zusammen,
ich habe ein eindimensionales array
Public Myarr() as String
Da es 2 verschiedene Bedienmöglichkeiten für den User gibt, muss ich abfragen, ob das array schon mit Werten befüllt ist oder ob ich das noch machen muss.
Mit UBound geht es nicht, da das array noch nicht dimensioniert ist. IsArray liefert true, auch wenn es noch nicht dimensioniert ist.
Kennt noch jemand eine Möglichkeit abzufragen, ob das array schon dimensioniert ist?
Danke
yummi

17
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: vba array Abfrage ob exist
21.06.2017 11:30:19
Zwenn
Hallo yummi,
Du deklarierst eine Variable vom Typ Boolean. Wenn eine der beiden Methoden, die das Array dimensionieren 'zuschlägt', setzt Du die Variable auf True. Da wo benötigt, fragst du sie vorher einfach ab.
Viele Grüße,
Zwenn
AW: vba array Abfrage ob exist
21.06.2017 11:46:09
yummi
Hallo Zwenn,
der "Umweg" ist zwar nicht schön, aber machbar. Mir ist gerade noch eine andere Möglichkeit eingefallen
On Error Resume Next
lResult = UBound(Myarr)
If CBool(Err.Number 0) Then
dann muss ich nur an eine Stelle ran.
Trotzdem Danke
yummi
AW: vba array Abfrage ob exist
21.06.2017 11:56:46
Zwenn
Ob das ein kleinerer Umweg ist, wage ich zu bezweifeln ;-) Lösungen gibt es aber bekanntlich immer mehrere :-)
Anzeige
AW: vba array Abfrage ob exist
21.06.2017 11:49:38
Daniel
Hi
deklariere die Variable zunächst ganz offen als unbestimmte Variant-Variable:
Public Myarr
und lege Dimension und Typ dann erst beim Befüllen mit ReDim fest.
dann kannst du mit IsEmpty(Myarr) ermitteln, ob die Variable schon werte hat:
If IsEmpty(Myarr) Then
'--- Variable ist leer
Else
'--- Variable hat Werte
End if
Gruß Daniel
AW: vba array Abfrage ob exist
21.06.2017 11:53:45
yummi
Hallo daniel,
IsEmpty hatte ich schon probiert, liefert mir auch bei nicht initialisierten False zurück
Gruß
yummi
AW: vba array Abfrage ob exist
21.06.2017 12:43:17
Daniel
Hi
teste mal genau.
vielleicht bestand noch eine Initialisierung aus einem alten Lauf.
"Globale" Variablen werden ja beim Makrostart nicht zurückgesetzt und behalten ihren Wert.
drücke mal vor dem Test den Button "Zurücksetzen", das löscht dann auch die globalen Variablen.
Gruß Daniel
Anzeige
AW: vba array Abfrage ob exist
21.06.2017 13:44:42
Nepumuk
Hallo yummi,
ein Beispiel:
Option Explicit

Private Declare Function SafeArrayGetDim Lib "oleaut32.dll" ( _
    ByRef psa() As Any) As Long

Public Myarr() As String

Public Sub Test1()
    Call Test2
    Redim Myarr(1 To 10)
    Call Test2
End Sub

Public Sub Test2()
    If SafeArrayGetDim(Myarr) = 0 Then
        Call MsgBox("nicht dimensioniert")
    Else
        Call MsgBox("dimensioniert")
    End If
End Sub

Gruß
Nepumuk
Anzeige
AW: vba array Abfrage ob exist
21.06.2017 15:29:45
yummi
Hallo Nepumuk,
schöne Lösung, gefällt mir gut. Gibt es irgendwo eine Auflistung welche derartige Funktionen es gibt?
Danke
yummi
AW: warum der Aufwand...
21.06.2017 16:08:50
Daniel
wenn man die erstdeklaration richtig macht (als Variant: Public Myarr), funktioniert die Abfrage mit If IsEmpty(Myarr) genauso gut.
Gruß Daniel
Anzeige
AW: warum der Aufwand...
21.06.2017 16:18:35
Nepumuk
Hallo Daniel,
wo siehst du den Aufwand? In der einen Deklarationszeile?
Dafür kann das Array als String deklariert werden was nicht nur wesentlich schneller ist und zudem erheblich weniger Speicher benötigt.
Gruß
Nepumuk
AW: warum der Aufwand...
21.06.2017 16:39:57
Daniel
Der Aufwand besteht darin, das Thema "API-Funktionen" zu erlernen und ggf für eventuelle Nachfolger und Vertreter entsprechend zu dokumentieren. (diese Funktionen sind halt nicht bestand der Online-Hilfe).
Die Deklaration als String kann beim Redim immer noch erfolgen.
Gruß Daniel
AW: warum der Aufwand...
21.06.2017 17:04:00
Nepumuk
Hallo Daniel,
dann wird es Zeit deinen Horizont zu erweiterst.
API's sind extra dafür da in Excel Programme zu ermöglichen die mit reinem VBA nicht, oder nur mit Krücken zu verwirklichen sind. Die gehören für mich zu einem modernen Programmierstiel unbedingt dazu. Ich gehe sogar soweit alles was geht mit API's zu machen denn die sind meistens um den Faktor 100 schneller als das entsprechende VBA-Äquivalent.
Zudem, auch wenn du den Variant als String-Array definierst ist es immer noch ein Variant von Untertype String.
Gruß
Nepumk
Anzeige
AW: warum der Aufwand...
21.06.2017 17:30:54
Daniel
ja, mag sein.
ich bevorzuge es aber, bevor man die Kreise des Horzionts weiter zieht, die weißen Flecken innerhalb des Horizonts zu füllen.
Gruß Daniel
...Zumal man sich dabei zusätzlich abhängig ...
21.06.2017 20:12:12
Luc:-?
…von Windows-Änderungen machen würde, Daniel (& Max);
das mag für Komplett-Projekte, für die auch Wartungsleistungen vereinbart wurden, angehen, kaum aber für kostenfreie Lösungen aus INet-Xl-Foren…
Gruß, Luc :-?
Besser informiert mit …
welche Abhängigkeit?
21.06.2017 20:22:06
Nepumuk
Hallo Luc,
in den letzten 20 Jahren hat sich bezüglich API's nichts geändert. Es sind nur ein paar Bibliotheken dazu gekommen. Da hat sich in VBA mehr getan.
Gruß
Nepumuk
Anzeige
Ah, so; ich meinte abundan mal gelesen zu ...
22.06.2017 00:28:26
Luc:-?
…haben, Max,
dass dieunddie Bibliothek jetzt anders heißt. Das hat mich bisher von API-Verwendung abgeschreckt. Und da ich das ja nicht berufsmäßig betreibe und mich noch dazu auf bestimmte, ebenfalls noch nicht vollends „erforschte“ vbXl-Gebiete spezialisiert habe, war mir das bisher zu „heiß“. Außerdem muss man dann ja auch immer wissen bzw erst herausfinden, welche Bibliothek wofür geeignet ist. Und das ist dann ja ein eigenes Kapitel, dass ich dank anderer bzw weiter­führender Interessen wohl kaum noch „aufzuschlagen“ die Zeit und Muße haben werde…
Morrn, Luc :-?

9 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige