将refeditjoin到Vlookup用户表单中

我有一个vlookup用户表单,它可以根据座位n°自动填写表单中的细节。

在这里输入图像说明

现在我想合并编辑ref从文本框中粘贴这些数据到用户用refeditselect的单元格 。 因此,我需要一些帮助来解决这些问题。
这是我使用的代码。

我可能希望插入 3个重新编辑框供用户select他们希望从文本框中粘贴每个数据( 名称部门分机号 )的单元格。

看到我的代码如下:

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 

我试图找出一个代码来解决这个问题,但我得到一个对象所需的错误。 我的rngcopy将是textbox2.value(名称)和rngpaste的位置将是编辑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) 

表格:

在这里输入图像说明

代码:

 ' 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 

您正在将您的rngCopy声明为一个Range对象 ,然后将其绑定到Range对象.value 方法

Set rngCopy = TextBox2.Value

这可能是您遇到错误的地方。 尝试声明一个string并将其分配给您的副本值。

 Dim string1 As String string1 = TextBox2.Value 

打开LOCALS窗口浏览代码编辑器,并在分配string时查看rngCopy对象的情况。