[英]Excel-VBA: Get Value of a Visible Cell in a Table after applying Filter?
我试图以一种简单的方式获取表(也称为) ListObject
中的第一个可见单元格。
到目前为止的代码:
Sub StatusFilter()
Set WB = ThisWorkbook
Set iFace = WB.Sheets("Interface")
Set DataS = WB.Sheets("Data")
iCriteria = iFace.Range("Q22").Value
DataS.Activate
ActiveSheet.ListObjects("Data").Range.AutoFilter 14, iCriteria
ActiveSheet.ListObjects("Data").DataBodyRange.Select
With Columns("A")
.Find(what:="*", after:=.Cells(1, 1), LookIn:=xlValues).Activate
End With
DValue = ActiveCell.Value
If DValue = "" Then
MsgBox "Lucky! No Tickets are in this Criteria!!", vbInformation, "Technology Issue Tracker"
Exit Sub
End If
End Sub
使用您的代码,您应该初始化您的变量。
这样的事情应该可以工作(推论 - 这是未经测试的)
Sub StatusFilter()
Dim WB As Workbook: Set WB = ThisWorkbook
Dim iFace As Worksheet: Set iFace = WB.Sheets("Interface")
Dim DataS As Worksheet: Set DataS = WB.Sheets("Data")
Dim iCriteria As String: iCriteria = iFace.Range("Q22")
Dim DValue As String
With DataS.ListObjects("Data").Range
.AutoFilter 14, iCriteria
DValue = Index(.SpecialCells(xlCellTypeVisible), 1).Value
End With
If DValue = "" Then
MsgBox "Lucky! No Tickets are in this Criteria!!", vbInformation, "Technology Issue Tracker"
Exit Sub
End If
End Sub
Function getFirstVisibleCellInTable(tblName As String) As Range
Dim tbl As ListObject
Set tbl = ActiveSheet.ListObjects(tblName)
For i = 1 To tbl.ListRows.Count
If False = tbl.ListRows(i).Range.EntireRow.Hidden Then
Set getFirstVisibleCellInTable = tbl.DataBodyRange(i, 1)
Exit Function
End If
Next i
getFirstVisibleCellInTable = Nothing
End Function
像这样使用它:
getFirstVisibleCellInTable("Data")
仅检索值:
getFirstVisibleCellInTable("Data").Value
仅检索地址:
getFirstVisibleCellInTable("Data").Address
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.