使用用户表格从当前打开的工作簿中检索外部工作簿中的信息

我代码为userform,允许我使用工作簿的Excel工作簿中的项目ID检索信息。

但是,现在我需要根据用户inputsearch外部工作簿中findprojectID(称为active master file

然后,它将检索信息并将其放入用户窗体中,并使用add命令button将信息插入当前工作簿中名为project tracker文件的新行中。

问题是我不知道从外部工作簿检索当前打开工作簿中的用户窗体的代码。

我有两个工作簿。 此用户窗体在名为“ project tracker的工作簿中find,而我想根据项目ID检索信息的外部工作簿称为“ active master project

这是我用于命令searchbutton的代码,用于在名为project tracker的工作簿的表单中进行检索和search:

 Private Sub CommandSearchButton2_Click() Dim lastrow Dim ProjCode As String Dim LabelProjName As String Dim LabelObjective As String Dim LabelProjSponsor As String Dim LabelProjSponsorNew As String Dim LabelProjManager As String Dim LabelRegulatory As String Dim LabelRiskLvl As String Dim LabelDatePar As Date Dim LabelCostPar As Long Dim LabelAffectCust As String Dim LabelCustNonRetail As String Dim LabelCustRetail As String Dim LabOutsourcingImp As String Dim LabelKeyUpdate As String Dim LabelSector As String searchRow = 0 lastrow = Sheets("Program Status Summary").Range("B" & Rows.Count).End(xlUp).Row ProjCode = TextBoxProjCode.Text For currentrow = 4 To 100 If Cells(currentrow, 2).Text = ProjCode Then searchRow = currentrow TextBoxProjCode.Text = Cells(currentrow, 2).Text TextBoxProjName.Text = Cells(currentrow, 3) TextBoxSector.Text = Cells(currentrow, 4) TextBoxObjective.Text = Cells(currentrow, 5) TextBoxProjSponsor.Text = Cells(currentrow, 7) TextBoxProjSponsorNew.Text = Cells(currentrow, 8) TextBoxProjM.Text = Cells(currentrow, 6) TextBoxRegulatory.Text = Cells(currentrow, 20) TextBoxRiskLvl.Text = Cells(currentrow, 13) TextBoxDatePar.Text = Cells(currentrow, 12) TextBoxCostPar.Text = Cells(currentrow, 10) TextBoxAffectCust.Text = Cells(currentrow, 15) TextBoxCustNonRetail.Text = Cells(currentrow, 16) TextBoxCustRetail.Text = Cells(currentrow, 17) TextBoxOutsourcingImp.Text = Cells(currentrow, 19) TextBoxKeyUpdate.Text = Cells(currentrow, 18) End If Next currentrow TextBoxProjCode.SetFocus End Sub 

使用多个工作簿的最佳方法是使用对象variables

 Dim WbPT As Workbook, _ WbAMP As Workbook, _ WsPSS As Worksheet, _ Ws As Worksheet '----The SET keyword is only to attribute value to an object variable Set WbPT = Workbooks("project tracker") Set WbAMP = Workbooks("active master project") Set WsPSS = WbPT.Sheets("Program Status Summary") '----Use with to have the reference availaible starting with a simple dot "." With WsPSS MsgBox .Cells(1, "B") End With 

所以如果我理解的很好,你的代码应该是这样的:

 Private Sub CommandSearchButton2_Click() Dim lastrow Dim ProjCode As String Dim LabelProjName As String Dim LabelObjective As String Dim LabelProjSponsor As String Dim LabelProjSponsorNew As String Dim LabelProjManager As String Dim LabelRegulatory As String Dim LabelRiskLvl As String Dim LabelDatePar As Date Dim LabelCostPar As Long Dim LabelAffectCust As String Dim LabelCustNonRetail As String Dim LabelCustRetail As String Dim LabOutsourcingImp As String Dim LabelKeyUpdate As String Dim LabelSector As String Dim WbPT As Workbook, _ WbAMP As Workbook, _ WsPSS As Worksheet, _ Ws As Worksheet Set WbPT = Workbooks("project tracker") Set WbAMP = Workbooks("active master project") Set WsPSS = WbPT.Sheets("Program Status Summary") With WsPSS searchRow = 0 lastrow = .Range("B" & .Rows.Count).End(xlUp).Row ProjCode = TextBoxProjCode.Text For currentrow = 4 To lastrow If .Cells(currentrow, 2).Text = ProjCode Then searchRow = currentrow TextBoxProjCode.Text = .Cells(currentrow, 2).Text TextBoxProjName.Text = .Cells(currentrow, 3) TextBoxSector.Text = .Cells(currentrow, 4) TextBoxObjective.Text = .Cells(currentrow, 5) TextBoxProjSponsor.Text = .Cells(currentrow, 7) TextBoxProjSponsorNew.Text = .Cells(currentrow, 8) TextBoxProjM.Text = .Cells(currentrow, 6) TextBoxRegulatory.Text = .Cells(currentrow, 20) TextBoxRiskLvl.Text = .Cells(currentrow, 13) TextBoxDatePar.Text = .Cells(currentrow, 12) TextBoxCostPar.Text = .Cells(currentrow, 10) TextBoxAffectCust.Text = .Cells(currentrow, 15) TextBoxCustNonRetail.Text = .Cells(currentrow, 16) TextBoxCustRetail.Text = .Cells(currentrow, 17) TextBoxOutsourcingImp.Text = .Cells(currentrow, 19) TextBoxKeyUpdate.Text = .Cells(currentrow, 18) End If Next currentrow End With TextBoxProjCode.SetFocus End Sub