Домашняя страница Undo Do New Save Карта сайта Обратная связь Поиск по форуму
МИР MS EXCEL - Гость.xls

Вход

Регистрация

Напомнить пароль

 

= Мир MS Excel/Запись в последнюю ячейку столбца - Мир MS Excel

Регистрация · Логин: · Пароль: · · Забыли пароль?
Страница 1 из 11
Модератор форума: _Boroda_, Pelena, Manyasha, SLAVICK 
Мир MS Excel » Вопросы и решения » Вопросы по VBA » Запись в последнюю ячейку столбца (Макросы/Sub)
Запись в последнюю ячейку столбца
S-freez Дата: Понедельник, 25.04.2016, 10:57 | Сообщение № 1
Группа: Пользователи
Ранг: Новичок
Сообщений: 11
Репутация: 0 ±
Замечаний: 20% ±

Excel 2007
Пытаюсь создать макрос, который должен записывать значение [B1] в последнюю ячейку столбца А1 и время в соседнюю ячейку.
Макрос не работает, Пишет Object Required и ссылается на Lastcell.
Помогите разобраться где я допустил ошибку. И вообще с отладкой. Спасибо.

[vba]
Код

Sub ПоминутнаяЗапись()
Application.DisplayAlerts = False
Dim rng As Range, СтрокаДляЗаписи As Range, Sh As Worksheet, Target As Range, Lastcell As Integer

' Запустить вполнение этой процедуры через минуту еще раз (ежеминутный цикл)
Application.OnTime Now + TimeValue("00:01:00"), _
"'" & ThisWorkbook.Name & "'!ЭтаКнига.ПоминутнаяЗапись"
' Задать лист с ячейкой, значения которой каждую минуту нужно сохранять
Set Sh = Лист1
' Задать ячейку, значения которой каждую минуту нужно сохранять
Set Target = [b1]
' Отпределить последнюю строку для записи
Set Lastcell = Cells(Rows.Count, 1).End(xlUp).Row
Set СтрокаДляЗаписи.FormulaR1C1 = [R(Lastcell)C(1):R(Lastcell)C(2)]
' Добавить в конец дату+время и значение
СтрокаДляЗаписи(1, 1) = Now
СтрокаДляЗаписи(1, 2) = Target
[/vba]


Сообщение отредактировал S-freez - Понедельник, 25.04.2016, 11:02
 
Ответить
СообщениеПытаюсь создать макрос, который должен записывать значение [B1] в последнюю ячейку столбца А1 и время в соседнюю ячейку.
Макрос не работает, Пишет Object Required и ссылается на Lastcell.
Помогите разобраться где я допустил ошибку. И вообще с отладкой. Спасибо.

[vba]
Код

Sub ПоминутнаяЗапись()
Application.DisplayAlerts = False
Dim rng As Range, СтрокаДляЗаписи As Range, Sh As Worksheet, Target As Range, Lastcell As Integer

' Запустить вполнение этой процедуры через минуту еще раз (ежеминутный цикл)
Application.OnTime Now + TimeValue("00:01:00"), _
"'" & ThisWorkbook.Name & "'!ЭтаКнига.ПоминутнаяЗапись"
' Задать лист с ячейкой, значения которой каждую минуту нужно сохранять
Set Sh = Лист1
' Задать ячейку, значения которой каждую минуту нужно сохранять
Set Target = [b1]
' Отпределить последнюю строку для записи
Set Lastcell = Cells(Rows.Count, 1).End(xlUp).Row
Set СтрокаДляЗаписи.FormulaR1C1 = [R(Lastcell)C(1):R(Lastcell)C(2)]
' Добавить в конец дату+время и значение
СтрокаДляЗаписи(1, 1) = Now
СтрокаДляЗаписи(1, 2) = Target
[/vba]

Автор - S-freez
Дата добавления - 25.04.2016 в 10:57
_Boroda_ Дата: Понедельник, 25.04.2016, 11:05 | Сообщение № 2
Группа: Модераторы
Ранг: Экселист
Сообщений: 9348
Репутация: 3922 ±
Замечаний: 0% ±

