Excel 将工作簿中的数据检索到其他工作簿中的用户窗体

Excel 将工作簿中的数据检索到其他工作簿中的用户窗体,excel,vba,Excel,Vba,我有一本Excel工作手册作为数据库,还有一个用户表单作为UI。两者都在不同的工作手册中 我想用Excel工作簿中的数据填充UserForm Private Sub CommandButton4_Click() Dim n As Long, i As Long n = 0 Dim mydata1 As Workbook Set mydata1 = Workbooks.Open("\\NTSYDFSP150\Shared\fmd\credit\LE

我有一本Excel工作手册作为数据库,还有一个用户表单作为UI。两者都在不同的工作手册中

我想用Excel工作簿中的数据填充UserForm

Private Sub CommandButton4_Click()
    Dim n As Long, i As Long
    n = 0
    Dim mydata1 As Workbook        

    Set mydata1 = Workbooks.Open("\\NTSYDFSP150\Shared\fmd\credit\LEM_Reports\SV References\SV Entry Form Input.xlsx")

    mydata1.Worksheets("sheet1").Activate
    mydata1.Worksheets("sheet1").Range("A1").Select

    n = Worksheets("sheet1").Range("a1").CurrentRegion.Rows.Count

    For i = 2 To n 
        If Trim(Sheet1.Cells(i, 1)) <> Trim(UserForm1.TextBox157.Text) And i = n Then
            MsgBox ("Name not found") 
        End If

        If Trim(Sheet1.Cells(i, 1)) = Trim(UserForm1.TextBox157.Text) Then
            UserForm1.TextBox1.Text = Sheet1.Cells(i, 1)
            Exit For
        End If
    Next i

    mydata1.Save
    mydata1.Close

    MsgBox "Data searched successfully", 0, vbNullString
End Sub
Private子命令按钮4\u单击()
我和你一样长,我和你一样长
n=0
将mydata1设置为工作簿
设置mydata1=工作簿。打开(“\\NTSYDFSP150\Shared\fmd\credit\LEM\u Reports\SV References\SV Entry Form Input.xlsx”)
mydata1.工作表(“sheet1”).激活
mydata1.工作表(“sheet1”).范围(“A1”).选择
n=工作表(“表1”).范围(“a1”).当前区域.Rows.Count
对于i=2到n
如果Trim(Sheet1.Cells(i,1))Trim(UserForm1.TextBox157.Text)且i=n,则
MsgBox(“未找到名称”)
如果结束
如果Trim(Sheet1.Cells(i,1))=Trim(UserForm1.TextBox157.Text),则
UserForm1.TextBox1.Text=Sheet1.Cells(i,1)
退出
如果结束
接下来我
mydata1.Save
mydata1.关闭
MsgBox“已成功搜索数据”,0,vbNullString
端接头
问题: 运行代码时,我无法从工作簿Excel数据库检索数据

Sheet1.单元格(i,1)
:-此字段仍指用户表单工作手册中的Shee1,但应指共享驱动器位置的工作手册,因为我已激活并打开了该工作手册


注意:
n
计算正确。

我清理了您的代码,并在必要时限定了范围。没有限定范围很可能是这里的错误。示例:
工作表(“表1”)。范围(“a1”)需要
mydata1.工作表(“sheet1”).范围(“a1”)。请尝试以下代码:

Private Sub CommandButton4_Click()
Dim n As Long, i As Long
n = 0
Dim mydata1 As Workbook        

Set mydata1 = Workbooks.Open("\\NTSYDFSP150\Shared\fmd\credit\LEM_Reports\SV References\SV Entry Form Input.xlsx")


n = mydata1.Worksheets("sheet1").Range("a1").CurrentRegion.Rows.Count

For i = 2 To n 
    If Trim(mydata1.Sheet1.Cells(i, 1)) <> Trim(UserForm1.TextBox157.Text) And i = n Then
        MsgBox ("Name not found") 
    End If

    If Trim(mydata1.Sheet1.Cells(i, 1)) = Trim(UserForm1.TextBox157.Text) Then
        UserForm1.TextBox1.Text = mydata1.Sheet1.Cells(i, 1)
        Exit For
    End If
Next i

mydata1.Save
mydata1.Close

MsgBox "Data searched successfully", 0, vbNullString
End Sub
Private子命令按钮4\u单击()
我和你一样长,我和你一样长
n=0
将mydata1设置为工作簿
设置mydata1=工作簿。打开(“\\NTSYDFSP150\Shared\fmd\credit\LEM\u Reports\SV References\SV Entry Form Input.xlsx”)
n=mydata1.工作表(“sheet1”).范围(“a1”).CurrentRegion.Rows.Count
对于i=2到n
如果Trim(mydata1.Sheet1.Cells(i,1))Trim(UserForm1.TextBox157.Text)且i=n,则
MsgBox(“未找到名称”)
如果结束
如果Trim(mydata1.Sheet1.Cells(i,1))=Trim(UserForm1.TextBox157.Text),那么
UserForm1.TextBox1.Text=mydata1.Sheet1.Cells(i,1)
退出
如果结束
接下来我
mydata1.Save
mydata1.关闭
MsgBox“已成功搜索数据”,0,vbNullString
端接头

请注意,激活工作簿和
。在这种情况下,选择
打开
范围是不必要的(因此我将其删除),一般应避免使用(有关其他建议,请参阅上面的注释)。

这只是防止打开另一个工作簿的建议方法:

Private Sub CommandButton4_Click()

Dim wbPath As String: wbPath = "\\NTSYDFSP150\Shared\fmd\credit\LEM_Reports\SV References\"
Dim wbName As String: wbName = "SV Entry Form Input.xlsx"
Dim wsName As String: wsName = "sheet1"
Dim arrList As Object: Set arrList = CreateObject("System.Collections.ArrayList")
Dim lr As Long, x As Long

'Get the last row from A column, notice we need R1C1 notation for Excel4Macro
lr = ExecuteExcel4Macro("MATCH(""zzz"",'" & wbPath & "[" & wbName & "]" & wsName & "'!C1)")

'Let's use an ArrayList to get our validation list
For x = 2 To lr
    arrList.Add Trim(ExecuteExcel4Macro("'" & wbPath & "[" & wbName & "]" & wsName & "'!R" & x & "C1"))
Next x

'Check if ArrayList contains your lookup value
If arrList.Contains(Trim(UserForm1.TextBox157.Text)) Then
    UserForm1.TextBox1.Text = UserForm1.TextBox157.Text
Else
    MsgBox ("Name not found")
End If

MsgBox "Data searched successfully"

End Sub

首先,你可能会从阅读中受益。正确应用这项技术可能已经解决了您的问题请注意,您尚未提出任何问题()请注意
Sheet1。单元格(i,1)
指的是工作簿中编写代码的工作表。如果要访问另一个工作簿中的工作表,需要指定类似于
mydata1的工作表。工作表(“sheet1”)
指工作表
mydata1
中的
sheet1
。上面的链接对此进行了解释。也许可以尝试避免同时打开第二个工作簿,并将这些值放入一个数组中,然后在该数组中循环