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 08.09.2000

Diese Seite wurde zuletzt aktualisiert am 08.09.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...

Wahre Leere

Zurück...


Anzeige

(-hg) mailto:hg_isemptystring@aboutvb.de

Wie können Sie prüfen, ob einer Funktion oder Prozedur in einem optionalen Parameter des Datentyps String überhaupt ein String übergeben worden ist? Wäre der Parameter vom Datentyp Variant, könnten Sie die MSDN Library - VB IsMissingIsMissing-Funktion verwenden:

Sub Test(Optional ABC As Variant)
  Debug.Print IsMissing(ABC)
End Sub

Die Aufrufe mit oder ohne Parameter ergeben:

Test           -->  Wahr
Test ""        -->  Falsch
Test "Hallo"   -->  Falsch

Dagegen versagt die IsMissing-Funktion bei allen übrigen Datentypen. Sie können sich offensichtlich nur damit behelfen, den Parameter-Wert auf den uninitialisierten Wert des jeweiligen Datentyps hin zu prüfen (beim Datentyp String sollte man meinen, das wäre die leere Zeichenfolge ""), in der Annahme dass dieser selbst nicht als Wert auftreten wird, oder einen gewissermaßen "unmöglichen" Wert als Voreinstellung festzulegen und in einer Prüfung auszuschließen.

Annahme des uninitialisierten Werts:

Sub Test(Optional ABC As String)
  Debug.Print ABC = ""
End Sub

Die Aufrufe mit oder ohne Parameter ergeben hier:

Test            -->  Wahr
Test ""         -->  Wahr, aber nicht beabsichtigt!
Test "Hallo"    -->  Falsch

Annahme eines "unmöglichen" Werts:

Sub Test(Optional ABC As String = "§$§$§$")
  Debug.Print ABC = "§$§$§$"
End Sub

Die Aufrufe mit oder ohne Parameter ergeben hier:

Test            -->  Wahr
Test ""         -->  Falsch
Test "Hallo"    -->  Falsch

Diese beiden Möglichkeiten sind jedoch nur behelfsmäßige Krücken, die Sie in der freien Verwendung von optionalen Parametern mit beliebigen Werten einschränken.

Für optionale String-Parameter gibt es allerdings eine Hintertür, durch die Sie zu einer tatsächlichen Prüfung des uninitialisierten Werts gelangen: die undokumentierte Visual Basic-Funktion StrPtr.

Die Funktion StrPtr liefert den Wert des Zeigers (das ist, vereinfacht gesagt, die Speicheradresse des Strings) zu einem String. Und bei einem uninitialisierten String ist dieser Wert schlicht 0, da ein uninitialisierter String für VB noch nicht existiert. Prüfen Sie also mit dieser Funktion den übergebenen optionalen String-Parameter.

Sub Test(Optional ABC As String)
  Debug.Print StrPtr(ABC) = 0
End Sub

Die Aufrufe mit oder ohne Parameter ergeben nun, ohne Krücke:

Test            -->  Wahr
Test ""         -->  Falsch
Test "Hallo"    -->  Falsch

Sie können zur Prüfung auch unsere folgende Funktion IsEmptyString verwenden. Reichen Sie einen optionalen Parameter über deren optionalen Parameter weiter, ändert sich nichts an der "Uninitialisiertheit" des Parameters:

Public Function IsEmptyString(Optional Str As String) As Boolean
  IsEmptyString = CBool(StrPtr(Str) = 0)
End Function

Nun wieder unsere Test-Prozedur:

Sub Test(Optional ABC As Variant)
  Debug.Print IsEmptyString(ABC)
End Sub

Die Aufrufe mit oder ohne Parameter ergeben:

Test           -->  Wahr
Test ""        -->  Falsch
Test "Hallo"   -->  Falsch

Genau so, wie Visual Basic bei der InputBox sehr wohl zwischen Abbruch und der tatsächlichen Rückgabe eine leeren Strings zu unterscheiden weiß (siehe Abbruch einer InputBox"Abbruch einer InputBox"), können auch Sie die Rückgabewerte ihrer Funktionen prüfen, wenn String der Datentyp einer Funktion ist. Weisen Sie in der Funktion nicht ausdrücklich einen Rückgabewert zu, ergibt die Prüfung des Rückgabewertes mit IsEmptyString True. Sobald Sie jedoch einen Rückgabewert zuweisen, selbst wenn Sie einen leeren String zuweisen, ergibt die Prüfung False - es wird also tatsächlich ein String zurückgegeben:

Function Test2(Übergabe As String) As String
  Select Case Übergabe
    Case "Hallo"
      Test2 = "OK"
    Case "Nix"
    Case Else
      Test2 = ""
  End If
End Function

Dim nStr As String

nStr = Test2(Übergabe)
If IsEmptyString(nStr) Then
  Debug.Print "Keine Rückgabe"
Else
  Debug.Print "/" & nStr & "/"
End If

Je nach dem, was Sie übergeben, wird ausgegeben:

Hallo    --> /OK/
Welt     --> //
Nix      --> Keine Übergabe

Modul modIsEmptyString (modIsEmptyString.bas - ca. 0,3 KB)


Artikel
Zum Download-Bereich dieses Artikel
Mail an den Autor dieses Artikels

KnowHow
Zur KnowHow-Übersicht

KnowHow-Themen
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