Vba 如何从其他Excel工作表中提取数据

Vba 如何从其他Excel工作表中提取数据,vba,excel,Vba,Excel,我正在忙着设计客户账户表,我的所有客户详细信息都在工作簿中的各个表中。我也有一些类型的仪表板,我想设计 我的问题是,是否有某种方法可以添加帐号,它将在所有工作表中查找匹配的帐号,并在不必进行工作簿搜索的情况下跨出必要的字段 示例:仪表板 帐号搜索按钮 在我的仪表板上,显示以下字段 Clients Address, Client billing charges, discounts .... 搜索时,它会找到匹配的账号,并将信息拉入匹配的单元格 有什么好办法吗 这是仪表板 我想输入帐号,它与我的

我正在忙着设计客户账户表,我的所有客户详细信息都在工作簿中的各个表中。我也有一些类型的仪表板,我想设计

我的问题是,是否有某种方法可以添加帐号,它将在所有工作表中查找匹配的帐号,并在不必进行工作簿搜索的情况下跨出必要的字段

示例:仪表板

帐号
搜索按钮

在我的仪表板上,显示以下字段

Clients Address, Client billing charges, discounts ....
搜索时,它会找到匹配的账号,并将信息拉入匹配的单元格

有什么好办法吗

这是仪表板

我想输入帐号,它与我的定价表上的日期相匹配,所有项目#并给我单价。

定价表,第1行有所有账号,B列有所有项目编号代码。


谢谢

您需要添加一个ActiveX控件按钮,并将其命名为GenerateInvoiceButton

然后将以下内容粘贴到“仪表板”工作表模块中

我已经用注释指出了需要插入正确工作表名称和单元格位置的位置

 Private Sub GenerateInvoiceButton_Click()

      Dim AccountNumberRange As Range
      Dim AccountColumn As Range
      Dim LastAccountColumn As Long
      Dim AccountDataRange As Range
      Dim DataWS As Worksheet
      Dim DashBoardWS As Worksheet
      Dim AccountNumber As String
      Dim SelectedAccountLastRow As Long
      Dim SpecificAccountDataSet As Range
      Dim DashBoardDataStartPosition As Range

      'Change DataSheet to the sheet name of your sheet with the account data
      Set DataWS = ThisWorkbook.Sheets("DataSheet")

      'Change DashBoardSheet to the sheet name of your sheet with the DashBoard
      Set DashBoardWS = ThisWorkbook.Sheets("DashBoardSheet")

      'This should be set to the cell under the "UnitCost" in the INITIAL TAKE-ON COST section on your DashBoardSheet
      Set DashBoardDataStartPosition = DashBoardWS.Cells(16, "F")

      'This should be the cell in which you insert the account number
      AccountNumber = DashBoardWS.Range("G3").Value

      'Quititng the Code if there is no Account Number
      If AccountNumber = Empty Then

           MsgBox "Please Insert an Account Number"
           End

      End If

      With DataWS
          LastAccountColumn = .Columns(.Columns.Count).End(xlToLeft).Column
      End With

      'Starting from 4 because your account number start at Column D
      Set AccountNumberRange = DataWS.Range(DataWS.Cells(1, 4), DataWS.Cells(1, LastAccountColumn))

      Set AccountColumn = AccountNumberRange.Find(What:=AccountNumber)

      If AccountColumn Is Nothing Then

           MsgBox "Account Number: " & AccountNumber & _
                  vbCr & vbCr & "Not Found!" & vbCr & _
                  vbCr & _
                  "Please enter a valid Account Number."

      Else

           With DataWS

                SelectedAccountLastRow = .Rows(.Rows.Count).End(xlUp).Row

                'Starting at Row 2 because of your header row
                Set SpecificAccountDataSet = .Range(.Cells(2, AccountColumn.Column), .Cells(SelectedAccountLastRow, AccountColumn.Column))

                SpecificAccountDataSet.Copy

           End With

           DashBoardDataStartPosition.PasteSpecial Paste:=xlPasteValues

      End If

 End Sub

这取决于图纸名称以及数据的存储方式。您要做的是循环浏览工作表,然后循环浏览工作表中的特定范围,以确定它是否是正确的数据。你能给我一个你的工作表布局和namingHi@Jean PierreOosthuizen的例子吗?我已经修改了我的问题。这是可能的,还是我必须考虑另一种方法?可能的,我只是现在没有时间开发一些东西。但是试着在第1行中循环,在你的仪表板中寻找值。我已经粘贴了答案。它将只插入定价表中数据的初始承担成本部分。我不确定您每月的存储成本是多少。Shi@Jean-Pierre Oosthuizen,谢谢您,对您的回复太晚表示歉意。这似乎超出了我的知识范围,我遗漏了一些东西。我已经添加了活动的X按钮,并相应地命名了它,但是什么都没有发生。有什么想法吗?请确认没有选择设计模式。如果选择设计模式,则按钮将像图片一样响应。如果您单点按钮,则添加一个新按钮,然后双击它以打开VBA屏幕,然后将我答案的代码部分粘贴到该子部分。再次激活代码时,您需要退出设计模式