Создать MA C адрес с VBA (формат xx: xx: xx: xx: xx: xx) - PullRequest
0 голосов
/ 19 марта 2020

Я хочу сгенерировать формат адреса MA C, например, 00: 06: 9 C: 10: 07: 45, но у меня есть условие -

  • MA C адрес должен быть уникальным (не дублировать с существующим MA C адресом)>
  • Необходимо продолжить отсчет с последней MA C, такой как последняя MA C - 00: 06: 9 C: 10: 07: 01 следующая MA C должна быть 00: 06: 9 C: 10: 07: 02 ..... nn: nn: nn: nn: nn: nn (последняя MA C он имеет на той же книге другой лист).
  • Новая MA C также должна продолжать запись с последней MA C. и нужно экспортировать в файл CSV (просто новый MA C не включает в себя старый)
Private Sub CommandButton1_Click()  'Get the last MAC Address function
    Dim var As String


    Dim lRow As Long
    Dim lCol As Long



        lRow = Cells.Find(What:="*", _
                        After:=Range("A1"), _
                        LookAt:=xlPart, _
                        LookIn:=xlFormulas, _
                        SearchOrder:=xlByRows, _
                        SearchDirection:=xlPrevious, _
                        MatchCase:=False).Row

        var = Range("A" & lRow).Value
        MsgBox "Last value is : " & var

    End Sub

    Private Sub exportText_Click()

            Dim i As Integer
            Dim MacStd As String


            MacStd = "00:06:9C:10"

                  For i = TextBox1 To TextBox3

                Cells(i, 1).Value = MacStd & ":" & Hex(i)
            Next i
        'MsgBox Range("A1").End(xlToRight).Select
    End Sub

Может кто-нибудь помочь мне?

1 Ответ

1 голос
/ 19 марта 2020

Поднесите следующий код, пожалуйста. Он возвращается в Immediate Window (Ctrl + G, в VBE), но его можно легко адаптировать для возврата в любое время. Код может быть выполнен более изящным рекурсивным способом, используя переменную publi c, но нет времени вкладывать средства в этот аспект ...

Создайте следующие переменные поверх вашего модуля в объявлении область:

Option Explicit
Private finishVal As Long, curMAC As Long, boolStop As Boolean, boolFirst As Boolean

Затем скопируйте следующие подпункты:

Sub testMACGenerator() 'used to test the MAC creation
    Dim MacLast As String, startVal As Long
    finishVal = 1500 'how many MAC addresses to be created
    curMAC = 0: boolStop = False
    MacLast = "00:06:9C:10:01:01" 'Starting MAC (last recorded MAC)
    'the above one uses your root ("00:06:9C:10") and first Hex values for
    'the fifth and the sixth groups
    MACGenerator1 MacLast
End Sub

Private Sub MACGenerator1(strMAC As String)'creates the fifth MAC group
 Dim i As Integer, macIntermed As String, j As Long, MacStd As String
 Dim startVal As Long, startSec As Long
    MacStd = left(strMAC, 11)
    startVal = CLng("&H" & Split(strMAC, ":")(4))
    startSec = CLng("&H" & Split(strMAC, ":")(5)) + 1: boolFirst = True
    For i = startVal To 255
        If boolStop Then Exit Sub
        If IsNumeric(Hex(i)) Then
            macIntermed = MacStd & ":" & Format(Hex(i), "00")
        Else
            If Len(Hex(i)) = 1 Then
                macIntermed = MacStd & ":" & "0" & Hex(i)
            Else
                macIntermed = MacStd & ":" & Hex(i)
            End If
        End If
        If boolFirst Then
            MACGenerator2 macIntermed, startSec
        Else
            MACGenerator2 macIntermed
        End If
    Next i
End Sub
'it creates the sixth MAC group:
Private Sub MACGenerator2(MacStd As String, Optional lngFirst As Long)
 Dim i As Integer, macFinal As String, j As Long
    For i = IIf(lngFirst <> 0, lngFirst, 1) To 255
        If IsNumeric(Hex(i)) Then
            macFinal = MacStd & ":" & Format(Hex(i), "00")
        Else
            If Len(Hex(i)) = 1 Then
                macFinal = MacStd & ":" & "0" & Hex(i)
            Else
                macFinal = MacStd & ":" & Hex(i)
            End If
        End If
        curMAC = curMAC + 1
        Debug.Print macFinal ': Stop
        If curMAC >= finishVal Then
            boolStop = True
            curMAC = 0: finishVal = 0
            Exit Sub
        End If
    Next i
    boolFirst = False
End Sub

Если что-то неясно, не стесняйтесь спрашивать разъяснения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...