Гость
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / XlDirection.xlUp / 7 сообщений из 7, страница 1 из 1
13.03.2014, 17:32
    #38585507
tasha klemer
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
XlDirection.xlUp
для опеределения последней яцейки использую
Код: vbnet
1.
LastRow_ = ExWS_.Cells(ExWS_.Rows.Count, "H").End(XlDirection.xlUp).Row



по факту на листе последней является 11 ячейка, но мне выдает только 8... как корректно и 100 % определить номер строки последней пустой ячейки
...
Рейтинг: 0 / 0
13.03.2014, 17:54
    #38585543
Казанский
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
XlDirection.xlUp
Так Вы определяете строку последней занятой ячейки в ст. Н.
У листа есть "использованный диапазон":
Код: vbnet
1.
2.
3.
with ExWS_.usedrange
  LastRow_ = .row-1+.rows.count
end with

.row-1 это на случай, если использованный диапазон не начинается с 1 строки.
...
Рейтинг: 0 / 0
14.03.2014, 09:21
    #38585879
tasha klemer
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
XlDirection.xlUp
последняя занятая ячейка в моем прмере и находится в столбце "Н" в 11 строке, но
Код: vbnet
1.
LastRow_ = ExWS_.Cells(ExWS_.Rows.Count, "H").End(XlDirection.xlUp).Row


выдает только 8.
...
Рейтинг: 0 / 0
14.03.2014, 09:42
    #38585899
tasha klemer
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
XlDirection.xlUp
Казанский,

воспользовалась вашим кодом, опять же выдает 8 строку-как последнюю заполненую...
Хотелось бы поподрбдней разобраться в этом.... чтоб код отрабатывал корректно, что должно соблюдаться из условий для этого.... может быть диапазон должен быть выделен какой то, или лист проверяемый должен быть активный....
Обратила внимание на то , что при первом обращении к листу, код отрабаывает корректно, но в процессе выполнения программы бывает необходимость вернуться на тот или другой лист, и вот в этот момент уже происходит, что последняя заполненая ячейка определяется не корректно...
...
Рейтинг: 0 / 0
14.03.2014, 10:12
    #38585932
Казанский
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
XlDirection.xlUp
Либо ExWS_ ссылается на какой-то другой лист, либо ваша программа работает асинхронно с Excel, т.е. не дожидается окончания выполнения одной команды и идет дальше. Например, дает команду заполнить ячейку Н11, потом определяет номер посл. строки, а ячейка Н11 в этот момент еще не заполнена. Посмотрите параметры подключения к внешнему объекту в вашей программной среде - может быть, там можно указать что-то типа "дождаться выполнения команды", или есть какой-нибудь флаг типа готов/не готов.
...
Рейтинг: 0 / 0
14.03.2014, 10:41
    #38585965
tasha klemer
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
XlDirection.xlUp
КазанскийЛибо ExWS_ ссылается на какой-то другой лист, либо ваша программа работает асинхронно с Excel, т.е. не дожидается окончания выполнения одной команды и идет дальше. Например, дает команду заполнить ячейку Н11, потом определяет номер посл. строки, а ячейка Н11 в этот момент еще не заполнена. Посмотрите параметры подключения к внешнему объекту в вашей программной среде - может быть, там можно указать что-то типа "дождаться выполнения команды", или есть какой-нибудь флаг типа готов/не готов.

Да , ExWS поменяла на то что нужно

в файл ни чего не записываю, только читаю из файла

вот процедура

Private Sub ComboBox1_SelectedValueChanged(sender As System.Object, e As System.EventArgs) Handles ComboBox1.SelectedValueChanged
'MsgBox("aa!")
Dim i As Integer
Dim j As Integer
Dogovor_ = 0
Dim t As Integer
For i = 1 To ExWB.Sheets.Count ' переход по листам книги
ExWS = ExWB.Sheets(i)
Dim LastRow_, lastColl_ As Long
xlLastCell = ExWS.Cells.SpecialCells(11)
lastCol_ = xlLastCell.Column
LastRow_ = xlLastCell.Row ' на листе 2 определят 65000 а там всего 8, а на листе "Суксун" последней является- 8 строка

With ExWS.UsedRange
LastRow_ = .Row - 1 + .Rows.Count ' на листе 2 определят 65000 а там всего 8, а на листе "Суксун" последней является- 8 строка

End With

lr = LastRow_
' вот в этот блок не заходит , когда я выбираю №договора 2008-35-0002/1, потому что он находится на 9 строке, а мне
'определяет как- 8 строк
For j = 6 To lr
If ExWS_.Cells(j, 2).Value() <> "" Then
Dogovor_ = Dogovor_ + 1
End If

' опреация вычисления

Next j
Next i
End Sub
...
Рейтинг: 0 / 0
14.03.2014, 11:07
    #38586000
tasha klemer
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
XlDirection.xlUp
протестировала несколько способов
на примере приложеного файла, лист "Суксун". последней заполненой ячейкой является 11

способ 1:
Код: vbnet
1.
2.
3.
 xlLastCell = ExWS.Cells.SpecialCells(11)
            lastCol_ = xlLastCell.Column
            LastRow_ = xlLastCell.Row



LastRow_=254
lastCol_=44 визуально все пусто.
способ 2:
Код: vbnet
1.
2.
3.
 With ExWS.UsedRange
                LastRow_ = .Row - 1 + .Rows.Count
            End With


LastRow_=254

способ 3:
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
Const iMaxRow = 65536 ' 97, 2000 

            With ExWS.Cells(iMaxRow, 8)
                If ExWS.Cells(iMaxRow, 8).value = Nothing Then
                    LastRow_ = .End(XlDirection.xlUp).Row
                Else
                    LastRow_ = iMaxRow
                End If
            End With  



LastRow_=11

способ 4 :

Код: vbnet
1.
  LastRow_ = ExWS.Cells(ExWS.Rows.Count, "H").End(XlDirection.xlUp).Row



LastRow_=11

в целом все способы определяют верно, но есть моменты когда ответы сп1, сп2 отличаются от других 2...причину еще не выяснила. скорее всего где то в других колонках( сп.3 и 4 - по конкретной колонке проверка идет) есть значения, но я визуально не увидела ни какого заполнения.
...
Рейтинг: 0 / 0
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / XlDirection.xlUp / 7 сообщений из 7, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]