Desculpe, mas o código tem muitos problemas. Parece que você estava confuso sobre se o código deveria ser sobre linhas ou colunas, quais partes deveriam ser numéricas versus nomeadas por letra e como trabalhar com objetos UNO. Você já tentou uma ferramenta de introspecção, como Xray ?
Aqui está uma função que funciona:
Function LastColumnIndex (InformedRow As Long, Optional InformedSheet) As Long
'this function returns the index of the last column with data in a row
'it returns -1 if the whole row is empty
Dim oSheet As Object
Dim oColumn As Object, oFinder As Object, oResult as object
Dim PartsOfTheName
Dim LastColumnName As String
'------- Sheet -------
If IsMissing(InformedSheet) then
oSheet = ThisComponent.CurrentController.ActiveSheet
ElseIf IsNumeric(InformedSheet) then
oSheet = ThisComponent.Sheets(InformedSheet)
Else
oSheet = ThisComponent.Sheets.GetByName(InformedSheet)
End If
'------- Search -------
oRow = oSheet.Rows(InformedRow)
oFinder = oRow.createSearchDescriptor
oFinder.searchRegularExpression = true
oFinder.SearchString = "."
oResult = oRow.FindAll(oFinder)
'------- Column Index -------
LastColumnIndex = -1
If Not IsNull(oResult) then
ResultName$ = oResult.AbsoluteName
PartsOfTheName = Split(ResultName,"$")
LastColumnName = PartsOfTheName(UBound(PartsOfTheName) - 1)
oColumns = oSheet.getColumns()
If oColumns.hasByName(LastColumnName) Then
oColumn = oColumns.getByName(LastColumnName)
LastColumnIndex = oColumn.getRangeAddress().StartColumn
End If
End If
End Function
Eu testei com essa rotina:
Sub LastColumnIndexExample
MsgBox LastColumnIndex(3, 0) 'row 4 of the first sheet
End Sub