PDA

Vollständige Version anzeigen : variabler Wert in einer IP-Adresse


Holger1
11.10.2011, 08:32
Hallo,

Ich möchte folgendes in VBA tun, habe aber keine Ahnung wie

If aaa = "192.160.170.***" Then
etwas ausführen
End If

der Bereich *** soll beispielsweise von 2 - 50 vorgegeben sein.

Also bei alle IP-Adressen von "192.160.170.2" bis "192.160.170.50" soll die Prozedur durchlaufen werden.

Wie kann ich diesen Bereich definieren?

Holger1

fhentzsc
11.10.2011, 09:58
Hallo Holger,

probier doch mal das aus:



Public Sub TestItBaby()
Dim strIP As String
Dim strLeftSoll As String

'Nur zum Test:
strIP = "192.160.170.150"
strLeftSoll = "192.160.170."

If IsIpOkay(strIP, strLeftSoll, 2, 50) Then
Call Something()
End If

End Sub

Public Function IsIpOkay(ByVal strIP As String, ByVal strLeftPart As String, ByVal intFrom As Integer, ByVal intTo As Integer) As Boolean
Dim strIP_Rest As String
Dim intIP_Rest As Integer
Dim blnRC As Boolean

blnRC = False

If Left$(strIP, 12) = strLeftPart Then
strIP_Rest = Mid$(strIP, 13)
If IsNumeric(strIP_Rest) Then
intIP_Rest = CInt(strIP_Rest)
If intIP_Rest > intFrom - 1 And intIP_Rest < intTo + 1 Then
blnRC = True
End If
End If
End If

IsIpOkay = blnRC

End Function



Gruß

Frank

Holger1
11.10.2011, 10:50
Hallo Frank,

was soll ich sagen, einfach nur perfekt :grins:

Danke für deine Mühe!

Obgleich ich nicht genau weis was du in der Funktion alles so machst. Aber ich werde sie studieren um sie auch zu verstehen.

Vielen Dank noch mal!

Gruß Holger

fhentzsc
11.10.2011, 10:56
Die Funktion ist auch noch nicht perfekt.

besser so:


Public Function IsIpOkay(ByVal strIP As String, ByVal strLeftPart As String, ByVal intFrom As Integer, ByVal intTo As Integer) As Boolean
Dim strIP_Rest As String
Dim intIP_Rest As Integer
Dim blnRC As Boolean

blnRC = False

If Left$(strIP, Len(strLeftPart)) = strLeftPart Then
strIP_Rest = Mid$(strIP, Len(strLeftPart) + 1)
If IsNumeric(strIP_Rest) Then
intIP_Rest = CInt(strIP_Rest)
If intIP_Rest > intFrom - 1 And intIP_Rest < intTo + 1 Then
blnRC = True
End If
End If
End If

IsIpOkay = blnRC

End Function



Die Funktion prüft zuerst ob der linke Teil (strLeftPart) übereinstimmt.
Dann wird geprüft ob der Rest auch numerisch ist, wenn dies zutrifft wird geprüft ob er im vorgegebenen Bereich (2..50) liegt.

Gruß

Frank

ebs17
11.10.2011, 11:04
Als Variante:
Sub test_like()
Dim td As Variant, i As Long, x As Long
td = Array("192.160.170.2", "192.160.170.37", "192.160.170.55", _
"192.160.200.15", "192.160.150.20", "192.160.170.5")
For i = 0 To UBound(td)
If td(i) Like "192.160.170.*" Then
x = Val(Mid$(td(i), InStrRev(td(i), ".") + 1))
If x >= 2 And x <= 50 Then Debug.Print i, td(i)
End If
Next
End Sub
Für anspruchsvollere Aufgaben könnte man auch reguläre Ausdrücke (Intelligente" Textanalyse (http://www.ms-office-forum.net/forum/showthread.php?t=256917)) einsetzen.

kama
11.10.2011, 11:46
Hallo
Ich denke diese Varianten soltest du dir auch mal anschauen.
Public Function IPsplit(ipstring As String) As Boolean
Dim temp, x
'Wenn es immer die selben ersten drei Teile sind (was anzunehmen ist)
x = Val(Mid(ipstring, 13))
'wenn ip vordere teil variable ist
'temp = Split(ipstring, ".")
'x = Val(temp(2))
IPsplit = (x > 1 And x < 51)
End Function

Was auch Möglich ist die IP in eine Dezimalzahl ausgeben. IP=a.b.c.d

a * 256^3 + b * 256^2 + c * 256 + d