2003; 2007; 2010; 2013 RUS
Ему Integer не нравится в DIMе
И Set вроде там не нужен
Код
Lastcell = Cells(Rows.Count, 1).End(xlUp).Row

Кстати, Вы сознательно используете переменную с названием Target?


Скажи мне, кудесник, любимец ба’гов...
Платная помощь:
Boroda_Excel@mail.ru
Яндекс-деньги: 41001632713405 | Webmoney: R289877159277; Z102172301748; E177867141995
 
Ответить
СообщениеЕму Integer не нравится в DIMе
И Set вроде там не нужен
Код
Lastcell = Cells(Rows.Count, 1).End(xlUp).Row

Кстати, Вы сознательно используете переменную с названием Target?

Автор - _Boroda_
Дата добавления - 25.04.2016 в 11:05
S-freez Дата: Понедельник, 25.04.2016, 11:14 | Сообщение № 3
Группа: Пользователи
Ранг: Новичок
Сообщений: 11
Репутация: 0 ±
Замечаний: 20% ±

Excel 2007
Кстати, Вы сознательно используете переменную с названием Target?

Да. Так как значения ячейки B1 постоянно меняются. А почему вас смущает название?
 
Ответить
Сообщение
Кстати, Вы сознательно используете переменную с названием Target?

Да. Так как значения ячейки B1 постоянно меняются. А почему вас смущает название?

Автор - S-freez
Дата добавления - 25.04.2016 в 11:14
_Boroda_ Дата: Понедельник, 25.04.2016, 11:19 | Сообщение № 4
Группа: Модераторы
Ранг: Экселист
Сообщений: 9348
Репутация: 3922 ±
Замечаний: 0% ±

2003; 2007; 2010; 2013 RUS
Потому, что Target в VBA уже зарезервирован.
Вот здесь про это интересно по ссылке написано
http://www.excelworld.ru/forum/5-947-10508-16-1320320674

Добавлено.
Сейчас перечитываю и чуть не в голос ржу. Коллеги уже подозрительно косятся.


Скажи мне, кудесник, любимец ба’гов...
Платная помощь:
Boroda_Excel@mail.ru
Яндекс-деньги: 41001632713405 | Webmoney: R289877159277; Z102172301748; E177867141995


Сообщение отредактировал _Boroda_ - Понедельник, 25.04.2016, 11:50
 
Ответить
СообщениеПотому, что Target в VBA уже зарезервирован.
Вот здесь про это интересно по ссылке написано
http://www.excelworld.ru/forum/5-947-10508-16-1320320674

Добавлено.
Сейчас перечитываю и чуть не в голос ржу. Коллеги уже подозрительно косятся.

Автор - _Boroda_
Дата добавления - 25.04.2016 в 11:19
S-freez Дата: Понедельник, 25.04.2016, 11:33 | Сообщение № 5
Группа: Пользователи
Ранг: Новичок
Сообщений: 11
Репутация: 0 ±
Замечаний: 20% ±

Excel 2007
Потому, что Target в VBA уже зарезервирован.
Вот здесь про это интересно по ссылке написано
http://www.excelworld.ru/forum/5-947-10508-16-1320320674

Почитаю на досуге=)
Но возвращаясь, к нерабочему коду. Мне не понятно почему переменной Lastcell не нравится тип данных integer. Ведь метод .row возвращает просто номер строки или я ошибаюсь?
 
Ответить
Сообщение
Потому, что Target в VBA уже зарезервирован.
Вот здесь про это интересно по ссылке написано
http://www.excelworld.ru/forum/5-947-10508-16-1320320674

Почитаю на досуге=)
Но возвращаясь, к нерабочему коду. Мне не понятно почему переменной Lastcell не нравится тип данных integer. Ведь метод .row возвращает просто номер строки или я ошибаюсь?

