Live-Forum - Die aktuellen Beiträge
Datum
Titel
17.10.2025 10:28:49
16.10.2025 17:40:39
16.10.2025 17:25:38
Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender

Forumthread: StrPtr(variable)

StrPtr(variable)
Ilka
Hallo,
welche Bedeutung hat denn die Funktion StrPtr().
Leider wird diese Funktion in der Hilfe von Excel 2000 nicht erklärt.
Gruß
Ilka Maria
Anzeige

7
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Benutzer
Anzeige
AW: StrPtr(variable)
12.12.2009 15:56:42
Daniel
StrPtr() benutzt man nach INPUTBOX, um festzustellen ob die zugewiesene Variable leer ist, weil der Anwender nichts eingegeben und dann OK gedrückt hat, oder weil der Anwender sich für die Option ABBRECHEN entscheiden hat.
Sub test()
Dim a As String
a = InputBox("Eingabe")
If StrPtr(a) = 0 Then
MsgBox "Abbruch"
Else
MsgBox "OK"
End If
End Sub
Gruß, Daniel
Anzeige
AW: StrPtr(variable)
12.12.2009 16:10:50
Nepumuk
Hallo Daniel,
das ist aber eher ein Abfallprodukt der Funktion. Hauptsächlich wird sie benutzt um API's welche nur mit Pointern arbeiten, die entsprechenden Variablen zuzuweisen. Beispiel RtlMoveMemory:
Declare Sub CopyMemory Lib "kernel32.dll" Alias "RtlMoveMemory" ( _
    pDst As Any, _
    pSrc As Any, _
    ByVal ByteLen As Long)

Parameter:

· Destination
Points To the starting address of the copied block’s destination.

· Source
Points To the starting address of the block of memory To copy.

· Length
Specifies the size, in bytes, of the block of memory To copy.

Gruß
Nepumuk
Anzeige
Nachtrag
12.12.2009 16:17:46
Nepumuk
Hallo,
diese Aussage: weil der Anwender nichts eingegeben und dann OK gedrückt hat
ist falsch. Denn in dem Fall hat die Inputbox-Funktion der Variablen einen Leerstrig zugewiesen. Damit gibt die StrPtr-Funktion die Speicheradresse der Variablen zurück.
Das funktioniert nur, wenn der User auf Abbrechen klickt.
Gruß
Nepumuk
Anzeige
AW: und wo kommt in deinem
12.12.2009 16:29:47
Daniel
Beispiel die Funktion StrPtr() vor?
btw der Kenntnistand der Fragestellerin ist "Kaum Excel/VBA-Kenntnisse", daran sollte sich auch deine Antwort orientieren. (und ich hab von dem was du da schreibst, auch niichts verstanden)
Gruß, Daniel
AW: und wo kommt in deinem
12.12.2009 16:56:18
Nepumuk
Hallo,
na dann mal ein Beispiel für die CopyMemory-Funktion. Es wird ein String gebildet, in dem ein Text 100mal hintereinander steht. Das ganze kannst du natürlich mit reinen VB-Mitteln auch machen, es geht aber mal um das Prinzip wie die Funktion arbeitet und wie StrPtr dabei mitspielt:
Option Explicit

Private Declare Sub CopyMemory Lib "kernel32.dll" Alias "RtlMoveMemory" ( _
    ByRef pDst As Any, _
    ByRef pSrc As Any, _
    ByVal ByteLen As Long)

Public Sub Beispiel()
    
    Const TEST_TEXT = "Hallo Daniel "
    
    Dim strString As String
    Dim lngCounter As Long, lngPosition As Long
    
    strString = Space$(100 * Len(TEST_TEXT))
    
    For lngCounter = 1 To 100
        
        Call CopyMemory(ByVal StrPtr(strString) + lngPosition, _
            ByVal StrPtr(TEST_TEXT), LenB(TEST_TEXT))
        
        lngPosition = lngPosition + LenB(TEST_TEXT)
        
    Next
    
    Debug.Print strString
    
End Sub

Der Vorteil der Funktion, sie ist "sauschnell" :-)
Gruß
Nepumuk
Anzeige
AW: Danke für beide Hilfen
12.12.2009 16:03:14
Ilka
Hallo hary, hallo Daniel,
vielen Dank für die Hilfen. Die Sache ist verstanden.
Gruß
Ilka Maria
;
Anzeige

