Vorheriges Thema anzeigen :: Nächstes Thema anzeigen |
Autor |
Nachricht |
mercany
Anmeldungsdatum: 04.10.2005 Beiträge: 33 Wohnort: Bielefeld (NRW)
|
Verfasst am: 04. Nov 2005 14:36 Titel: String Pointer - Funktion |
|
|
Hallo!
Ich habe eine Frage zur Funktion StringPointer.
Ich benutze diese, um bei Inputboxen den Klick auf "Abbrechen" zu definieren.
Beispiel:
Code: |
Option Explicit
Dim zahl As Double
Private Sub CommandButton_Click ()
zahl = inputbox("Bitte geben Sie eine Zahl ein", "Eingabe")
If strptr(zahl) = 0 Then Exit Sub
msgbox "Die Zahl, die Sie eingegeben haben lautet: " & zahl, "Ausgabe"
End Sub |
Ich weiß: Kein tolles Bsp., aber mir ist grad nichts besseres eingefallen.
Auf jeden Fall ist es jetzt so, dass das Ganze in der Prozedur oftmals bei nur bei einigen Inputboxen funktionert.
Gestern z.B. hat es bei 7 Stück wunderbar funktioniert, bei 2 Stück aber nicht!
Woran kann das liegen? Vielleicht an der Deklaration der Variablen?!
Gruß, mercany _________________ "Dummheiten sind nie überflüssig" |
|
Nach oben |
|
|
|
TMSearcher
Anmeldungsdatum: 19.05.2005 Beiträge: 270 Wohnort: Bremen
|
Verfasst am: 05. Nov 2005 04:47 Titel: |
|
|
Hi,
versuch doch einfach festzulegen, dass auf jeden Fall eine Zahl zurückgegeben wird.
Also: Code: | zahl = Val(InputBox("Bitte geben Sie eine Zahl ein", "Eingabe")) |
Denn es kann sein, dass die Antwort der InputBox mal eine Zahl oder aber auch ein String ist und dann past es natürlich nicht.
Was machst du da eigentlich mit dem Stringpointer?
Gruß
TMS _________________ Intelligent life is so very rare,
the rarest thing in creation
and the most precious
This is Earth Calling.. |
|
Nach oben |
|
|
mercany
Anmeldungsdatum: 04.10.2005 Beiträge: 33 Wohnort: Bielefeld (NRW)
|
Verfasst am: 05. Nov 2005 13:18 Titel: |
|
|
TMSearcher hat Folgendes geschrieben: | Hi,
versuch doch einfach festzulegen, dass auf jeden Fall eine Zahl zurückgegeben wird.
Also: Code: | zahl = Val(InputBox("Bitte geben Sie eine Zahl ein", "Eingabe")) |
Denn es kann sein, dass die Antwort der InputBox mal eine Zahl oder aber auch ein String ist und dann past es natürlich nicht. |
Hmm, verstehe nicht so ganz was du meinst....
Also Punkt ist ja, dass StrPtr() wohl nur mit String läuft. Man hatte mir jetzt den Tip gegeben, dass ich die Variablen vor der Benutzung von StrPtr() umändern soll in String und anschliessend eben wieder zurückwandeln.
Hab aber nicht genau den Plan, wie das gemeint ist
TMSearcher hat Folgendes geschrieben: |
Was machst du da eigentlich mit dem Stringpointer? |
Ähm, wie meinst du das?
Also ich lass eben überprüfen, ob da wirklich nen Nullstring vorliegt; weil dann wurde ja Abbrechen gedrückt. Weil meiner Meinung nach, wird doch bei einer leeren Eingabe eben einfach ne leere Zeichenkette zurückgegeben, und das ist doch ein Unterschied. Und ich dachte, diesen Unterschied würde StrPtr() eben erkennen.
mfg, mercany
Gruß
TMS _________________ "Dummheiten sind nie überflüssig" |
|
Nach oben |
|
|
mercany
Anmeldungsdatum: 04.10.2005 Beiträge: 33 Wohnort: Bielefeld (NRW)
|
Verfasst am: 05. Nov 2005 15:35 Titel: |
|
|
TMSearcher hat Folgendes geschrieben: | Hi,
versuch doch einfach festzulegen, dass auf jeden Fall eine Zahl zurückgegeben wird.
Also: Code: | zahl = Val(InputBox("Bitte geben Sie eine Zahl ein", "Eingabe")) |
| [/quote]
Hab das mal versucht.... jetzt habe ich aber das Prob, dass er mir die Werte immer Ganzzahlig mach, und das ist nicht so toll!!
PS: Hab mein Dok mal drangehängt.
mfg, mercany _________________ "Dummheiten sind nie überflüssig" |
|
Nach oben |
|
|
mercany
Anmeldungsdatum: 04.10.2005 Beiträge: 33 Wohnort: Bielefeld (NRW)
|
Verfasst am: 06. Nov 2005 20:58 Titel: |
|
|
So: Wollte nur mal kurz bescheid geben, dass ich das Prob gelöst habe!
Ich hab die Variablen normal als String deklariert, damit kann StrPtr() ja etwas anfangen und hab dann hinterher zum rechnen mit den Variablen einfach CDbl benutzt um da die Ausgabe in Double umzuwandeln.
mfg, mercany _________________ "Dummheiten sind nie überflüssig" |
|
Nach oben |
|
|
TMSearcher
Anmeldungsdatum: 19.05.2005 Beiträge: 270 Wohnort: Bremen
|
Verfasst am: 06. Nov 2005 21:32 Titel: |
|
|
Super!
Hi,
korrigier mich, wenn ich falsch liege. Aber ich dachte StrPtr(string) ist eine Funktion die einen String mit NULL terminiert, um ihn UNICODE fähig zu machen und damit einsetzbar für API-Aufrufe die eben UNICODE verlangen.
Gruß
TMS
PS.: bin leider noch nicht dazu gekommen deine Übungsaufgabe genauer anzusehen. _________________ Intelligent life is so very rare,
the rarest thing in creation
and the most precious
This is Earth Calling.. |
|
Nach oben |
|
|
mercany
Anmeldungsdatum: 04.10.2005 Beiträge: 33 Wohnort: Bielefeld (NRW)
|
Verfasst am: 06. Nov 2005 22:21 Titel: |
|
|
Hallo TMS!
Macht nichts; denn so war ich ja gezwungen mich ausgiebiger mit dem Problem auseinanderzusetzen und konnte somit im Endeffekt wieder einiges dazulernen.
Zu StrPtr():
Es kommt ja doch noch öfters mal vor, dass man statt Userform's noch an der ein oder anderen Stelle ne InputBox benutzt.
Wenn du nun aber mal den Button Abbrechen umberücksichtigt lässt und deine Prozedur startest, ist ja klar, dass bei druck auf OK, die Prozedur weiterläuft, bei druck auf Abbrechen springt sie dir jedoch mit nem Fehler raus. (Diese Erfahrung musste ich bis jetzt zumindest immer machen)
Jetzt kommt StrPtr() ins Spiel, da anders als bei der MsbBox wo du es über vbcancel machen konntest, dies bei der Inputbox nicht funktioniert.
Das Große Problem ist erstmal, dass dir sowohl beim Klick auf Abbrechen, als auch bei Klick auf Ok mit leerer Eingabe (also wenn du nichts in die Inputbox reinschreibst) eine "Null-Zeichenfolge" zurückgegeben wird.
Auch wenns auf den ersten Blick gleich aussieht, haben beide Fälle einen großen Unterschied: Bei Klick auf OK + leerer Eingabe wirft der Datenzeiger "" aus, bei Klick auf Abbrechen jedoch eine "0" (vbNullString).
Und um genau dies zu überprüfen benutzt du StrPtr(string-variabel)!
Beispiel:
Code: | Private Sub
Dim variabel As String
variabel = inputbox("Bitte gib deinen Namen ein")
If StrPtr(variabel) = 0 Then
Exit Sub
Else
If StrPtr(variabel) = "" Then
msgbox "Es wurde keine Name eingegeben"
Else
msgbox "Dein Name lautet: " & variabel
EndIf
EndIf
End Sub |
Also wie du siehst: Ganz simpel die Anwedung!
Aber ich denke mal, das was ich hier gerade so "viel zu ausgiebig" erklärt habe, war dir doch sowieso schon klar... und das was du da meintest bzgl. API: Da hab ich keine Ahnung! Ich bin doch gerade erst seit nem Monat dabei mich mit VB(A) zu beschäftigen.....
mfg, mercany _________________ "Dummheiten sind nie überflüssig" |
|
Nach oben |
|
|
TMS Gast
|
Verfasst am: 06. Nov 2005 22:37 Titel: |
|
|
Hi,
man lernt immer dazu, ich muss das mal überdenken
Aber es scheint ja zu funktionieren..
Ok, bis denn..
Gruß
TMS |
|
Nach oben |
|
|
mercany
Anmeldungsdatum: 04.10.2005 Beiträge: 33 Wohnort: Bielefeld (NRW)
|
Verfasst am: 07. Nov 2005 20:52 Titel: |
|
|
Hallo TMS!
Freut mich, wenn ich dich auch um einen kleinen Fetzen an Infos bereichern konnte
Berichte doch bitte dann mal von deinen Überlegungen, würde mich interessieren was du da mit API im Kopf hattest!
Gruß, mercany _________________ "Dummheiten sind nie überflüssig" |
|
Nach oben |
|
|
TMS Gast
|
Verfasst am: 09. Nov 2005 22:43 Titel: |
|
|
Hi,
lese dir einfach mal diesen Link durch StrPtr , diese Funktion gibt dir einen Pointer auf einen String zurück. Deshalb mein Grübeln, diese Funktion ist definitiv falsch eingesetzt und das geht mit an Sicherheit grenzender Wahrscheinlichkeit irgendwann nach hinten los. Wo hast du die her? Diese Funktion ist ein Teil um DLL's mit einzubinden und nicht offiziell dokumentiert.
Gruß
TMS |
|
Nach oben |
|
|
|
|
Du kannst keine Beiträge in dieses Forum schreiben. Du kannst auf Beiträge in diesem Forum nicht antworten. Du kannst deine Beiträge in diesem Forum nicht bearbeiten. Du kannst deine Beiträge in diesem Forum nicht löschen. Du kannst an Umfragen in diesem Forum nicht mitmachen. Du kannst Dateien in diesem Forum nicht posten Du kannst Dateien in diesem Forum nicht herunterladen
|
|