如何使用VBA在用户表单中更新Excel工作表的数据 [英] How to update data of an excel sheet in a userform with vba

查看:239
本文介绍了如何使用VBA在用户表单中更新Excel工作表的数据的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

U想知道我如何从Excel工作表中检索数据并在用户表单中对其进行更新.

U would like to know how i can retrieve data from an excel sheet and update it in a userform.

在图片上,您可以看到用户窗体的外观. 我想做的是制作另一个用户表单,该表单可以在工作表中搜索特定参考并更新该特定行的某些单元格.

on the picture you can see what the userform looks like. What i would like to do is make another userform that can search for a specific reference in the sheet and update some cells of that specific row.

这是我现在要在工作表中插入数据的代码.

This is the code I have now to insert data into the sheet.

Private Sub cmdClear_Click()
' Clear the form
 For Each ctl In Me.Controls
 If TypeName(ctl) = "TextBox" Or TypeName(ctl) = "ComboBox" Then
 ctl.Value = ""
 ElseIf TypeName(ctl) = "CheckBox" Then
 ctl.Value = False
 End If
 Next ctl
End Sub

Private Sub cmdSend_Click()
    Dim RowCount As Long
    Dim ctl As Control
' Check user input

    If Me.combTechnieker.Value = "" Then
        MsgBox "Dag vreemdeling! Welke van de 4 Mongolen ben je?", vbExclamation, "RMA invoer"
        Me.combTechnieker.SetFocus
        Exit Sub
    End If

    If Me.txtPcwRef.Value = "" Then
        MsgBox "Vul onze referentie in!", vbExclamation, "RMA invoer"
        Me.txtPcwRef.SetFocus
        Exit Sub
    End If

    If Me.txtKlant.Value = "" Then
        MsgBox "Vul de naam van de klant in!", vbExclamation, "RMA invoer"
        Me.txtKlant.SetFocus
        Exit Sub
    End If

    If Me.txtMerk.Value = "" Then
        MsgBox "Vul het merk in!", vbExclamation, "RMA invoer"
        Me.txtMerk.SetFocus
        Exit Sub
    End If

    If Me.txtMerkRef.Value = "" Then
        MsgBox "Vul de referentie van de fabrikant in!", vbExclamation, "RMA invoer"
        Me.txtMerkRef.SetFocus
        Exit Sub
    End If

    If Me.txtProduct.Value = "" Then
        MsgBox "Vul het product in!", vbExclamation, "RMA invoer"
        Me.txtProduct.SetFocus
        Exit Sub
    End If

    If Me.txtSerienummer.Value = "" Then
        MsgBox "Vul het serienummer in!", vbExclamation, "RMA invoer"
        Me.txtSerienummer.SetFocus
        Exit Sub
    End If

    If Me.txtProbleem.Value = "" Then
        MsgBox "Vul de probleem omschrijving in!", vbExclamation, "RMA invoer"
        Me.txtProbleem.SetFocus
        Exit Sub
    End If

    If Me.txtOnderdelen.Value = "" Then
        MsgBox "Bent u zeker dat er geen onderdelen achterblijven. Indien ja. Vul N/A in", vbExclamation, "RMA invoer"
        Me.txtOnderdelen.SetFocus
        Exit Sub
    End If

