С Excel, пытаясь найти подлинный используемый диапазон от внешнего HTA
Я использовал эту команду:
LastRow = ActiveSheet.UsedRange.Rows.Count
Но свойство UsedRange часто может быть неточным. Поэтому я ищу альтернативу. Я нашел отличный совет, объясняющий этот метод:
LastRow = Cells.Find("*", SearchOrder:=xlByRows, SearchDirection:=xlPrevious).Row
Это работает удовольствие в Excel. Тем не менее, я запускаю код из HTA, поэтому мне нужно преобразовать эту строку, и я изо всех сил. Это мой вопрос - пожалуйста, кто-нибудь может предложить руководство о том, как преобразовать этот простой код в HTA-совместимый?
Из интереса, чтобы попытаться обойти эту проблему, я попытался написать рутину так, как я понимаю. Результатработает, но очень медленно. Вот это для хихиканья:
Set objExcel = GetObject(,"Excel.Application")
wb = "test.xlsx"
objExcel.Workbooks(wb).Activate
wbactiveSheet = objExcel.Workbooks(wb).ActiveSheet.Name
'determine rows and columns in range of first xls
theNumRow = objExcel.Workbooks(wb).Sheets(wbactiveSheet).UsedRange.Rows.Count
theNumCol = objExcel.Workbooks(wb).Sheets(wbactiveSheet).UsedRange.Columns.Count
'determine genuine used rows:
x = 1 'start at first row
blankRows = 0
Do 'each row
y = 1 'start at first column
blankCells = 0
Do 'each column
If objExcel.Workbooks(wb).Sheets(wbactiveSheet).Cells(x, y).Value <> "" Then
theNumRowActual = x
'found non-blank, skip to next row
Exit Do 'the columns loop
Else
blankCells = blankCells + 1
End If
y = y + 1
Loop Until (y - 1) = theNumCol
If blankCells = theNumCol Then 'blank row
blankRows = blankRows + 1
If blankRows = 50 Then
Exit Do
End If
Else
blankRows = 0
End If
x = x + 1
Loop Until x = theNumRow 'i.e. until the testing area matches the usedRange property
'determine genuine used columns:
y = 1 'start at first column
blankCols = 0
Do 'each column
x = 1 'start at first row
blankCells = 0
Do 'each row
If objExcel.Workbooks(wb).Sheets(wbactiveSheet).Cells(x, y).Value <> "" Then
theNumColActual = y
'found non-blank, skip to next column
Exit Do 'the rows loop
Else
blankCells = blankCells + 1
End If
x = x + 1
Loop Until (x - 1) = theNumRowActual
If blankCells = theNumRowActual Then 'blank column
blankCols = blankCols + 1
If blankCols = 50 Then
Exit Do
End If
Else
blankCols = 0
End If
y = y + 1
Loop Until (y - 1) = theNumCol 'i.e. until the testing area matches the usedRange property
'bug
MsgBox "USEDRANGEMETHOD:" &vbNewLine & "rows: " & theNumRow & vbNewLine & "columns: " & theNumCol & vbNewLine & vbNewLine & "NEWMETHOD:" & vbNewLine & "rows: " & theNumRowActual & vbNewLine & "columns: " & theNumColActual
Спасибо