rene1976
Goto Top

Webadresse nach Eingabe in Excel syntaktisch überprüfen

Hallo,

weiß jemand wie man eine Webadresse nach Eingabe (beim verlassen der Zelle) in einer Excel 2010 Zelle auf syntaktische Richtigkeit überprüfen kann?
Es gibt anscheinend keine Standarddatentyp wie Zahl oder Datum in Excel dafür.

Ich dachte da z.B. an Regular Expression wenn es nicht etwas "out of the box" gibt, aber wo gebe ich diese ein?

Es gibt ein Eingabefeld unter Datenprüfung --> Benutzerdefiniert.

Ist das die richtige Stelle oder gibt es ein bessere Lösung?

Oder muss man das wieder mit VBA machen?

Gruß,

Rene

Content-Key: 245620

Url: https://administrator.de/contentid/245620

Printed on: April 25, 2024 at 15:04 o'clock

Member: colinardo
Solution colinardo Aug 05, 2014, updated at Aug 06, 2014 at 12:17:59 (UTC)
Goto Top
weiß jemand wie man eine Webadresse nach Eingabe (beim verlassen der Zelle) in einer Excel 2010 Zelle auf syntaktische
Richtigkeit überprüfen kann?
Ich dachte da z.B. an Regular Expression wenn es nicht etwas "out of the box" gibt, aber wo gebe ich diese ein?
Es gibt ein Eingabefeld unter Datenprüfung --> Benutzerdefiniert.

Ist das die richtige Stelle oder gibt es ein bessere Lösung?
das geht damit nicht, dazu ist eine Webadresse zu komplex für den billigen Dialog face-smile
Oder muss man das wieder mit VBA machen?
yip, REGEX is always your friend face-wink

Folgendes checkt z.B. den Bereich A1:A100 auf die Syntax einer Webadresse nach Änderung des Zelleninhaltes:
(Code einzufügen im Codeabschnitt des jeweiligen Arbeitsblattes auf dem die Überprüfung stattfinden soll.)
Function CheckSyntax(ByVal rngTarget As Range) As Boolean
    Set regex = CreateObject("vbscript.regexp")  
    regex.IgnoreCase = True
    regex.Pattern = "^https?://[\-A-Z0-9+&@#/%?=~_|$!:,.;]*[A-Z0-9+&@#/%=~_|$]$"  
    If Not regex.Test(rngTarget.Value) Then
        CheckSyntax = False
    Else
        CheckSyntax = True
    End If
    set regex = Nothing
End Function

Private Sub Worksheet_Change(ByVal Target As Range)
    'Range bei dem eine Änderung etwas bewirken soll  
    Set changeRange = ActiveSheet.Range("A1:A100")  
    If Not Application.Intersect(changeRange, Target) Is Nothing Then
        If Not CheckSyntax(Target) Then
            MsgBox "Die Webadresse hat die falsche Syntax", vbCritical  
            Application.EnableEvents = False
            Target.Value = ""  
            Application.EnableEvents = True
        End If
    End If
End Sub
Den Regex kannst du ja nach deinem Gusto gestalten, bzw. erweitern (er stellt keinen Anspruch auf Vollständigkeit).

Grüße Uwe
Member: Rene1976
Rene1976 Aug 06, 2014 at 12:17:36 (UTC)
Goto Top
Hi Uwe,

vielen Dank für die schnelle Hilfe.
Der Code funktioniert.

In Zeile 5 muss aber das "not" entfernt werden.

If Not regex.Test(rngTarget.Value) Then

Deine Regex funktioniert leider noch nicht bei allen Varianten.
Werde sie bei Gelegenheit ändern wenn ich hier eine passenden gefunden habe.
http://regexlib.com/Search.aspx?k=url

Eine Regex für alle Konstellationen einschließlich von neuen TLD zu finden oder zu schreiben wird immer schwerer face-wink

Besten Dank.

Rene
Member: colinardo
colinardo Aug 06, 2014 updated at 12:35:04 (UTC)
Goto Top
Zitat von @Rene1976:
In Zeile 5 muss aber das "not" entfernt werden.
nö, wieso ?? Das hat schon seine Richtigkeit.

Deine Regex funktioniert leider noch nicht bei allen Varianten.
habe ich auch nicht behauptet face-wink Eine Adresse kann z.B. auch so aussehen http://localhost. Kommt halt immer drauf an worauf du Priorität setzt oder welche Art Adressen bei dir verwendet werden sollen.
Ein Regex der alle Eventualitäten matcht, wird sooooooooooooooooooooooooooooo lang face-smile