Автор - S-freez
Дата добавления - 25.04.2016 в 11:33
_Boroda_ Дата: Понедельник, 25.04.2016, 11:43 | Сообщение № 6
Группа: Модераторы
Ранг: Экселист
Сообщений: 9348
Репутация: 3922 ±
Замечаний: 0% ±

2003; 2007; 2010; 2013 RUS
не не понятно почему переменной Lastcell не нравится тип данных integer

В Excel сколько строк? - 1 045 576 (ну или 65 536)
А в Integer? - 32 767. Не хватает.
А вот в Long, например, - 2 147 483 647


Скажи мне, кудесник, любимец ба’гов...
Платная помощь:
Boroda_Excel@mail.ru
Яндекс-деньги: 41001632713405 | Webmoney: R289877159277; Z102172301748; E177867141995
 
Ответить
Сообщение
не не понятно почему переменной Lastcell не нравится тип данных integer

В Excel сколько строк? - 1 045 576 (ну или 65 536)
А в Integer? - 32 767. Не хватает.
А вот в Long, например, - 2 147 483 647

Автор - _Boroda_
Дата добавления - 25.04.2016 в 11:43
S-freez Дата: Понедельник, 25.04.2016, 12:02 | Сообщение № 7
Группа: Пользователи
Ранг: Новичок
Сообщений: 11
Репутация: 0 ±
Замечаний: 20% ±

Excel 2007
В Excel сколько строк? - 1 045 576
А в Integer? - 32 767

У меня последний номер строки до 200 не дотягивает, хотя если конечно считать что он с самой нижней сканировать начинает, тогда наверное справедливо. Пусть будет Long.
Дальше идёт ошибка в .Formula R1C1


Сообщение отредактировал S-freez - Понедельник, 25.04.2016, 12:03
 
Ответить
Сообщение
В Excel сколько строк? - 1 045 576
А в Integer? - 32 767

У меня последний номер строки до 200 не дотягивает, хотя если конечно считать что он с самой нижней сканировать начинает, тогда наверное справедливо. Пусть будет Long.
Дальше идёт ошибка в .Formula R1C1

Автор - S-freez
Дата добавления - 25.04.2016 в 12:02
S-freez Дата: Понедельник, 25.04.2016, 12:16 | Сообщение № 8
Группа: Пользователи
Ранг: Новичок
Сообщений: 11
Репутация: 0 ±
Замечаний: 20% ±

Excel 2007
Убрал Set и квадратные скобки. Теперь то, End of Statement, то Synthax error
[vba]
Код
Lastcell = Cells(Rows.Count, 1).End(xlUp).Row
   СтрокаДляЗаписи.FormulaR1C1 = R(Lastcell)C(1):R(Lastcell)C(2)
[/vba]


Сообщение отредактировал S-freez - Понедельник, 25.04.2016, 12:23
 
Ответить
СообщениеУбрал Set и квадратные скобки. Теперь то, End of Statement, то Synthax error
[vba]
Код
Lastcell = Cells(Rows.Count, 1).End(xlUp).Row
   СтрокаДляЗаписи.FormulaR1C1 = R(Lastcell)C(1):R(Lastcell)C(2)
[/vba]

Автор - S-freez
Дата добавления - 25.04.2016 в 12:16
_Boroda_ Дата: Понедельник, 25.04.2016, 12:29 | Сообщение № 9
Группа: Модераторы
Ранг: Экселист
Сообщений: 9348
Репутация: 3922 ±
Замечаний: 0% ±

2003; 2007; 2010; 2013 RUS
Так нужно?

Добавлено.
Вообще все поправил
Вот так
[vba]
Код
Sub ПоминутнаяЗапись()
Application.ScreenUpdating = 0
Dim Sh As Worksheet, r_ As Long
Application.OnTime Now + TimeValue("00:00:05"), "ЭтаКнига.ПоминутнаяЗапись"
Set Sh = Лист1
r_ = Sh.Cells(Rows.Count, 1).End(xlUp).Row + 1
Sh.Range("A" & r_) = Now
Sh.Range("B" & r_) = Sh.Range("B1")
End Sub