Infobox / Tutorial

Verwendung der StrPtr-Funktion in VBA


Schritt-für-Schritt-Anleitung

  1. Öffne den VBA-Editor: Drücke ALT + F11 in Excel.
  2. Füge ein neues Modul hinzu: Klicke mit der rechten Maustaste auf "VBAProject (DeineDatei)", wähle Einfügen > Modul.
  3. Verwende die StrPtr-Funktion: Du kannst die Funktion in deinem Code wie folgt nutzen:

    Sub test()
       Dim a As String
       a = InputBox("Eingabe")
       If StrPtr(a) = 0 Then
           MsgBox "Abbruch"
       Else
           MsgBox "OK"
       End If
    End Sub

    In diesem Beispiel überprüfst du, ob der Nutzer die Eingabe abgebrochen hat.


Häufige Fehler und Lösungen

  • Fehler: "Typen sind nicht kompatibel."

    • Lösung: Stelle sicher, dass die Variable, die du an StrPtr übergibst, vom Typ String ist. Diese Funktion funktioniert nur mit String-Variablen.
  • Fehler: "Laufzeitfehler 91: Objektvariable oder With-Blockvariable nicht festgelegt."

    • Lösung: Dies kann passieren, wenn du die InputBox ohne Eingabe schließt. Verwende StrPtr, um zu überprüfen, ob die Variable leer ist.

Alternative Methoden

Eine alternative Methode zur Überprüfung, ob eine Variable leer ist, ist die Verwendung von Len():

If Len(a) = 0 Then
    MsgBox "Abbruch"
End If

Diese Methode ist einfacher, erfordert jedoch, dass du den Wert der Variable zuerst überprüfst.


Praktische Beispiele

Hier ist ein Beispiel, das zeigt, wie StrPtr in Verbindung mit der RtlMoveMemory-Funktion verwendet werden kann, um Daten effizient zu kopieren:

Private Declare Sub CopyMemory Lib "kernel32.dll" Alias "RtlMoveMemory" ( _
    ByRef pDst As Any, _
    ByRef pSrc As Any, _
    ByVal ByteLen As Long)

Public Sub Beispiel()
    Const TEST_TEXT = "Hallo Daniel "
    Dim strString As String
    Dim lngCounter As Long, lngPosition As Long

    strString = Space$(100 * Len(TEST_TEXT))

    For lngCounter = 1 To 100
        Call CopyMemory(ByVal StrPtr(strString) + lngPosition, _
                        ByVal StrPtr(TEST_TEXT), LenB(TEST_TEXT))
        lngPosition = lngPosition + LenB(TEST_TEXT)
    Next

    Debug.Print strString
End Sub

In diesem Beispiel wird RtlMoveMemory verwendet, um den Text 100-mal in einen String zu kopieren, wobei StrPtr den Speicherort des Strings liefert.


Tipps für Profis

  • 64-Bit VBA: Bei der Verwendung von StrPtr in einer 64-Bit-Umgebung achte darauf, dass die Datentypen korrekt sind. Vermeide Long für Zeiger und nutze stattdessen LongPtr.

  • API-Funktionen: Wenn du mit API-Funktionen arbeitest, ist das Verständnis von StrPtr und RtlMoveMemory entscheidend, um Speicher effizient zu verwalten.


FAQ: Häufige Fragen

1. Was ist die Bedeutung von StrPtr in VBA? StrPtr gibt die Speicheradresse eines String-Variables zurück. Dies ist besonders nützlich, wenn du mit API-Funktionen arbeitest, die Pointer benötigen.

2. Wie unterscheidet sich StrPtr von VarPtr? StrPtr gibt die Adresse eines String-Variables zurück, während VarPtr die Adresse einer beliebigen Variablen zurückgibt. VarPtr ist nützlich für nicht-String-Datentypen.

3. Funktioniert StrPtr in Excel 2000? Ja, die StrPtr-Funktion ist auch in älteren Versionen von Excel verfügbar, jedoch kann die Dokumentation in diesen Versionen begrenzt sein.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Entdecke mehr
Finde genau, was du suchst

Die erweiterte Suchfunktion hilft dir, gezielt die besten Antworten zu finden

Suche nach den besten Antworten
Unsere beliebtesten Threads

Entdecke unsere meistgeklickten Beiträge in der Google Suche

Top 100 Threads jetzt ansehen
Anzeige