Since I don't know what your worksheet looks like, assume that the sort will ALWAYS include columns A - H, with rows determined by G. Then
Sub BVJ()
Dim GTop As Long, _
GLast As Long, _
MySortRange As String
GTop = Range("G1").End(xlDown).Row
Glast = Cells(GTop, "G").End(xlDown).Row
MySortRange = "A" & GTop & ":H" & GLast
ActiveWorkbook.Worksheets(ActiveSheet.Name).Sort.SortFields.Clear
ActiveWorkbook.Worksheets(ActiveSheet.Name).Sort.SortFields.Add Key:=Selection.Columns(7), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:= _
xlSortNormal
ActiveWorkbook.Worksheets(ActiveSheet.Name).Sort.SortFields.Add Key:=Selection.Columns(4), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:= _
xlSortNormal
ActiveWorkbook.Worksheets(ActiveSheet.Name).Sort.SortFields.Add Key:=Selection.Columns(3), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:= _
xlSortNormal
With ActiveWorkbook.Worksheets(ActiveSheet.Name).Sort
.SetRange Range(MySortRange)
.Header = xlGuess
.MatchCase = False
.Orientation = xlTopToBottom
.SortMethod = xlPinYin
.Apply
End With
Selection.Rows.AutoFit
End Sub
Bookmarks