Страницы: 1
RSS
Последняя использованная строка листа (xlCellTypeLastCell), Ошибка при получении последней ячейки с данными через SpecialCells
 
Перед передачей данных из прайс-листа в программу прайс-агрегатор, мне нужно их обработать по своей схеме скриптом vbs. Чтобы определить регион с занятыми данными мне нужно получить абсолютный максимальный номер строки региона, для этого использую процедуру SpecialCells(xlCellTypeLastCell), но так как лист защищен - Эксель выдает ошибку:


Пример скрипта vbs c ошибкой на строке oLastCell = oSheet.Cells.SpecialCells(xlCellTypeLastCell):
Код
sPrice = "C:\WORK\price.xls"
Set oExcelApp = CreateObject("Excel.Application")
oExcelApp.Visible = False
oExcelApp.DisplayAlerts = False
oExcelApp.EnableEvents = False
oExcelApp.AskToUpdateLinks = False

Set oWorkbook = oExcelApp.Workbooks.Open(sPrice)
Set oSheet = oWorkbook.Sheets(1)

oLastCell = oSheet.Cells.SpecialCells(xlCellTypeLastCell)
iRowsCount = oLastCell.Row


Вопрос: как по другому получить максимальный абсолютный номер строки? Архив с примером выходит больше 100 Кб (изменить файл примера не могу, защищен), если админы удалят - вот ссылка на скачивание _http://rghost.ru/7H4P4wHCM
 
Способ 3 или Способ 4
Согласие есть продукт при полном непротивлении сторон
 
Цитата
Sanja написал:
Способ 3 или Способ 4
Не подходят.
Способ 3:
Код
lLastRow = oSheet.UsedRange.Row + oSheet.UsedRange.Rows.Count - 1
MsgBox(lLastRow)
показывает значение 65536
Способ 4:
Код
const xlValues                      =-4163 
const xlWhole                       =&H1
const xlPrevious                    =&H2
'    Dim rF As Range
'    Dim lLastRow As Long, lLastRow As Long
    'ищем последнюю ячейку на листе, в которой хранится хоть какое-то значение
    Set rF = oSheet.UsedRange.Find("*", , xlValues, xlWhole, xlPrevious)
    If Not rF Is Nothing Then
        lLastRow = 1 'последняя заполненная строка
        lLastCol = 1 'последний заполненный столбец
        MsgBox rF.Address 'показываем сообщение с адресом последней ячейки
    Else
        'если ничего не нашлось - значит лист пустой
        'и можно назначить в качестве последних первую строку и столбец
        lLastRow = 1
        lLastCol = 1
    End If
MsgBox(lLastRow)
показывает адрес $C$2. Может я использовал неправильные константы, но вроде взял их на авторитетном ресурсе.

Какие будут еще варианты?

PS
Там кстати там ошибка в примере, так как при условии If Not rF Is Nothing Then присваиваются значения lLastRow = 1 и lLastCol = 1
Страницы: 1
Читают тему
Наверх