kak ispolzovat EOF
kak polzuyutsya komandoy End Of File
EOF BOF
napishiti pojaluysta malenkie primeri
zaranie blagodaren
Pomogite please
kak polzuyutsya komandoy End Of File
EOF BOF
napishiti pojaluysta malenkie primeri
zaranie blagodaren
Вот, пожалуйста, открываю хелп для Экселя, и вижу там:
=================
В данном примере функция EOF используется для обнаружения конца файла. Предполагается, что MYFILE является текстовым файлом, который содержит несколько строк текста.
Open "MYFILE" For Input As #1 ' Открывает файл для чтения.
Do While Not EOF(1) ' Достигнут ли конец файла?
Line Input #1, InputData ' Читает строку данных.
Debug.Print InputData ' Выводит в окно отладки.
Loop
Close #1 ' Закрывает файл.
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
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, но скорее всего тебе хватит того, что я тебе выше написал.
Как известно для этих целей, кроме простого перебора можно использовать такие встроенные свойства: [Worksheet].UsedRange( а потом .Row) или сразу ActiveSheet.Cells.SpecialCells(xlCellTypeLastCell)
Но в них есть один общий недостаток, понятие UsedRange(используемый диапазон) вмещает в себя даже те ячейки, где вы например ковырялись, а потом стерли и если у Вас внизу остались такие "чистые" строчки, то они все равно попадут в используемые. Или например у меня такая постоянная беда: после импортирования в Excel текстового файла приходится избавляться от мусорных строк - удалять их. Закачил 5000 строк, потом 1000 удалили, а если нажать Ctrl+PgDn, то все равно попадешь на последнюю используемую строку - под номером 5000, хотя реально заполненая последняя строка уже сместилась на номер 4000. Поэтому для таких случаев я написал себе более интелектуальную функцию - LastUsesCellWr:
' Возвращает последнюю используемую ячейку в заданном столбце указанного листа. Методом возврата.
'[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 строк заполнено...
вообщем такая вот история, кто сказку слушал..
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
1. Если быть точным, то
wrsheet.UsedRange.Rows.count не совсем правильно.
Правильно
wrsheet.UsedRange.Row + wrsheet.UsedRange.Rows.Count - 1
Да, правильно, потом только заметил когда уже вставил старый вариант функции - перлепутал.
Хмм... интересно, будем копать.... у меня правда OfficeXp без единого сервис пака стоит - все руки никак не дойдут принести на работу обновление
Ну, судя по твоему аватару, ты собрался не копать, а нырять. :D Эка зашифровался...