vba - 将 refedit 合并到 Vlookup 用户表单中

标签 vba excel

我有一个 vlookup 用户表单 它会根据座位号自动填写表格中的详细信息。

enter image description here

现在我想合并一个 ref 编辑来粘贴 中的这些数据。文本框 细胞 用户使用 refedit 进行选择。因此,我需要一些帮助来解决这些问题。这是我使用的代码。我可能想要 插入 3 个引用框供用户选择 细胞 他们想从 中粘贴每个数据( 姓名 部门 分机号 。)文本框 .

请参阅下面的代码:

Option Explicit

Private Sub Frame1_Click()

End Sub

Private Sub TextBox1_Exit(ByVal Cancel As MSForms.ReturnBoolean)

   Dim answer As Integer
   answer = TextBox1.Value
   TextBox2.Value = WorksheetFunction.VLookup(answer, Sheets("L12 - Data Sheet").Range("B:E"), 2, False)
   TextBox3.Value = WorksheetFunction.VLookup(answer, Sheets("L12 - Data Sheet").Range("B:E"), 3, False)
   TextBox4.Value = WorksheetFunction.VLookup(answer, Sheets("L12 - Data Sheet").Range("B:E"), 4, False)

End Sub

Private Sub TextBox2_Change()

End Sub

Private Sub TextBox3_Change()

End Sub

Private Sub TextBox4_Change()

End Sub
Private Sub CancelButton_Click()

    Unload Me
    End
End Sub

我已尝试找出解决此问题的代码,但我收到了 object required 错误。我的 rngcopy 将是 textbox2.value(名称),而 rngpaste 位置将是 ref 编辑 1。

这是代码
Private Sub PasteButton_Click()

Dim rngCopy As Range, rngPaste As Range
Dim wsPaste As Range
Dim answer As Integer
answer = TextBox1.Value
If RefEdit1.Value <> "" Then

        TextBox2.Value = WorksheetFunction.VLookup(answer, Sheets("L12 - Data Sheet").Range("B:E"), 2, False)
        Set rngCopy = TextBox2.Value
        Set wsPaste = ThisWorkbook.Sheets(Replace(Split(TextBox2.Value, "!")(0), "'", ""))
        Set rngPaste = wsPaste.Range(Split(TextBox2.Value, "!")(1))

        rngCopy.Copy rngPaste
  Else
        MsgBox "Please select an Output range"
    End If
End Sub

最佳答案

您应该使用 Match 获取行索引并将其公开给表单,以便复制功能可以使用它。
要设置 Ref 控件指向的目标,只需使用 Range() 评估 .Value 属性:

Range(RefEdit.Value).cells(1, 1) = Worksheet.Cells(row, column)

表格:

enter image description here

编码:
' constants to define the data
Const SHEET_DATA = "L12 - Data Sheet"
Const COLUMN_SEAT = "B"
Const COLUMNN_NAME = "C"
Const COLUMN_DEPT = "D"
Const COLUMN_EXTNO = "E"

Private Sheet As Worksheet
Private RowIndex As Long

Private Sub TxtSeatNo_Change()
  Dim seatno

  'clear the fields first
  Me.TxtName.value = Empty
  Me.TxtDept.value = Empty
  Me.TxtExtNo.value = Empty
  RowIndex = 0

  If Len(TxtSeatNo.value) Then
    Set Sheet = ThisWorkbook.Sheets(SHEET_DATA)

    On Error Resume Next

    ' get the seat number to either string or double
    seatno = TxtSeatNo.value
    seatno = CDbl(seatno)

    ' get the row index containing the SeatNo
    RowIndex = WorksheetFunction.match(seatno, _
                                       Sheet.Columns(COLUMN_SEAT), _
                                       0)
    On Error GoTo 0
  End If

  If RowIndex Then
    ' copy the values from the sheet to the text boxes
    Me.TxtName.value = Sheet.Cells(RowIndex, COLUMNN_NAME)
    Me.TxtDept.value = Sheet.Cells(RowIndex, COLUMN_DEPT)
    Me.TxtExtNo.value = Sheet.Cells(RowIndex, COLUMN_EXTNO)
  End If
End Sub

Private Sub BtCopy_Click()
  If RowIndex < 1 Then Exit Sub

  ' copy the current values to the cells pointed by the ref controls

  If Len(Me.RefName.value) Then _
    Range(Me.RefName.value) = Sheet.Cells(RowIndex, COLUMNN_NAME)

  If Len(Me.RefDept.value) Then _
    Range(Me.RefDept.value) = Sheet.Cells(RowIndex, COLUMN_DEPT)

  If Len(Me.RefExtNo.value) Then _
    Range(Me.RefExtNo.value) = Sheet.Cells(RowIndex, COLUMN_EXTNO)
End Sub

Private Sub BtlClose_Click()
  ' close the form
  Unload Me
End Sub

关于vba - 将 refedit 合并到 Vlookup 用户表单中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36056496/

相关文章:

excel - 带有用户输入变量的递归循环

excel - 最小化指定数量的小计组中的差异

excel - 如何创建日期和时间的自定义格式并将其分配给 Excel 工作表中的整列

vba - 将字符串的第一个字母大写

excel - 如果工作簿打开超过 2 小时,则从共享工作簿中删除用户

excel - OLEObject 和用户窗体之间的冲突

arrays - 有没有办法使用单行将值分配给 VBA 中的 Option Base 1 数组?

excel - 使用 WMI 在 VBA 中获取当前的 Windows 用户名

vba - 如何超链接 Visio 字符对象

excel - VBA 将负数转换为正数