Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

kak ispolzovat EOF

1.9K
30 сентября 2003 года
MisterFix
33 / / 11.09.2003
Pomogite please
kak polzuyutsya komandoy End Of File
EOF BOF
napishiti pojaluysta malenkie primeri
zaranie blagodaren
267
30 сентября 2003 года
Cutty Sark
1.2K / / 17.10.2002
Цитата:
Originally posted by MisterFix
Pomogite please
kak polzuyutsya komandoy End Of File
EOF BOF
napishiti pojaluysta malenkie primeri
zaranie blagodaren



Вот, пожалуйста, открываю хелп для Экселя, и вижу там:

=================
В данном примере функция EOF используется для обнаружения конца файла. Предполагается, что MYFILE является текстовым файлом, который содержит несколько строк текста.

 
Код:
Dim InputData
Open "MYFILE" For Input As #1   ' Открывает файл для чтения.
Do While Not EOF(1) ' Достигнут ли конец файла?
    Line Input #1, InputData    ' Читает строку данных.
    Debug.Print InputData   ' Выводит в окно отладки.
Loop
Close #1    ' Закрывает файл.
1.9K
30 сентября 2003 года
MisterFix
33 / / 11.09.2003
bolshoe spasibo
1.9K
01 октября 2003 года
MisterFix
33 / / 11.09.2003
A kak napisat EOF dlya Excel
ya tak pishu no ne rabotaet


sub test
Dim str as integer
str = 1

With ActiveWorksheet.cells(str.1)
Do While not EOF(1)
str = str + 1
.............
Loop
End With

End Sub
267
01 октября 2003 года
Cutty Sark
1.2K / / 17.10.2002
Цитата:
Originally posted by MisterFix
A kak napisat EOF dlya Excel
ya tak pishu no ne rabotaet


sub test
Dim str as integer
str = 1

With ActiveWorksheet.cells(str.1)
Do While not EOF(1)
str = str + 1
.............
Loop
End With

End Sub



Бог ты мой! EOF - не для Экселевских книг. EOF для прямого доступа к файлам, то есть когда ты берешь какой-нибудь файл на винчестере и открываешь его "как будто" в Блокноте.

Если тебе нужен конец данных на листе Экселя, воспользуйся свойством UsedRange.
Например, ActiveWorksheet.UsedRange.Row + ActiveWorksheet.UsedRange.Rows.Count - 1 возвращает номер последней использованной на активном листе строки. Там есть еще тонкости некоторые мы обсуждали в http://forum.codenet.ru/showthread.php?s=&threadid=11630, но скорее всего тебе хватит того, что я тебе выше написал.

1.9K
02 октября 2003 года
MisterFix
33 / / 11.09.2003
eshe raz spasibo za pomosh
258
02 октября 2003 года
SergeySV
1.5K / / 19.03.2003
to Cutty Sark: Тут кстати столкнулся с такой еще неизвестной МНЕ особенностью на тему определения последней используемой ячейки.

Как известно для этих целей, кроме простого перебора можно использовать такие встроенные свойства: [Worksheet].UsedRange( а потом .Row) или сразу ActiveSheet.Cells.SpecialCells(xlCellTypeLastCell)

Но в них есть один общий недостаток, понятие UsedRange(используемый диапазон) вмещает в себя даже те ячейки, где вы например ковырялись, а потом стерли и если у Вас внизу остались такие "чистые" строчки, то они все равно попадут в используемые. Или например у меня такая постоянная беда: после импортирования в Excel текстового файла приходится избавляться от мусорных строк - удалять их. Закачил 5000 строк, потом 1000 удалили, а если нажать Ctrl+PgDn, то все равно попадешь на последнюю используемую строку - под номером 5000, хотя реально заполненая последняя строка уже сместилась на номер 4000. Поэтому для таких случаев я написал себе более интелектуальную функцию - LastUsesCellWr:
Код:
Public Function LastUsesCellWr(wrsheet As Worksheet, col As Integer) As Integer
  ' Возвращает последнюю используемую ячейку в заданном столбце указанного листа. Методом возврата.
  '[wrsheet] - лист в котором нужно определить последнюю использ. ячейку
  '[col]     - столбец по которому определ. последн. использ. ячейку
 
  Dim k As Long
 
  On Error GoTo ОбрОшибок
 
  LastUsesCellWr = 0
  k = wrsheet.UsedRange.Rows.count
 
  Do While k > 0
    If Len(wrsheet.Cells(k, col).Text) > 0 Then
      LastUsesCellWr = k
      Exit Do
    End If
    k = k - 1
  Loop
   
Exit_Fun:
  Exit Function
 
ОбрОшибок:
  LastUsesCellWr = 0
  Resume Exit_Fun
 
End Function


которой с радостью пользовался последнее время, НО тут обнаружил, что есть такие ситуации, когда и она не помогает:

Оказывается, если в тихоря копировать строки на новый лист, вот так:
wrs.Range(wrs.Cells(lRowPrefx, 1), wrs.Cells(i - 1, 24)).Copy Destination:=wrsNew.Cells(lRowWrsNew, 1)
то в новом листе свойство UsedRange не обновляется, и оно возвращает цифру 1, когда реально там уже может спокойно 100 строк заполнено...

вообщем такая вот история, кто сказку слушал..
267
02 октября 2003 года
Cutty Sark
1.2K / / 17.10.2002
1. Если быть точным, то
wrsheet.UsedRange.Rows.count не совсем правильно.

Правильно
wrsheet.UsedRange.Row + wrsheet.UsedRange.Rows.Count - 1

Если ты на девственно чистом листе напишешь чего-нибудь в ячейках b10 и c15, а потом попросишь ActiveSheet.UsedRange.Select, то все сам увидишь (по крайней мере на 97-м Экселе я видел :) )


2. С копирование "втихаря" - попробую, расскажу о впечатлениях.

3. Долго искал по форуму, но наконец нашел. Глянь еще сюда:
http://forum.codenet.ru/showthread.php?s=&threadid=11394
258
02 октября 2003 года
SergeySV
1.5K / / 19.03.2003
Цитата:
Originally posted by Cutty Sark
1. Если быть точным, то
wrsheet.UsedRange.Rows.count не совсем правильно.

Правильно
wrsheet.UsedRange.Row + wrsheet.UsedRange.Rows.Count - 1



Да, правильно, потом только заметил когда уже вставил старый вариант функции - перлепутал.

267
03 октября 2003 года
Cutty Sark
1.2K / / 17.10.2002
Я попробовал фокус с копированием - у меня все нормально. UsedRange увеличивается соответствующим образом. Так что у тебя что-то подглючивает... :)
258
03 октября 2003 года
SergeySV
1.5K / / 19.03.2003
Хмм... интересно, будем копать.... у меня правда OfficeXp без единого сервис пака стоит - все руки никак не дойдут принести на работу обновление
267
03 октября 2003 года
Cutty Sark
1.2K / / 17.10.2002
Цитата:
Originally posted by SergeySV
Хмм... интересно, будем копать.... у меня правда OfficeXp без единого сервис пака стоит - все руки никак не дойдут принести на работу обновление



Ну, судя по твоему аватару, ты собрался не копать, а нырять. :D Эка зашифровался...

Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог