Anzeige
Archiv - Navigation
1084to1088
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

Antwort zu "Hyperlink-Erreichbarkeit"

Antwort zu "Hyperlink-Erreichbarkeit"
NoNet
Hallo Leute,
vor einigen Tagen habe ich hier im Forum meine Frage gestellt :
https://www.herber.de/forum/messages/1084301.html
Und Rudi hat ja auch schonmal nachgefragt :
https://www.herber.de/forum/archiv/1084to1088/t1085232.htm#1085243
Da dieser Thread bereits einige Tage zurückliegt und daher kaum mehr beachtet werden dürfte, poste ich meine Antwort hier in einem neuen Beitrag.
Zu den abgegebenen Antworten : Ich habe alle Varianten angepasst und getestet, doch leider waren diese alle nicht erfolgreich. Dies liegt jedoch (hoffentlich ) nicht an meinen "mangelnden" VBA-Kenntnissen, sondern offenbar daran, dass der PING nicht durch unsere Firmenfirewall durchgereicht wird, was sich auch bei direktem "Anpingen" einer Webseite per "DOS-Box" (Eingabeaufforderung) darstellt :
Userbild
Nach Rücksprache mit dem Kunden (habe ihn erst heute wieder erreicht) stellt es sich so dar, dass in seiner Mappe zahlreiche Links auf diverse Ziele enthalten sind, die er überprüfen möchte :
- Intranetseiten / Dateien im Intranet / Internetseiten / Dateien im Internet
- Lokal gespeicherte Dateien
- auf Netzlaufwerken gespeicherte Dateien
Diese Links befinden sich z.T. in Zellen (teils als Klartekt, teils auch mit anderem Text angezeigt), z.T. auch als Hyperlinks (kein VBA : FollowHyperlink !) in Objekten (hauptsächlich in Autoforms).
Für die Intra-/Internet-Seiten bzw. Dateien konnte ich bisher mangels PING-Möglichkeit noch keine Lösung finden, aber zumindest für die Hyperlinks in Zellen und Objekten habe ich nun eine recht universelle UDF programmiert. Mit dieser UDF kann man überprüfen, ob in Zellen oder in Objekten (deren linke obere Ecke in einer bestimmten Zelle liegt) ein gültiger Hyperlink zu lokal oder im Netz gespeicherten Dateien liegt. Nicht berücksichtigt sind SUB-Adressen (z.B. Links zu bestimmten Zellen in EXCEL-Mappen oder zu Lesezeichen in WORD-Dokumenten oder PDF-Dateien oder Folien in PPTs etc !).
Diese UDF möchte ich euch nicht vorenthalten, vielleicht kann sie ja auch jemand gebrauchen :

Option Explicit
Public Function HyperlinkOK(strLink, Optional bolObject) As Boolean
'UDF zum Überprüfen der Gültigkeit von Hyperlinks in Zellen oder Objekten aus Zelle
'Es werden nur Hyperlinks zu lokal oder auf Netzlaufwerk gespeicherten DATEIEN/ORDNER
'berücksichtigt, keine Hyperlinks auf INTERNET/INTRANET (kein http://
,  _
ftp:// etc. !)
'und auch keine Hyperlinks innerhalb der gleichen Mappe (SUBADDRESS, z.B. Tabelle2!A1)
'Verwendung im Tabellenblatt :
'=HYPERLINKOK(A1) => prüft, ob Zelle A1 leer ist oder gültigen Hyperlink enthält
'=HYPERLINKOK(A1;1) => prüft, ob Objekt (z.B. Autoform) in A1 keinen oder gültigen  _
Hyperlink enthält
'03.07.2009, NoNet - www.excelei.de (z.Zt. down !)
Application.Volatile            'Ergebnis soll sich bei Zelländerungen automatisch  _
aktualisieren !
On Error Resume Next            'Fehler (z.B. Shape-Hyperlink-Zuweisung) ignorieren
Dim strTemp As String, strPfad As String
Dim intS As Integer, objShape As Shape
Dim shHyp As Hyperlink
Dim objFSO As Object
If IsMissing(bolObject) Then                    'Zellinhalt prüfen (nicht Objekt aus Zelle  _
prüfen)
If strLink.Hyperlinks.Count = 0 Then        'Hyperlink als Text in Zelle
strTemp = strLink                       'Text aus Zelle zuweisen
Else                                        '"echter" definierter Hyperlink in Zelle
strTemp = strLink.Hyperlinks(1).Address 'Hyperlink der Zelle zuweisen
End If
Else                                                'Wenn Objekt-Parameter angegeben wurde
If bolObject Then                               'Wenn Objekt, nicht Zellinhalt, geprüft  _
werden soll
For Each objShape In strLink.Parent.Shapes  'Alle Objekte/Shapes des Blattes  _
durchlaufen
If objShape.TopLeftCell = strLink Then  'Wenn linke obere Ecke des Obj. in  _
Zelle liegt
Set shHyp = objShape.Hyperlink
If Not shHyp Is Nothing Then
strTemp = objShape.Hyperlink.Address 'Hyperlink-Adresse aus Objekt
Exit For                        'Vorzeitiger Abbruch der FOR EACH  _
Schleife
End If
End If
Next
Else
If strLink.Hyperlinks.Count = 0 Then        'Hyperlink als Text in Zelle
strTemp = strLink                       'Text aus Zelle zuweisen
Else                                        '"echter" definierter Hyperlink in  _
Zelle
strTemp = strLink.Hyperlinks(1).Address 'Hyperlink der Zelle zuweisen
End If
End If
End If
strTemp = Replace(strTemp, "/", "\")            'Slash in Backslah tauschen
strTemp = Replace(strTemp, "%20", " ")          'HTML-Zeichen %20 (= ASCII 32) in  _
Leerzeichen tauschen
If Left(strTemp, 2) = "\\" Or Mid(strTemp, 2, 1) = ":" Then
strPfad = ""                                'Link absolut angegeben
Else
strPfad = ActiveWorkbook.Path               'Link relativ zur aktuellen Mappe
End If
While Left(strTemp, 1) = "."                    'Überprüfen, ob Pfad mit "." beginnt
If Left(strTemp, 3) = "..\" Then 'Überprüfen, ob Pfad mit "..\" beginnt => Ü _
bergeordnetes Verzeichnis
strPfad = Left(strPfad, Len(strPfad) - InStr(StrReverse(strPfad), "\")) 'Ü _
bergeordnet. Pfad
strTemp = Mid(strTemp, 4, Len(strTemp)) 'relativen Pfad um 1 Ebene kürzen
ElseIf Left(strTemp, 2) = ".\" Then         'Wenn gleiche Ebene (=> KEIN übergeordnet.  _
Pfad !)
strTemp = Mid(strTemp, 3, Len(strTemp)) 'relativen Pfad um 1 Ebene kürzen
End If
Wend
Set objFSO = CreateObject("Scripting.FileSystemObject")
If strPfad = "" Then                                    'Wenn Pfad ABSOLUT angegeben wurde
HyperlinkOK = objFSO.FileExists(strTemp) Or _
objFSO.FolderExists(strTemp)   'Prüfen, ob Datei oder Ordner existiert (per  _
FSO)
Else                                                    'Wenn Pfad REALTIV angegeben wurde
HyperlinkOK = objFSO.FileExists(strPfad & "\" & strTemp) Or _
objFSO.FolderExists(strPfad & "\" & strTemp) 'Prüfen, ob Datei oder Ordner  _
existiert
End If
'DIR()-Variante : berücksichtigt leider keine "Hidden"-Files und keine Links auf Ordner !!
'    If strPfad = "" Then                                    'Wenn Pfad ABSOLUT angegeben wurde
'        HyperlinkOK = Dir(strTemp)  ""                    'Prüfen, ob Datei existiert
'    Else                                                    'Wenn Pfad REALTIV angegeben wurde
'        HyperlinkOK = Dir(strPfad & "\" & strTemp)  ""    'Prüfen, ob Datei existiert
'    End If
'STACK-Speicher für Objektvariablen in umgekehrter Reihenfolge wieder freigeben :
Set objFSO = Nothing
Set shHyp = Nothing
End Function


Vielleicht hat ja noch jemand eine Idee zur Überprüfung von Erreichbarkeit von Links auf Webseiten (möglichst ohne PING !) !?!?!?
Danke erstmal für die Mitarbeit, Gruß NoNet
PS : Schönes WE an alle....

das liegt erst mal nicht an "Ping", ...
03.07.2009 13:58:25
Christian
Hallo NoNet,
... sondern daran, dass für den Client kein DNS-Server angegeben ist.
Wenn ping geblockt wird, dann sieht die Antwort in der cmd etwa so aus:
D:\>ping google de
Ping google.de [74.125.77.104] mit 32 Bytes Daten:
Zeitüberschreitung der Anforderung.
...
wie du siehst, wird hier die IP-Adresse von google vom DNS Server aufgelöst.
Wenn kein DNS-Server konfiguriert ist, dann kommt die Meldung:
"Ping-Anforderung konnte Host "google.de" nicht finden...
vielleicht hilft's dir ja...
Grüße
Christian
Danke, aber das war's wohl nicht...
03.07.2009 14:40:44
NoNet
Hallo Christian,
vielen Dank erst einmal für Deinen Hinweis.
Am fehlenden DNS-Server liegt das aber wohl nicht, denn dieser ist in den TCP/IP-Einstellungen konfiguriert :
Userbild
Und der DNS-Server wird auch bei Eingabe ipconfig /all in der "DOS-Box" angezeigt :
Userbild
Die Auflösung aus der "DOS-Box" klappt offenbar auch, zumindest wenn man die Webseite per start www.google.de aufruft wird diese acuh im Browser angezeigt.
Die DNS-Auflösung scheint also zu funktionieren...
Danke nochmals, Gruß NoNet
Anzeige
AW: Danke, aber das war's wohl nicht...
03.07.2009 15:05:49
Christian
....hmm
also zusammen mit dem Ergebnis bei Ransi's Code tippe ich immer noch auf den DNS.
- ist der DNS per ping erreichbar?
- kanst du eine IP-Adresse (z.b. eine von Google: 74.125.77.104) pingen?
- welches Ergebnis kriegst du in der cmd mit: nslookup 74.125.77.104
( bei kommt da: ew-in-f104.google.com )
ich kenn natürlich eure Netzstruktur nicht, aber der DNS muss imho per ping ereichbar sein - 'ne FW ist i.d.R hinterm DNS.
Gruß
Christian
PING - PONG - Spiel - Satz - Match - verloren ...
03.07.2009 17:16:21
NoNet
Hallo Christian,
folgendes habe ich ausprobiert :
AB
1
2
3
4
5
6
7
8
9
10

Ich denke inzwischen auch, dass es ein DNS-Problem ist : der DNS-Server löst zwar Adressen aus dem Browser richtig auf, jedoch nicht aus der "DOS-Box" oder anderen Applikationen :-(
Leider kenne ich die firmeninterne Netzstruktur auch nicht so genau, da es sich um ein sehr grosses und komplexes Netz handelt....
Ich werde es daher am WE mal von zu Hause aus probieren, da ist das Netz nicht ganz so komplex ( ;-) )..
Danke mal vorab für's Mitdenken (auch an Ransi !)...
Gruß, NoNet
Anzeige
AW: PING - PONG - Spiel - Satz - Match - verloren ...
03.07.2009 20:56:03
Christian
tja...
bei Ranisi's:
MsgBox InternetCheckConnection("http://74.125.77.104", 1, 0)
bekomme ich auch eine 1 zurück.
Hier wird natürlich keine DNS-Anfrage erzeugt, da die IP ja schon bekannt ist.
Mit der API Funktion wird eine TCP Connection zum Server "74.125.77.104" auf Port 80 aufgebaut und wieder geschlossen.
Insofern wäre es dann doch nicht der DNS. Es ist außerdem zu beachten, dass Windows auch einen DNS-Cache hat um nicht jedesmal eine DNS Anfrage rauszuschicken. Den Cache kannst du löschen mit:
ipconfig -flushdns
Was könnte es noch sein?
Evt. hast du im Browser einen Proxy eingetragen. Könnte ja sein, dass die API Funktion bei 'nem Proxy nicht funktioniert... das kann ich allerdings mangels Proxy nicht testen.
Grüße
Christian
Anzeige
bei Verwendung eines Proxy-Servers...
04.07.2009 09:57:34
Christian
....müsste die genannte API imho funktionieren, wenn du den Proxy-Port mit angibst.
zB: bei Proxy-Port 8080:
InternetCheckConnection("http://74.125.77.104:8080", 1, 0)
Da du mit dem Browser ins Internet kommst, aber nicht mit der API Funktion über den Standard-Port 80, würde dafür sprechen, dass Port 80 geblockt ist und Web-Traffic nür über den Proxy erlaubt ist.
Die verwendete Proxy Einstellungen findest du im Browser.
Gruß
Christian
Danke, Christian - werde ich am Mo. testen
04.07.2009 11:33:12
NoNet
Hallo Christian,
vielen Dank für Deine Hilfestellung.
Ich habe das nun zu Hause (DSL-Verbindung über Router, kein eigener DNS-Server und kein Proxy) getestet :
Damit funktionieren sowohl die PING-Lösungen sowie auch InternetCheckConnection("http://74.125.77.104", 1, 0).
Wir verwenden in der Tat in der Firma einen Proxy, dieser ist mir auch bekannt, nur wüsste ich nicht, wie ich diesen in die Lösungsvorschläge integrieren sollte.
Dein Hinweis mit Port 8080 könnte aber schon in die richtige Richtung gehen, genau den verwenden wir in der Firma für http-Verkehr.
Ich werde das am Mo. mal testen und hier wieder Rückmeldung geben.
Bis dahin : Vielen Dank und schönes WE...
Gruß, NoNet
Anzeige
API:InternetCheckConnection
03.07.2009 14:32:07
ransi
HAllo NoNet
Schau dir mal dies an:
Option Explicit

Private Declare Function InternetCheckConnection Lib "wininet.dll" Alias "InternetCheckConnectionA" ( _
    ByVal lpszUrl As String, _
    ByVal dwFlags As Long, _
    ByVal dwReserved As Long) As Long



Public Sub test()
MsgBox InternetCheckConnection("http://www.google.de", 1, 0)
End Sub

Damit müsstest du weiter kommen.
Gibt 1 wenn die Adresse ereichbar ist, sonst 0.
ransi
Anzeige
Danke, ransi - aber : was soll ich sagen...
03.07.2009 14:45:35
NoNet
Hallo Ransi,
Danke, aber : No comment :
Userbild
Gruß, NoNet (der laut Excel VBA kein Internet hat...)
AW: Danke, ransi - aber : was soll ich sagen...
03.07.2009 15:08:25
ransi
HAllo NoNet
Die API ist etwas zickig...
www.google.de geht nicht.
https://www.google.de funzt allerdings.
Userbild
ransi
Ich hatte es mit http:// ausprobiert
03.07.2009 17:19:54
NoNet
Danke für den Nachtrag, ransi,
ich hatte es mit https://www.google.de, www.google.de und mit http://74.125.77.104 ausprobiert, doch es ist und bleibt leider eine NULL !
Gruß, NoNet
Anzeige

299 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige