Verständnisfrage Hyperlinks.Add Anchor

Hallo,

kann mir jemand sagen warum folgendes funktioniert:

ActiveSheet.Hyperlinks.Add Anchor:=Cells(2 + anzahl, 1), Address:="", SubAddress:="" & data.Fields.Item("Abflughafen"), TextToDisplay:="" & data.Fields.Item("Abflughafen")

aber folgendes nicht:

ActiveSheet.Hyperlinks.Add Anchor:=Cells(2 + anzahl, 1), Address:="", SubAddress:=data.Fields.Item("Abflughafen"), TextToDisplay:= data.Fields.Item("Abflughafen")

Gruß

Was ist ‚da‘? owT

Hi,

was steht in ‚data.Fields.Item(„Abflughafen“)‘ ?

Ich rate mal, eine Zahl.

Das sieht ganz so aus, als würde VBA den Datentyp interpretieren.
Durch „“ & data.Fields.Item(„Abflughafen“) ist der Datentyp durch „“ auf String festgelegt. Folgt danach eine Zahl, wird die in einen String umgewandelt. Sonst scheinbar nicht.

Wenn ich richtig geraten habe, kannst Du statt …

„“ & data.Fields.Item(„Abflughafen“)

… auch schreiben …

CStr(data.Fields.Item(„Abflughafen“))

… und es funktioniert wieder.

Habe ich richtig geraten? :smile:

Gruß Rainer

ne sorry wusste nicht das der Datentyp wichtig ist :smile:

data wird als New ADODB.Recordset definiert

data.Fields.Item(„Abflughafen“) ist immer ein String von 3 Stellen.

Gruß

data wird als New ADODB.Recordset definiert

an dieser Stelle gibt es zwischen den VB Sprachen scheinbar Unterschiede.
in VB6 würde ich dann schreiben:

data(„Abflughafen“)

data.Fields.Item(„Abflughafen“) ist immer ein String von 3
Stellen.

dazu habe ich in VB6 mal ein Testprogramm gebaut:

Option Explicit

Private Sub Command1\_Click()
 Dim txt As Variant
 Dim erg1 As Variant
 Dim erg2 As Variant
 Dim i As Integer

 txt = 123
 erg1 = txt
 erg2 = "" & txt

 For i = 1 To Len(erg1)
 List1.AddItem Asc(Mid(erg1, i, 1))
 Next
 List1.AddItem "--"
 For i = 1 To Len(erg2)
 List1.AddItem Asc(Mid(erg2, i, 1))
 Next
End Sub

Weil ich alles als variant deklariert habe, steht in erg1 zunächste eine Zahl. Mit der schleife greife ich darauf zu, als wäre es ein String und obwohl ich vorher so viel wie möglich falsch gemacht habe, sind die beider Ergebnisse gleich. In der Liste steht am Ende:

49
50
51

49
50
51

Einen Unterschied zwischen:

x = data.Fields.Item(„Abflughafen“)
und
x = „“ & data.Fields.Item(„Abflughafen“)

kann ich nicht finden.

Mein letzter Schuss ins Blaue, füge mal überall vor und nach den Gleichheitszeichen und den „&“ Leerzeichen ein. VB könnte ohne die Leerzeichen etwas falsch interpretieren.

Gruß Rainer

1 Like

Alles klar, Scrollbalken fehlt bei mir owT

data.Fields.Item(„Abflughafen“) ist immer ein String von 3
Stellen.

Hallo Philip,

woher weißt du das, aus TypeName()?

Hast du den Tip von Rainer mit CStr() bei SubAddress und TextToDisplay getestet, das ist aus deiner Antwort nicht abzulesen.

Und, der Fehler steckt oft im Detail, um das ausschließen zu können,
Cells(2 + anzahl, 1)
war in beiden Test identisch?

Und grundsätzlich, „funktioniert nicht“ ist sehr ärmlich, ist sowieso voll schwierig aus der Ferne zu helfen, jeder Hinweis ist eine Spur, also sag was passiert, explodiert dein PC, tut sich gar nix, kommt der Debugger, markiert er eine Zeile, welche, wie lautet die Fehlermeldung u.v.m.
Mannomann, ist doch in deinem Interesse uns alles mitzuteilen was du weißt zu dem problem.

Gruß
Reinhard

1 Like

Danke euch beiden.
die Version mit dem Cstr() funktioniert auch.
da scheint wohl wirklich der Datentyp das Problem gewessen zu sein.

als Fehlermeldung kamm immer

Laufzeitfehler ‚5‘:
Ungültiger Prozeduraufruf oder ungültiges Argument

Gruß
Phillip