Private Sub Workbook_Open()
ПоминутнаяЗапись
End Sub
[/vba]
Все это, конечно, в модуль книги.
К сообщению приложен файл: 789572965_1.xlsm(19Kb)


Скажи мне, кудесник, любимец ба’гов...
Платная помощь:
Boroda_Excel@mail.ru
Яндекс-деньги: 41001632713405 | Webmoney: R289877159277; Z102172301748; E177867141995


Сообщение отредактировал _Boroda_ - Понедельник, 25.04.2016, 13:20
 
Ответить
СообщениеТак нужно?

Добавлено.
Вообще все поправил
Вот так
[vba]
Код
Sub ПоминутнаяЗапись()
Application.ScreenUpdating = 0
Dim Sh As Worksheet, r_ As Long
Application.OnTime Now + TimeValue("00:00:05"), "ЭтаКнига.ПоминутнаяЗапись"
Set Sh = Лист1
r_ = Sh.Cells(Rows.Count, 1).End(xlUp).Row + 1
Sh.Range("A" & r_) = Now
Sh.Range("B" & r_) = Sh.Range("B1")
End Sub

Private Sub Workbook_Open()
ПоминутнаяЗапись
End Sub
[/vba]
Все это, конечно, в модуль книги.

Автор - _Boroda_
Дата добавления - 25.04.2016 в 12:29
S-freez Дата: Понедельник, 25.04.2016, 12:56 | Сообщение № 10
Группа: Пользователи
Ранг: Новичок
Сообщений: 11
Репутация: 0 ±
Замечаний: 20% ±

Excel 2007
Вообще да. Работает. Правда не пойму почему))
Он теперь правда стал выдавать ошибки на другие макросы никак с этим не связанные и проблем раньше не создававших.
Но данный макрос работает. Спасибо)
 
Ответить
СообщениеВообще да. Работает. Правда не пойму почему))
Он теперь правда стал выдавать ошибки на другие макросы никак с этим не связанные и проблем раньше не создававших.
Но данный макрос работает. Спасибо)

Автор - S-freez
Дата добавления - 25.04.2016 в 12:56
StoTisteg Дата: Вторник, 26.04.2016, 00:17 | Сообщение № 11
Группа: Авторы
Ранг: Ветеран
Сообщений: 541
Репутация: 45 ±
Замечаний: 0% ±

Excel 2010
СтрокаДляЗаписи.FormulaR1C1 = R(Lastcell)C(1):R(Lastcell)C(2)
А это и не может работать... Грубо говоря, .FormulaR1C1 — то же, что .Value, только пишется как формула. То есть
[vba]
Код
Cells(1,1).FormulaR1C1="=IF(1=1,1,2)"
[/vba]запишет Вам в ячейку A1 формулу
Код
=ЕСЛИ(1=1;1,;2)
и никак иначе.


Проверь всё. ThisWorkbook.Save. On Error Resume Next.

Сообщение отредактировал StoTisteg - Вторник, 26.04.2016, 00:19
 
Ответить
Сообщение
СтрокаДляЗаписи.FormulaR1C1 = R(Lastcell)C(1):R(Lastcell)C(2)
А это и не может работать... Грубо говоря, .FormulaR1C1 — то же, что .Value, только пишется как формула. То есть
[vba]
Код
Cells(1,1).FormulaR1C1="=IF(1=1,1,2)"
[/vba]запишет Вам в ячейку A1 формулу
Код
=ЕСЛИ(1=1;1,;2)
и никак иначе.

Автор - StoTisteg
Дата добавления - 26.04.2016 в 00:17
Мир MS Excel » Вопросы и решения » Вопросы по VBA » Запись в последнюю ячейку столбца (Макросы/Sub)
Страница 1 из 11
Поиск:

Яндекс цитирования
© 2010-2016 · Дизайн: MichaelCH · Хостинг от uCoz · При использовании материалов сайта, ссылка на www.excelworld.ru обязательна!