Nlhicks
Active Member
- Joined
- Jan 8, 2021
- Messages
- 264
- Office Version
- 365
- Platform
- Windows
I need to run the code, autofilter the data and if no data is there, run the reverse code which will reverse the values in D5 and D6. The Reverse code then Calls Find RIght Row. But when it runs through Find Right Row the second time, if the autofilters return no data again then I want to go to end_here and tell the user that there were no lines found matching the input conditions. please check the names and try again, Thanks. Any help on getting this would be great thanks.
VBA Code:
Sub FindRightRow1
Start:
With wsFacility
If wsLinesMaster.Range("D5").Value <> "" Then
.Range("A1").CurrentRegion.AutoFilter field:=10, Criteria1:="*" & wsLinesMaster.Range("D5") & "*"
End If
If wsLinesMaster.Range("D6").Value <> "" Then
.Range("A1").CurrentRegion.AutoFilter field:=11, Criteria1:="*" & wsLinesMaster.Range("D6") & "*"
End If
If wsLinesMaster.Range("D7").Value <> "" Then
.Range("A1").CurrentRegion.AutoFilter field:=37, Criteria1:="" & wsLinesMaster.Range("D7") & ""
End If
On Error Resume Next
Set myRange = wsFacility.Range("A2:Z700").SpecialCells(xlVisible)
On Error GoTo 0
If myRange Is Nothing Then
MsgBox "No Lines found, Reversing order and trying agian."
Call Reverse
Rowz = Application.WorksheetFunction.Subtotal(3, .Range("A2:A" & .Cells(.Rows.Count, "A").End(xlUp).Row))
Debug.Print Rowz
If Rowz <= 1 Then
wsLinesMaster.Range("C11").Value = .Range("B2:B695").SpecialCells(xlCellTypeVisible)
wsLinesMaster.Range("C12").Value = .Range("C2:C695").SpecialCells(xlCellTypeVisible)
wsLinesMaster.Range("C13").Value = .Range("D2:D695").SpecialCells(xlCellTypeVisible)
wsLinesMaster.Range("C14").Value = .Range("E2:E695").SpecialCells(xlCellTypeVisible)
wsLinesMaster.Range("C15").Value = .Range("F2:F695").SpecialCells(xlCellTypeVisible)
wsLinesMaster.Range("C16").Value = .Range("G2:G695").SpecialCells(xlCellTypeVisible)
wsLinesMaster.Range("C17").Value = .Range("H2:H695").SpecialCells(xlCellTypeVisible)
wsLinesMaster.Range("C18").Value = .Range("I2:I695").SpecialCells(xlCellTypeVisible)
If IsEmpty(Range("C11")) Then
GoTo IsEmpty
End If
ElseIf Rowz > 1 Then
GoSub Item_Open
.Range("A1").CurrentRegion.AutoFilter field:=36, Criteria1:=wsLinesMaster.Range("H6")
wsLinesMaster.Range("C11").Value = .Range("B2:B695").SpecialCells(xlCellTypeVisible)
wsLinesMaster.Range("C12").Value = .Range("C2:C695").SpecialCells(xlCellTypeVisible)
wsLinesMaster.Range("C13").Value = .Range("D2:D695").SpecialCells(xlCellTypeVisible)
wsLinesMaster.Range("C14").Value = .Range("E2:E695").SpecialCells(xlCellTypeVisible)
wsLinesMaster.Range("C15").Value = .Range("F2:F695").SpecialCells(xlCellTypeVisible)
wsLinesMaster.Range("C16").Value = .Range("G2:G695").SpecialCells(xlCellTypeVisible)
wsLinesMaster.Range("C17").Value = .Range("H2:H695").SpecialCells(xlCellTypeVisible)
wsLinesMaster.Range("C18").Value = .Range("I2:I695").SpecialCells(xlCellTypeVisible)
End If
'
' ''''''''''''''''''''Error Checking: if you put the substations in the wrong cell, this will reverse them''''''''''''''''''''''''
IsEmpty:
MsgBox "The substations you entered are not in the Facilty Rating Spreadsheet, Please check your values and try again. Thanks"
GoTo end_here
' '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
end_here:
Set wsLinesMaster = Nothing
Set wsFacility = Nothing
Set wbUpdate = Nothing
Set wbMaster = Nothing
Application.ScreenUpdating = True
Exit Sub
Item_Open:
sValue = Application.InputBox("Enter the TO: Bus Number here, Thank you.")
wsLinesMaster.Range("H6").Value = sValue
Debug.Print sValue
Return
End Sub
Sub Reverse()
Dim cellfirst As String, cellsecond As String
If Not Selection.Cells.Count = 2 Then
MsgBox ("Please only select two cells")
Else
If Selection.Areas.Count > 1 Then
cellfirst = Selection(1).Value
cellsecond = Selection.Areas(2).Value
Selection(1).Value = cellsecond
Selection.Areas(2).Value = cellfirst
Else
cellfirst = Selection(1).Value
cellsecond = Selection(2).Value
Selection(1).Value = cellsecond
Selection(2).Value = cellfirst
Call FindRightRow1
End If
End If
Call FindRightRow1
End Sub