Создание серии последовательных номеров с использованием формы пользователя для базы данных - PullRequest
0 голосов
/ 03 апреля 2020

У меня есть пользовательская форма, которую я создал для подачи в выпадающий список / выпадающий список, который будет содержать IP-адреса. Эта база данных Excel используется для развертывания компьютеров и оборудования на новых объектах по мере их открытия. Как вы можете видеть в пользовательской форме, у меня есть два варианта ... Одна радиокнопка, позволяющая вводить один IP-адрес, а другая - ввод. начальный IP-адрес и конечный IP-адрес для создания диапазона. Поля ввода появляются только тогда, когда соответствующая опция имеет значение ИСТИНА. Одиночное поле ввода IP отлично записывается в правильный столбец, но когда я нажимаю переключатель, чтобы добавить диапазон, введите начальный и конечный диапазон и нажимаю кнопку ОТПРАВИТЬ, ничего не вводится. Курсор просто спускается на одну ячейку от первой пустой ячейки в столбце.
enter image description here enter image description here enter image description here

Вот код

Private Sub Submit_Data_Click()

Dim sh As Worksheet
Set sh = ThisWorkbook.Sheets("Arrays")
Dim N As Long
Dim lastRow As Long
Dim X, Y, A, B

N = sh.Range("I" & Application.Rows.Count).End(xlUp).Row

If Me.Add_single_IP.Value = True Then
    sh.Range("I" & N + 1).Value = Me.sgle_IP_add_tb1
    Else
If Me.Add_IP_Rng.Value = True Then

    A = Me.rge_IP_start_tb2.Value
    B = Me.Rge_IP_End_tb2.Value

    For N = I2 To I

    ActiveCell.Value = X
    ActiveCell.Offset(X + 1, Y).Select
    Next N
    X = 0
    Y = 0
    End If
    End If

End Sub

Я добавляю команду CLEAR в конец кода после отправки данных, а также MsgBox, чтобы указать, что данные были добавлены.

Любая помощь приветствуется.

1 Ответ

0 голосов
/ 03 апреля 2020

Добавить опцию Explicit в начало вашего кода, и компилятор скажет вам, что! 2 и я не определены. Вы можете упростить форму, удалив кнопки выбора и имея только 2 текстовых поля. Если пользователь оставляет пустой конечный адрес, установите его в качестве начального адреса, чтобы был добавлен только 1 адрес. Вы также должны добавить некоторую проверку ввода пользователя. Например.

Option Explicit

Private Sub Submit_Data_Click()
    Dim wb As Workbook, ws As Worksheet, rngTarget As Range
    Dim s1 As String, ip1 As Variant
    Dim s2 As String, ip2 As Variant
    Dim i As Integer, n As Integer

    Set wb = ThisWorkbook
    Set ws = wb.Sheets("Arrays")
    Set rngTarget = ws.Range("I" & Rows.Count).End(xlUp)

    If Me.Add_single_IP = True Then
        s1 = Me.sgle_IP_add_tb1
        s2 = s1
    Else
        s1 = Me.rge_IP_start_tb2
        s2 = Me.rge_IP_End_tb2
    End If

    ' split string into bytes
    ip1 = Split(s1, ".")
    ip2 = Split(s2, ".")

    ' validate
    Dim msg As String
    If UBound(ip1) <> 3 Or UBound(ip2) <> 3 Then
        msg = "IP must be n.n.n.n"
    ElseIf ip1(3) > 255 Or ip2(3) > 255 Then
        msg = "Host must be 1 to 255"
    ElseIf ip1(3) > ip2(3) Then
        msg = s1 & " is greater then " & s2
    ElseIf ip1(0) <> ip2(0) Or ip1(1) <> ip2(1) Or ip1(2) <> ip2(2) Then
        msg = "Different networks"
    End If

    ' failed validation
    If Len(msg) > 0 Then
        MsgBox msg, vbCritical, s1 & "-" & s2
        Exit Sub
    End If

    ' calc range and write to sheet
    n = ip2(3) - ip1(3) + 1
    For i = 1 To n
       Set rngTarget = rngTarget.Offset(1, 0) ' move down
       rngTarget = Join(ip1, ".")
       ip1(3) = ip1(3) + 1
    Next
    MsgBox n & " addresses added ", vbInformation, s1 & "-" & s2

End Sub

...