|
|
|
| здравствуйте
не могу понять, повторный запуск
lLastRow = Sheets(1).Cells(Sheets(1).Rows.Count, 3).End(xlUp).Row
выдает ошибку, т.к получается строк 65536
в чем ошибка? | |
|
| |
|
|
|
| вопрос не понятен. И что вы пытаетесь сделать?
что по вашему значит конструкция
Sheets(1).Cells(Sheets(1).Rows.Count, 3).End(xlUp).Row ? | |
|
| |
|
|
|
| ищу в exel последнюю запись
Set objExcel = CreateObject("Excel.application")
With objExcel
.Workbooks.Open fileName:=sse, ReadOnly:=False
.Visible = True
lLastRow = Sheets(1).Cells(Sheets(1).Rows.Count, 3).End(xlUp).Row
' MsgBox lLastRow + 1
.Sheets(1).Range("C" & lLastRow + 1).Value = FIO
end with
|
| |
|
| |
|
|
|
| а где цикл?
и условие выхода из цикла?
надо написать
for F=1 to 65536
if lLastRow >= 65535 then Exit for ' goto "на фиг"
или
if .Sheets(1).Range("C" & F).Value = "" then Exit for ' goto "на фиг"
next F
|
| |
|
| |
|
|
|
| так в том-то и дело, что строк всего 5-10,
при первом запуске, все ОК, а в следуюций он находит аж 65536 строк | |
|
| |
|
|
|
| ЗАДАЙ УСЛОВИЕ ВЫХОДА ИЗ ЭТОГО ПОИСКА-ЦИКЛА И ПРОБЛЕМОВ НЕ БУДЕТ. | |
|
| |
|
|
|
| ищу в exel последнюю запись |
никогда корректно не работал такой способ, т.е. вероятность ошибки очень велика.
т.к. Excel как-то сам по себе определяет последнюю ячейку. Например если заполнить 1 строку, потом перейти на 1000 строку и нажать Enter ничего не вводя, то excel будет считать что строк 1000.
Вероятно вы при первом проходе обращаетесь к ячейкам (даже ничего не вводя в них).
Считайте заполненные строки и столбцы "руками". т.е. следите сами сколько строк и ячеек заполнили. | |
|
| |
|
|
|
| спасибо, понял.
может можно как-то чистить память чтобы приповторном обращении считал правильно? | |
|
| |
|
|
|
| Добрый день,
Всего вашего кода не видно, но:
Вы создаете переменную типа Application по идее для того, чтобы потом от нее плясать. Т.е. открывать/создавать Workbooks, для которых созданный вами Excel.Application будет родительским объектом.
Посмотрите, что у вас здесь:
lLastRow = Sheets(1).Cells(Sheets(1).Rows.Count, 3).End(xlUp).Row
перед Sheet у вас нет вашей переменной.
Здесь тоже не однозначно:
.Sheets(1).Range("C" & lLastRow + 1).Value = FIO
Я к тому, что лучше переписать код четко:
Dim wb As Excel.Workbook
Set wb = objExcel.Workbooks.Open ..............
lLastRow = wb.Sheets(1).Cells(Sheets(1).Rows.Count, 3).End(xlUp).Row
wb.Sheets(1).Range("C" & lLastRow + 1).Value = "FIO"
|
Попробуйте переделать с четкой иерархией. По-моему, должно работать. | |
|
| |
|
|
|
| к сожелению так тоже не работает :(
сделал просто простоцикл как советовал час. | |
|
| |
|
|
|
| можете показать код целиком? | |
|
| |
|
|
|
| жаль, что нет уведомлений о сообщении,
мониторить форум без конца не могу. От темы отключаюсь
Цикл по всем строкам не нужен. Тем более, что в xls и xlsx файлах количество строк разное.
Если уже и просматривать, то тогда диапазон UsedRange. Но и это не нужно. Нужно было просто код отладить. | |
|
| |
|
|
|
| Вакшуль Сергей , огромное Вам спасибо. Вы правы об отладке кода.
код был такй
Dim lLastRow As Long
Dim lLastCol As Long
Dim objExcel As Object, sse As String
sse = "X:\Groups\МС.xls"
Set objExcel = CreateObject("Excel.application")
With objExcel
.Workbooks.Open fileName:=sse, ReadOnly:=False
.Visible = True
lLastRow = Cells(Rows.Count, 3).End(xlUp).Row
' MsgBox lLastRow + 1
.Sheets(1).Range("C" & lLastRow + 1).Value = ФамилияЛат & ИмяЛат
.Sheets(1).Range("F" & lLastRow + 1).Value = Заказчик
.Sheets(1).Range("D" & lLastRow + 1).Value = krat
If Len(Примечания) > 0 Then
.Sheets(1).Range("C" & lLastRow + 1).AddComment ' примечание
.Sheets(1).Range("C" & lLastRow + 1).Comment.Visible = False '' примечание
.Sheets(1).Range("C" & lLastRow + 1).Comment.Text Text:=Chr(34) & Примечания & Chr(34) ' примечание
End If
End With
Set objExcel = Nothing
|
| |
|
| |
|
|
|
| Добрый вечер,
Сделал тестовую процедуру(чтобы выполнить код поставьте ссылку на библиотеку Excel):
Sub test()
Dim lLastRow As Long
Dim lLastCol As Long
Dim objExcel As Excel.Application
Dim sse As String
Dim wb As Excel.Workbook
Dim wsh As Excel.Worksheet
sse = "C:\Users\Vakshul\Documents\Книга2.xlsx"
Set objExcel = CreateObject("Excel.application")
objExcel.Visible = True
Set wb = objExcel.Workbooks.Open(FileName:=sse, ReadOnly:=False)
Set wsh = wb.Worksheets(1)
With wsh
lLastRow = .Cells(.Rows.Count, 3).End(xlUp).Row
.Range("C" & lLastRow + 1).Value = "ФамилияЛат"
.Range("F" & lLastRow + 1).Value = "Заказчик"
.Range("D" & lLastRow + 1).Value = "krat"
' If Len(Примечания) > 0 Then
.Range("C" & lLastRow + 1).AddComment ' примечание
.Range("C" & lLastRow + 1).Comment.Visible = False '' примечание
.Range("C" & lLastRow + 1).Comment.Text Text:=Chr(34) & "Примечания" & Chr(34) ' примечание
' End If
End With
Set objExcel = Nothing
End Sub
|
код работает стабильно. Office 2010
В прошлый раз, когда я говорил о четкой иерархии и привел пример:
lLastRow = wb.Sheets(1).Cells(Sheets(1).Rows.Count, 3).End(xlUp).Row
я просто обозначил направление. Думал, вы доделаете.
Выделил жирным пропущенный кусок.
lLastRow = wb.Sheets(1).Cells(wb.Sheets(1).Rows.Count, 3).End(xlUp).Row
В общем, все работает.
Сергей | |
|
| |
|
|
|
| да, я переделовал, но не помогло. у меня office 2003 | |
|
| |
|