我有一个脚本,该脚本具有一个隐藏的工作表,该工作表具有较大的数据集(sheet2)。在工作表1中,我在A列中有工作代码,在B列中有其相应的工作标题。用户按下一个按钮,然后从A列中输入工作代码。脚本然后在隐藏的工作表中查找,并从两个工作表中吐出一个选择数据其他列(代码和标题除外),并将其放置在易于阅读的格式中。
代码:
Sub tgr()
Dim rFound As Range
Dim lJobCode As String
Dim lLob As String
Dim sFirst As String
Dim sResults As String
Dim sh1 As Worksheet, sh2 As Worksheet
Dim rw As Long
lJobCode = Application.InputBox("Please provide a job code", "Job Code", Type:=2)
lLob = Application.InputBox("Please provide a line of business", "BU_Level_02", Type:=2)
If lJobCode = "False" Then Exit Sub 'Pressed cancel
Set sh1 = Sheets("Sheet1")
Set sh2 = Sheets("Sheet2")
rw = 3
With ThisWorkbook.Worksheets("Sheet2").Columns("A")
Set rFound = .Find(lJobCode, .Cells(.Cells.Count), xlValues, xlWhole)
If Not rFound Is Nothing Then
sFirst = rFound.Address
Do
If Cells(rFound.Row, 5).Value = lLob Then
sh1.Cells(rw, 4) = rFound.Offset(, 0).Value
sh1.Cells(rw, 5) = rFound.Offset(, 1).Value
sh1.Cells(rw, 6) = rFound.Offset(, 2).Value
sh1.Cells(rw, 7) = rFound.Offset(, 3).Value
Set rFound = .FindNext(rFound)
rw = rw + 1
End If
Loop While rFound.Address <> sFirst
Else
MsgBox "Job Code [" & lJobCode & "] not found.", , "Error"
End If
End With
End Sub
工作表2具有原始数据,工作表1仅具有工作代码和职位。附加的lLob
变量在工作表1的单元格A6的下拉列表中可用,并且将在运行宏之前进行选择。为什么我的If Cells(rFound.Row, 5).Value = lLob Then
语句无法识别Sheet2中的第五列?
隐藏工作表中的表格:
第A列(职位代码)
B列(职位)
c列(业务单元4级)
d列(5级业务部门)
e列(业务类别1 2或3)
答案 0 :(得分:0)
您可以通过多种方法来执行此操作。第一个可能也是最简单的方法是添加另一个输入框,并要求用户输入您要用作过滤依据的代码。这将要求他们输入您要过滤的确切字符串,并且不一定超级用户友好,因为用户可能未完全输入“ 1”。
我的建议是创建一个UserForm对象,并创建所需的自定义控件,以获取数据调用的确切用户要求。您的大多数代码都可以很容易地迁移到UserForm模块中,或者您可以从UserForm调用此代码并将输入作为参数提供。
任何一种方法都非常简单,除非您之前没有使用过UserForms。如果您还没有,here是一个很好的例子。