Vba обновить форму пользователя на основе текстового идентификатора v.2 - PullRequest
0 голосов
/ 20 января 2020

Переписать вопрос из этого topi c

Я ищу код vba для поиска и обновления данных в каждой строке для примера Excel (см. Ссылку на изображение) в пользователе сформироваться. Поиск и обновление должны использовать столбец «Serialno» в качестве идентификатора, который хранится в тексте, а результат поиска должен обновлять столбцы для строки серийного номера.

Я уже создал форму для добавления данных, но нужна другая форма для поиска и обновления.

форма для добавления данных

Private Sub CommandButton1_Click()
    If Me.TextBox1.Value = "" Then
    MsgBox "Add Serialno"
    Exit Sub
    End If

    If Me.TextBox3.Value = "" Then
    MsgBox "Add Weapon name"
    Exit Sub
    End If

    If Me.TextBox4.Value = "" Then
    MsgBox "Add dealer"
    Exit Sub
    End If

    If Me.TextBox5.Value = "" Then
    MsgBox "Add manufacturer"
    Exit Sub
    End If

    If Me.TextBox6.Value = "" Then
    MsgBox "Add weaponstype"
    Exit Sub
    End If

    If Me.TextBox7.Value = "" Then
    MsgBox "Add mechanism"
    Exit Sub
    End If

    If Me.TextBox8.Value = "" Then
    MsgBox "Add caliber"
    Exit Sub
    End If

    If Me.TextBox9.Value = "" Then
    MsgBox "Add pipelenght"
    Exit Sub
    End If

Dim sh As Worksheet
Set sh = ThisWorkbook.Sheets("Master")
Dim n As Long

If Application.WorksheetFunction.CountIf(sh.Range("A:A"), Me.TextBox1.Value) > 0 Then
    MsgBox "Dette serienummeret eksisterer allerede", vbCritical
    Exit Sub
End If

n = sh.Range("A" & Application.Rows.Count).End(xlUp).Row

sh.Unprotect "1234"

sh.Range("A" & n + 1).Value = Me.TextBox1
sh.Range("B" & n + 1).Value = Me.DTPicker1
sh.Range("C" & n + 1).Value = Me.TextBox3
sh.Range("D" & n + 1).Value = Me.TextBox4
sh.Range("E" & n + 1).Value = Me.TextBox5
sh.Range("F" & n + 1).Value = Me.TextBox6
sh.Range("G" & n + 1).Value = Me.TextBox7
sh.Range("H" & n + 1).Value = Me.TextBox8
sh.Range("I" & n + 1).Value = Me.TextBox9

Me.TextBox1.Value = ""
Me.TextBox3.Value = ""
Me.TextBox4.Value = ""
Me.TextBox5.Value = ""
Me.TextBox6.Value = ""
Me.TextBox7.Value = ""
Me.TextBox8.Value = ""
Me.TextBox9.Value = ""

sh.Protect "1234"

MsgBox "Nytt våpen lagt til", vbInformation

End Sub

Private Sub CommandButton2_Click()
Me.TextBox1.Value = ""
Me.TextBox3.Value = ""
Me.TextBox4.Value = ""
Me.TextBox5.Value = ""
Me.TextBox6.Value = ""
Me.TextBox7.Value = ""
Me.TextBox8.Value = ""
Me.TextBox9.Value = ""

End Sub

Sample Data

1 Ответ

0 голосов
/ 20 января 2020

Для обновления данных в указанной строке c вы можете использовать процедуру, подобную приведенному ниже коду. Передайте ему номер строки, и он обновит ячейки в этой строке -: Update 5 обновит строку 5.

Public Sub Update(RowNum As Long)
    With Sheet1 'Using the sheets Code Name (Sheet Name not in brackets in Project Explorer).
        .Cells(RowNum, 2) = "Some New Value in column B"
        .Cells(RowNum, 4) = "Some Other Value in column D"
        .Range(.Cells(RowNum, 5), .Cells(RowNum, 7)) = Array("A", 3, "Whatever") 'Update values in column E:G
    End With
End Sub  

Вам нужно найти строку, в которой отображается ваш серийный номер. Передайте функции серийный номер, который существует в столбце 1, и он вернет номер строки, если он не существует, он вернет 0: - FindRow("R/16916") вернет 3 на вашем изображении.

Public Function FindRow(SearchString As String) As Long

    Dim tmpRng As Range

    With Sheet1.Columns(1)
        Set tmpRng = .Find(What:=SearchString, _
                           After:=.Cells(1), _
                           LookIn:=xlValues, _
                           LookAt:=xlWhole, _
                           SearchOrder:=xlByRows, _
                           SearchDirection:=xlNext)
        If Not tmpRng Is Nothing Then
            FindRow = tmpRng.Row
        Else
            'Row not found, return an illegal row number.
            FindRow = 0
        End If
    End With

End Function  

Соедините все вместе:

Sub Test()

    Dim lRow As Long

    'Use the FindRow function to return the row number of the searched item.
    lRow = FindRow("R/16916")

    If lRow > 0 Then
        'Update the data in that row.
        Update lRow
    End If

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