Attribute VB_Name = "filtering"
Option Private Module
Option Explicit
Sub clearFilters()
On Error Resume Next
Dim i As Long
Application.ScreenUpdating = False
Call unprotectSheets
Call setDatasourceVariables
If dataSource = "GA" Then
Range("predeffilternum").value = 1
With filterUF.segmentLB
For i = 0 To .ListCount - 1
.Selected(i) = False
Next i
End With
Range("lastSegmentSelections").value = vbNullString
Range("segmentSelectionCodes").value = vbNullString
Range("segmentSelectionNames").value = vbNullString
End If
configsheet.Shapes("clearFiltersButton").Visible = False
Range("filterstring" & varsuffix).value = vbNullString
Range("filterRange" & varsuffix).Resize(6, 4).ClearContents
filterStr = vbNullString
configsheet.Shapes("filterNote" & varsuffix).TextFrame.Characters.Text = "No filters have been set up"
Call protectSheets
End Sub
Sub launchFilterUF()
On Error Resume Next
If debugMode Then On Error GoTo 0
Dim tempStr As String
Application.ScreenUpdating = False
Call unprotectSheets
Call setDatasourceVariables
Load filterUF
Call constructListOfFilterFields
With Sheets("vars").Range("filterRange" & varsuffix)
For filternum = 1 To 5
If .Offset(filternum - 1).value <> vbNullString Then
filterUF.Controls("fieldDD" & filternum).Text = .Offset(filternum - 1).value
filterUF.Controls("operatorDD" & filternum).Text = .Offset(filternum - 1, 1).value
tempStr = .Offset(filternum - 1, 2).value
' tempStr = Replace(tempStr, "\\", "\")
tempStr = Replace(tempStr, "\,", ",")
tempStr = Replace(tempStr, "\;", ";")
filterUF.Controls("value" & filternum).Text = .Offset(filternum - 1, 2).value
Call makeFilterVisible2
If .Offset(filternum - 1, 3).value <> "" Then
filterUF.Controls("and" & filternum).Visible = True
filterUF.Controls("or" & filternum).Visible = True
If .Offset(filternum - 1, 3).value = "AND" Then
filterUF.Controls("and" & filternum).value = True
Else
filterUF.Controls("or" & filternum).value = True
End If
End If
End If
Next filternum
End With
If dataSource = "GA" Then
Dim lastSegmentSelections As String
Dim tempArr As Variant
Dim i As Long
filterUF.mpage.segmentPage.Visible = True
With filterUF.segmentLB
For i = 0 To .ListCount - 1
.Selected(i) = False
Debug.Print "SEL: " & i & " " & .Selected(i)
Next i
Debug.Print "SEL: " & lastSegmentSelections
lastSegmentSelections = Range("lastSegmentSelections").value
If lastSegmentSelections <> vbNullString Then
tempArr = Split(lastSegmentSelections, ",")
For i = 0 To UBound(tempArr)
.Selected(tempArr(i)) = True
Debug.Print "SEL: " & tempArr(i) & " " & lastSegmentSelections
Next i
End If
End With
Else
filterUF.mpage.segmentPage.Visible = False
filterUF.mpage.value = 0
End If
If dataSource = "GA" Then Application.Wait (Now + TimeValue("00:00:01")) 'prevents Excel from registering accidental 2nd click that selects segment
filterUF.Show
End
Call protectSheets
End Sub
Sub makeFilterVisible2()
With filterUF
.Controls("operatorDD" & filternum).Visible = True
.Controls("fieldDD" & filternum).Visible = True
.Controls("value" & filternum).Visible = True
If filternum < 5 Then
If .Controls("fieldDD" & filternum + 1).Visible = False Then
.Controls("addFilter" & filternum + 1).Visible = True
Else
.Controls("and" & filternum).Visible = True
.Controls("or" & filternum).Visible = True
End If
End If
If filternum > 1 Then .Controls("addFilter" & filternum).Visible = False
.Controls("clearB" & filternum).Visible = True
End With
End Sub
Sub constructListOfFilterFields()
On Error Resume Next
Application.ScreenUpdating = False
Dim rivi As Long
Dim vrivi As Long
Dim resultStr As String
Dim filternum As Long
Dim i As Integer
Dim varArr() As Variant
Dim col As Long
Call setDatasourceVariables
ReDim filterUFArr(1 To 1000, 1 To 4)
'1 filter name disp
'2 filter code
'3 dim / met
For i = 1 To 5
filterUF.Controls("fieldDD" & i).Clear
Next i
filternum = 0
' If dataSource <> "YT" Then
col = Range("dimensionsAllStart" & varsuffix).Column
vrivi = vikarivi(Range("dimensionsAllStart" & varsuffix))
With varsSheetForDataSource
varArr = .Range(.Range("dimensionsAllStart" & varsuffix).Offset(2, -1), .Cells(vrivi, col + 2)).value
End With
' Else
' Range("metricsCalcYT").Calculate
' col = Range("filterFieldsStartYT").Column
' vrivi = vikarivi(Range("filterFieldsStartYT"))
' With varsSheetForDataSource
' varArr = .Range(.Range("filterFieldsStartYT"), .Cells(vrivi, col + 2)).value
' End With
'
' End If
For rivi = 1 To UBound(varArr)
filternum = filternum + 1
For i = 1 To 5
filterUF.Controls("fieldDD" & i).AddItem (varArr(rivi, 1))
Next i
filterUFArr(filternum, 1) = varArr(rivi, 1)
filterUFArr(filternum, 2) = varArr(rivi, 2)
filterUFArr(filternum, 3) = "dim"
Next rivi
' If dataSource = "YT" Then Exit Sub
col = Range("metricsAllStart" & varsuffix).Column
vrivi = vikarivi(Range("metricsAllStart" & varsuffix))
With varsSheetForDataSource
varArr = .Range(.Range("metricsAllStart" & varsuffix).Offset(2, -1), .Cells(vrivi, col + 8)).value
End With
For i = 1 To 5
filterUF.Controls("fieldDD" & i).AddItem ("")
Next i
For rivi = 1 To UBound(varArr)
If (varArr(rivi, 4) = 1 Or varArr(rivi, 4) = "") And (dataSource <> "GA" Or varArr(rivi, 9) = "") Then
filternum = filternum + 1
For i = 1 To 5
filterUF.Controls("fieldDD" & i).AddItem (varArr(rivi, 1))
Next i
filterUFArr(filternum, 1) = varArr(rivi, 1)
filterUFArr(filternum, 2) = varArr(rivi, 2)
filterUFArr(filternum, 3) = "met"
End If
Next rivi
' segmentLB.List = Range("segments").value
If dataSource = "GA" Then
varArr = Range("segments").value
With filterUF.Controls("segmentLB")
.Clear
For rivi = 1 To UBound(varArr)
.AddItem (varArr(rivi, 1))
Next rivi
End With
End If
End Sub