我有一个表单,它是通过使用Web查询连接到SharePoint站点的单独电子表格填充数据。已筛选的列表仅在列表框中显示1行
我的脚本过滤数据并将结果返回给列表框。
一切似乎工作正常,但是当我过滤两个领域,它只会返回一个单一的结果,而不是数据列表。我已经完成了代码并正确过滤,只是没有显示结果。
最令人困惑的是我有完全相同的代码,只有一个过滤器在正确返回数据的不同页面上。
工作代码为:
Private Sub UpdateActiveButton_Click()
Dim rngVis As Range
Dim Lob As String
Lob = LOBComboBox.Value
Application.ScreenUpdating = False
With Workbooks.Open("Data ssheet")
With Sheets("Data")
ActiveSheet.Unprotect
Range("Table_owssvr").ListObject.QueryTable.Refresh BackgroundQuery:=False
.AutoFilterMode = False
If Lob = "ALL CS" Then
With Intersect(.UsedRange, .Range("A:CM"))
.Sort Intersect(.Cells, .Parent.Columns("J")), xlAscending, Intersect (.Cells, .Parent.Columns("A")), , xlAscending, Header:=xlGuess
.AutoFilter Field:=10, Criteria1:=Array(_
"CS", "CS2", "CS3"), Operator:=xlFilterValues
On Error Resume Next
Set rngVis = .Offset(1).Resize(.Rows.Count).SpecialCells(xlCellTypeVisible)
On Error GoTo 0
If Not rngVis Is Nothing Then Me.ActiveListBox.List = rngVis.Value
ActiveListBox.ColumnWidths = "33;40;0;0;0;80;50;60;0;130"
End With
Else
If Lob = "ALL MH&S" Then
With Intersect(.UsedRange, .Range("A:CM"))
.Sort Intersect(.Cells, .Parent.Columns("J")), xlAscending, Intersect (.Cells, .Parent.Columns("A")), , xlAscending, Header:=xlGuess
.AutoFilter Field:=10, Criteria1:=Array(_
"MHS", "MHS2"), Operator:=xlFilterValues
On Error Resume Next
Set rngVis = .Offset(1).Resize(.Rows.Count).SpecialCells(xlCellTypeVisible)
On Error GoTo 0
If Not rngVis Is Nothing Then Me.ActiveListBox.List = rngVis.Value
ActiveListBox.ColumnWidths = "33;40;0;0;0;80;50;60;0;130"
End With
End If
End With
.Close False
End With
Application.ScreenUpdating = True
End Sub
这将返回完整列表在我的列表框“ActiveListBox”,但下面的代码将只返回的第一个结果:
Private Sub CommandButton10_Click()
Dim rngVis2 As Range
Dim Lob2 As String
Lob2 = LOB2ComboBox.Value
Application.ScreenUpdating = False
With Workbooks.Open("data ssheet")
With Sheets("Data")
ActiveSheet.Unprotect
Range("Table_owssvr").ListObject.QueryTable.Refresh BackgroundQuery:=False
.AutoFilterMode = False
If Lob2 = "ALL CS" Then
With Intersect(.UsedRange, .Range("Table_owssvr"))
.Sort Intersect(.Cells, .Parent.Columns("J")), xlAscending, Intersect(.Cells, .Parent.Columns("A")), , xlAscending, Header:=xlGuess
.AutoFilter Field:=10, Criteria1:=Array(_
"CS", "CS2", "CS3"), Operator:=xlFilterValues
.AutoFilter Field:=2, Criteria1:="Stage 4", Operator:=xlFilterValues
On Error Resume Next
Set rngVis2 = .Offset(1).Resize(.Rows.Count).SpecialCells(xlCellTypeVisible)
On Error GoTo 0
If Not rngVis2 Is Nothing Then Me.ActiveListBox2.List = rngVis2.Value
ActiveListBox2.ColumnWidths = "33;40;0;0;0;80;50;60;0;130"
End With
Else
If Lob2 = "ALL MH&S" Then
With Intersect(.UsedRange, .Range("A:CM"))
.Sort Intersect(.Cells, .Parent.Columns("J")), xlAscending, Intersect(.Cells, .Parent.Columns("A")), , xlAscending, Header:=xlGuess
.AutoFilter Field:=10, Criteria1:=Array(_
"MHS", "MHS2"), Operator:=xlFilterValues
.AutoFilter Field:=2, Criteria1:="Stage 4", Operator:=xlFilterValues
On Error Resume Next
Set rngVis2 = .Offset(1).Resize(.Rows.Count).SpecialCells(xlCellTypeVisible)
On Error GoTo 0
If Not rngVis2 Is Nothing Then Me.ActiveListBox2.List = rngVis2.Value
ActiveListBox2.ColumnWidths = "33;40;0;0;0;80;50;60;0;130"
End With
End If
End With
.Close False
End With
Application.ScreenUpdating = True
End Sub
可以在列表框接受的细胞的非连续范围?我不确定,但如果答案是“否”,我不会感到惊讶,因此可以解释问题。 –