In the first place, the argument to NEWVLOOKUP1 should be a String, not a Worksheet, since you want to pass the
name of the worksheet to the function.
In the second place, you must consistently refer to the worksheet you want to look at.
Range("A1") will always be on the activesheet.
sht.Range("A1") will be on the sheet you want to look at.
In the third place, there is no need to use VLOOKUP. Once you have found the cell with "TOTAL", you only need to look at the cell 3 columns to the right.
This should work:
Function FINDROWNUM(sht As Worksheet) As Long
Dim Rw As Long
Rw = sht.Cells.Find(What:="Total", After:=sht.Range("A1"), _
LookIn:=xlFormulas, Lookat:=xlPart, Searchorder:=xlByRows, _
Searchdirection:=xlPrevious, MatchCase:=False).Row
FINDROWNUM = Rw
End Function
Function FINDCOLUMN(sht As Worksheet)
Dim col As Long
col = sht.Cells.Find(What:="Total", After:=sht.Range("A1"), _
LookIn:=xlFormulas, Lookat:=xlPart, Searchorder:=xlByColumns, _
Searchdirection:=xlPrevious, MatchCase:=False).Column
FINDCOLUMN = col
End Function
Function NEWVLOOKUP1(SheetName As String) As Long
Dim sht As Worksheet
Dim RowNum As Long
Dim ColNum As Long
Set sht = Worksheets(SheetName)
RowNum = FINDROWNUM(sht)
ColNum = FINDCOLUMN(sht)
NEWVLOOKUP1 = sht.Cells(RowNum, ColNum + 3).Value
End Function
Shorter and more efficient:
Function NEWVLOOKUP1(SheetName As String) As Long
Dim sht As Worksheet
Dim rng As Range
Set sht = Worksheets(SheetName)
Set rng = sht.Cells.Find(What:="Total", After:=sht.Range("A1"), _
LookIn:=xlFormulas, Lookat:=xlPart, Searchorder:=xlByRows, _
Searchdirection:=xlPrevious, MatchCase:=False)
NEWVLOOKUP1 = rng.Offset(0, 3).Value
End Function
Use like this:
=NEWVLOOKUP1("BBSR")