searchExcel工作簿并使用VBA在另一个工作表或报表中列出结果

我试图build立一个searchfunction来search当前的工作簿。 这个想法是让它几乎像一个查询,所以当我search任何东西,它会在search结果页面上列出结果或创build一个search结果的报告。 我不知道有关VBA的一件该死的事情。 到目前为止,我只有一个代码,允许我在与数据相同的页面上执行此操作。 奇怪的是,它可以从另一个选项卡拉search词,但我不能找出一个好的scheme来search所有页面,并在我的search选项卡中列出结果。

Sub finddata() Dim studentname As String Dim finalrow As Integer Dim i As Integer Dim sh As Worksheet Sheets("Search").Range("H1:Z15").ClearContents studentname = Sheets("Home").TextBox1.Text finalrow = Sheets("Search").Range("A10000").End(xlUp).Row For i = 1 To finalrow If Cells(i, 1) = studentname Then Sheets("Search").Range(Cells(i, 1), Cells(i, 6)).Copy Sheets("Search").Range("H20").End(xlUp).Offset(1, 0).PasteSpecial xlPasteFormulasAndNumberFormats End If Next i End Sub 

虽然最好的searchscheme很大程度上取决于数据的结构以及可能随时间而改变的方式,但以下内容应适用于您所描述的内容。

 Sub findata() Dim studentname As String Dim finalrow As Integer Dim i As Integer, n As Integer Dim sh As Worksheet, Srch As Worksheet, hm As Worksheet Dim wkbk As Workbook Set wkbk = ThisWorkbook Set Srch = wkbk.Sheets("Search") Set hm = wkbk.Sheets("Home") Srch.Range("H1:Z15").ClearContents studentname = hm.Cells(2, 3).Value For n = 3 To wkbk.Sheets.Count Set sh = wkbk.Sheets(n) finalrow = sh.Range("A10000").End(xlUp).Row For i = 1 To finalrow If sh.Cells(i, 1) = studentname Then With sh .Range(.Cells(i, 1), .Cells(i, 6)).Copy End With Srch.Range("H20").End(xlUp).Offset(1, 0).PasteSpecial xlPasteFormulasAndNumberFormats End If Next i Next n 

有几件事要注意:

1)我假设您的数据存储在“search”和“主页”以外的页面上。 上面的代码假设他们将是工作表1和2,并且所有后面的工作表将被search。

2)我不知道直接获取文本框的值的方法,虽然可能有一种方法。 我发现最好的方法是将“LinkedCell”属性设置为隐藏在用户视图中的特定单元格。 在上面的代码中,该单元格将是C2 [或hm.Cells(2,3)]。

3)您之前已经指定了“xLPasteFormulasAndNumberFormats”。 确保你真的想要这个。 如果你的公式是关系型的,他们将不会被复制到你的结果列表中。

祝你好运! 如果有帮助,请将其标记为答案并进行表决。 我也是从这里开始的

,麦克·沙纳汉