' Write data to worksheet
    RowCount = Worksheets("RMA 2016").Range("A1").CurrentRegion.Rows.Count

    With Worksheets("RMA 2016").Range("A1")
        .Offset(RowCount, 0).Value = Format(Now, "dd/mm/yyyy hh:nn:ss")
        .Offset(RowCount, 1).Value = "Open"
        .Offset(RowCount, 3).Value = Me.txtPcwRef.Value
        .Offset(RowCount, 4).Value = Me.txtKlant.Value
        .Offset(RowCount, 5).Value = Me.txtMerk.Value
        .Offset(RowCount, 6).Value = Me.txtMerkRef.Value
        .Offset(RowCount, 7).Value = Me.txtProduct.Value
        .Offset(RowCount, 8).Value = Me.txtSerienummer.Value
        .Offset(RowCount, 9).Value = Me.txtOnderdelen.Value
        .Offset(RowCount, 10).Value = Me.txtProbleem.Value
        .Offset(RowCount, 13).Value = Me.combTechnieker.Value

    If Me.chkGarantie.Value = True Then
     .Offset(RowCount, 2).Value = "Ja"
     Else
    .Offset(RowCount, 2).Value = "Nee"
    End If
    End With
    ' Clear the form
     For Each ctl In Me.Controls
     If TypeName(ctl) = "TextBox" Or TypeName(ctl) = "ComboBox" Then
     ctl.Value = ""
    ElseIf TypeName(ctl) = "CheckBox" Then
    ctl.Value = False
    End If
    Next ctl
End Sub

Private Sub UserForm_Click()

End Sub

推荐答案

我创建了一个小示例来展示加载,保存和删除记录的一般机制如何与表单一起使用.当您尝试保存具有不存在的ID的记录时,它将在表中追加一条新记录.这应该非常接近您的要求,并向您展示如何在用户表单和工作表之间进行数据混洗.

I have created a small example to showcase how the general mechanics of loading, saving and deleting a record can work together with the form. When you try to save a record with non-existing ID, it will append a new record to the table. This should be very close to what you are asking and shows you how to shuffle data between a user form and a worksheet.

Private Sub cmdLoad_Click()

    ' check if provided product ID is not empty
    If Len(Trim(Me.txtId)) = 0 Then
        MsgBox "Enter product ID to load the record."
        Exit Sub
    End If

    ' try to retrieve the product by ID
    Dim rngIdList As Range, rngId As Range
    Set rngIdList = ActiveSheet.Range([a2], [a2].End(xlDown))

    Set rngId = rngIdList.Find(Me.txtId, LookIn:=xlValues)
    If rngId Is Nothing Then
        ' product ID is not found
        MsgBox "Product ID " & Me.txtId & " doesn't exist."
        Exit Sub
    Else
        ' product ID is found -- fill out the form
        Me.txtId = rngId.Offset(0, 0)
        Me.txtName = rngId.Offset(0, 1)
        Me.txtNote = rngId.Offset(0, 2)
    End If

End Sub

Private Sub cmdSave_Click()

    ' check if provided product ID is not empty
    If Len(Trim(Me.txtId)) = 0 Then
        MsgBox "Enter product ID to load the record."
        Exit Sub
    End If

    ' try to retrieve the product by ID
    Dim rngIdList As Range, rngId As Range
    Set rngIdList = ActiveSheet.Range([a2], [a2].End(xlDown))

    Set rngId = rngIdList.Find(Me.txtId, LookIn:=xlValues)
    If rngId Is Nothing Then
        ' if product ID is not found, append new one to the end of the table
        With rngIdList
            Set rngId = .Offset(.Rows.Count, 0).Resize(1, 1)
        End With
    End If

    ' update excel record
    rngId.Offset(0, 0) = Me.txtId
    rngId.Offset(0, 1) = Me.txtName
    rngId.Offset(0, 2) = Me.txtNote

End Sub

Private Sub cmdDelete_Click()

    ' check if provided product ID is not empty
    If Len(Trim(Me.txtId)) = 0 Then
        MsgBox "Enter product ID to delete the record."
        Exit Sub
    End If

    ' try to retrieve the product by ID
    Dim rngIdList As Range, rngId As Range
    Set rngIdList = ActiveSheet.Range([a2], [a2].End(xlDown))

    Set rngId = rngIdList.Find(Me.txtId, LookIn:=xlValues)
    If rngId Is Nothing Then
        ' product ID is not found -- nothing to delete
        MsgBox "Product ID " & Me.txtId & " doesn't exist."
        Exit Sub
    Else
        ' product ID is found -- delete the entire line
        rngId.EntireRow.Delete
    End If

End Sub

这篇关于如何使用VBA在用户表单中更新Excel工作表的数据的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