ABOUT Visual Basic Programmieren Programmierung Download Downloads Tips & Tricks Tipps & Tricks Know-How Praxis VB VBA Visual Basic for Applications VBS VBScript Scripting Windows ActiveX COM OLE API ComputerPC Microsoft Office Microsoft Office 97 Office 2000 Access Word Winword Excel Outlook Addins ASP Active Server Pages COMAddIns ActiveX-Controls OCX UserControl UserDocument Komponenten DLL EXE
Diese Seite wurde zuletzt aktualisiert am 10.01.2000

Diese Seite wurde zuletzt aktualisiert am 10.01.2000
Aktuell im ABOUT Visual Basic-MagazinGrundlagenwissen und TechnologienKnow How, Tipps und Tricks rund um Visual BasicActiveX-Komponenten, Controls, Klassen und mehr...AddIns für die Visual Basic-IDE und die VBA-IDEVBA-Programmierung in MS-Office und anderen AnwendungenScripting-Praxis für den Windows Scripting Host und das Scripting-ControlTools, Komponenten und Dienstleistungen des MarktesRessourcen für Programmierer (Bücher, Job-Börse)Dies&Das...

Themen und Stichwörter im ABOUT Visual Basic-Magazin
Code, Beispiele, Komponenten, Tools im Überblick, Shareware, Freeware
Ihre Service-Seite, Termine, Job-Börse
Melden Sie sich an, um in den vollen Genuss des ABOUT Visual Basic-Magazins zu kommen!
Informationen zum ABOUT Visual Basic-Magazin, Kontakt und Impressum

Zurück...

Zurück...


Anzeige

(-hg) mailto:hg_iskey@aboutvb.de

Bei den meisten Auflistungen (auch Sammlungen genannt) als auch das MSDN Library - VB CollectionCollection-Objekt in Visual Basic, in Steuerelementen und in anderen ActiveX-Objekten können Sie nicht direkt ermitteln, ob ein bestimmter Schlüssel (der ja eindeutig sein muss) bereits vergeben ist. Oder, was eigentlich auf dasselbe hinausläuft, Sie können nicht feststellen, ob sich ein Objekt oder ein Wert mit einem bestimmten dazugehörigen Schlüssel bereits in einer Collection enthalten ist.

Die Aufgabe lässt sich allerdings nach dem Versuch-und-Irrtum-Prinzip lösen. Rufen Sie einfach ein Element aus einer Collection ab - erhalten Sie es, ist es enthalten, erhalten Sie nichts, ist es auch nicht drin. Das mag zwar banal klingen. Aber erstens kommt man manchmal nicht auf die naheliegendsten Lösungen. Und zweitens ist es in konkretem Code nicht ganz so einfach getan.

Das grundlegende Gerüst sieht so aus:

Dim nVar as Variant

On Error Resume Next
nVar = TestCollection(TestSchlüssel)
If Err.Number Then
  ' Ist nicht drin
Else
  ' Ist drin
End If

Geht es jedoch um in der Collection enthaltene Objekte, muss die Zeile der Test-Zuweisung mit der Set-Anweisung formuliert werden:

Set nVar = TestCollection(TestSchlüssel)

Könnte die Collection allerdings sowohl Objekte als auch reine Werte enthalten, wird die Angelegenheit ein wenig komplexer. Denn die für Objekte notwendige Zuweisung mit Set löst auch dann einen Fehler aus, wenn der Wert unter dem Schlüssel zwar enthalten, aber kein Objekt ist. Je nach dem, ob der Schlüssel wirklich noch nicht besetzt war, oder ob er nur mit einem Element des falschen Datentyps, also nicht mit einem Objekt, besetzt war, wird ein anderer Fehler ausgelöst. Beim falschen Datentyp wird ein Fehler Nummer 13 ("Typen unverträglich") ausgelöst, im Falle des noch nicht besetzten Schlüssels ein Fehler Nummer 5 ("Ungültiger Prozeduraufruf oder ungültiges Argument"). Wir müssen also beide Fehler unterscheiden, und im Falle des falschen Datentyps die Zuweisung ohne Set wiederholen (das Zurücksetzen des Err.Objekts mit Err.Clear zuvor nicht vergessen!). Verpacken wir das gleich wieder in eine universell verwendbare Funktion, die uns gegebenenfalls auch gleich das den Schlüssel besetzende Element zurückgibt:

Public Function IsKey(Col As Object, Key As String, _
 Optional Element As Variant) As Boolean
  Dim nVar as Variant

  On Error Resume Next
  Set nVar = Col(Key)
  Select Case Err.Number
    Case 0
      ' Ist drin
      Set Element = nVar
    Case 5
      ' Ist nicht drin
    Case 13
      Err.Clear
      nVar = Col(Key)
      Select Case Err.Number
        Case 0
          ' Ist drin
          nVar = Element
        Case 5
          ' Ist nicht drin
        Case Else
          ' Anderer Fehler - ggfs. gesondert behandeln!
      End Select
    Case Else
      ' Anderer Fehler - ggfs. gesondert behandeln!
  End Select
End Function

Sie können diese Funktion natürlich auch auf einen bestimmten Datentyp hin spezifisch trimmen - aber das überlasse ich Ihnen selbst.


Modul modIsKey (modIsKey.bas - ca. 0,5 KB)






Themen - Allgemeines
Themen - Entwicklungsumgebung (VB-IDE)
Themen - Forms
Themen - Steuerelemente (Controls)
Themen - Grafik
Themen - Dateien
Themen - UserControls
Themen - Einsteiger-Tipps
Themen - Wussten Sie...?

Übersicht nach Titeln in alphabetischer Reihenfolge
Übersicht nach Erscheinungsdatum

Schnellsuche



Zum Seitenanfang

Copyright © 1999 - 2017 Harald M. Genauck, ip-pro gmbh  /  Impressum

Zum Seitenanfang

Zurück...

Zurück...

Download Internet Explorer