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

Вход

Регистрация

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

 

= Мир MS Excel/Инкремент ячейки при печати - Мир MS Excel

  • Страница 1 из 1
  • 1
Модератор форума: китин, _Boroda_, DrMini  
Инкремент ячейки при печати
blanco Дата: Пятница, 10.03.2017, 23:05 | Сообщение № 1
Группа: Пользователи
Ранг: Прохожий
Сообщений: 2
Репутация: 0 ±
Замечаний: 0% ±

Excel 2010
Доброго времени суток, вопрос новичка, только взялся за VBA, до этого изучал JS, PHP, Ruby нигде не было такого затупа. Наверняка проблема тупейшая.

Мне нужно просто инкрементировать число в одной ячейке при печати файла. Узнал что это делается с помощью:
[vba]
Код
Private Sub Workbook_BeforePrint(Cancel As Boolean)
    Worksheets(1).Range("A1").Value = Worksheets(1).Range("A1").Value + 1
End Sub
[/vba]
Не пашет. Подумал, может это событие не работает, написал вот так:
[vba]
Код
Function increm()
    MsgBox Worksheets(1).Range("A1").Value
End Function
[/vba]
Вставил в ячейку =increm(), нажале ентер - не работает. Подумал, ну может это строка "Worksheets(1).Range("A1").Value = Worksheets(1).Range("A1").Value + 1" не работает. Поставил на неё мышку, нажал F5 - число инкрементируется, строка отрабатывает. Ну значит вызов самой функции не работает! Попробовал вот так просто получить значение:
[vba]
Код
Function increm()
MsgBox Worksheets(1).Range("A1").Value
End Function
[/vba]
Работает!

Я короче не понимаю, то ли я дурак, то ли у VBA какая-то своя "особая" логика. Помогите понять, что я делают не так. На всякий случай файл прилагаю. Спасибо заранее.
К сообщению приложен файл: New__Microsoft_.xls (36.0 Kb)


Сообщение отредактировал blanco - Пятница, 10.03.2017, 23:07
 
Ответить
СообщениеДоброго времени суток, вопрос новичка, только взялся за VBA, до этого изучал JS, PHP, Ruby нигде не было такого затупа. Наверняка проблема тупейшая.

Мне нужно просто инкрементировать число в одной ячейке при печати файла. Узнал что это делается с помощью:
[vba]
Код
Private Sub Workbook_BeforePrint(Cancel As Boolean)
    Worksheets(1).Range("A1").Value = Worksheets(1).Range("A1").Value + 1
End Sub
[/vba]
Не пашет. Подумал, может это событие не работает, написал вот так:
[vba]
Код
Function increm()
    MsgBox Worksheets(1).Range("A1").Value
End Function
[/vba]
Вставил в ячейку =increm(), нажале ентер - не работает. Подумал, ну может это строка "Worksheets(1).Range("A1").Value = Worksheets(1).Range("A1").Value + 1" не работает. Поставил на неё мышку, нажал F5 - число инкрементируется, строка отрабатывает. Ну значит вызов самой функции не работает! Попробовал вот так просто получить значение:
[vba]
Код
Function increm()
MsgBox Worksheets(1).Range("A1").Value
End Function
[/vba]
Работает!

Я короче не понимаю, то ли я дурак, то ли у VBA какая-то своя "особая" логика. Помогите понять, что я делают не так. На всякий случай файл прилагаю. Спасибо заранее.

Автор - blanco
Дата добавления - 10.03.2017 в 23:05
Perfect2You Дата: Пятница, 10.03.2017, 23:36 | Сообщение № 2
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 237
Репутация: 59 ±
Замечаний: 0% ±

Excel 2010
Специальный макрос
[vba]
Код
Private Sub Workbook_BeforePrint(Cancel As Boolean)
    Worksheets(1).Range("A1").Value = Worksheets(1).Range("A1").Value + 1
End Sub
[/vba]
будет работать по событию, только если он размещен в коде книги, а не в модуле. В проекте VBA правой клавишей по книге (левый верхний угол окна) и "View code".

Что касается функции. Если ее вызывать из макроса - сработает. А вот при вызовах из ячеек, видимо, изменение других ячеек блокируется.
 
Ответить
СообщениеСпециальный макрос
[vba]
Код
Private Sub Workbook_BeforePrint(Cancel As Boolean)
    Worksheets(1).Range("A1").Value = Worksheets(1).Range("A1").Value + 1
End Sub
[/vba]
будет работать по событию, только если он размещен в коде книги, а не в модуле. В проекте VBA правой клавишей по книге (левый верхний угол окна) и "View code".

Что касается функции. Если ее вызывать из макроса - сработает. А вот при вызовах из ячеек, видимо, изменение других ячеек блокируется.

Автор - Perfect2You
Дата добавления - 10.03.2017 в 23:36
blanco Дата: Суббота, 11.03.2017, 00:52 | Сообщение № 3
Группа: Пользователи
Ранг: Прохожий
Сообщений: 2
Репутация: 0 ±
Замечаний: 0% ±

Excel 2010
На счёт события я кажется понял, значит объект события находится в книге а не в модуле и его видимость ограничивается только книгой. Был бы признателен если бы ещё и почитать что нибудь дали на эту тему =) и вообще, посоветуйте хорошую литературу, для новичков в VBA но знакомых с программированием.

А на счёт блокировки изменений других ячеек не пойму, это как-то можно обойти, и от чего зависит?
 
Ответить
СообщениеНа счёт события я кажется понял, значит объект события находится в книге а не в модуле и его видимость ограничивается только книгой. Был бы признателен если бы ещё и почитать что нибудь дали на эту тему =) и вообще, посоветуйте хорошую литературу, для новичков в VBA но знакомых с программированием.

А на счёт блокировки изменений других ячеек не пойму, это как-то можно обойти, и от чего зависит?

Автор - blanco
Дата добавления - 11.03.2017 в 00:52
Perfect2You Дата: Суббота, 11.03.2017, 20:07 | Сообщение № 4
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 237
Репутация: 59 ±
Замечаний: 0% ±

Excel 2010
А смысл обходить? Если в ячейку вводится функция (UDF), то ее задача получить значение, которое будет выведено в этой ячейке. Другие ячейки могут использоваться как поставщики данных, но менять-то их зачем? Там свое, функции опять же быть могут. Так что вполне логичная блокировка, на мой взгляд.

А обойти - запускайте из программы VBA. Проверил, при запуске из программы VBA этой функции требуемый инкремент произошел.
 
Ответить
СообщениеА смысл обходить? Если в ячейку вводится функция (UDF), то ее задача получить значение, которое будет выведено в этой ячейке. Другие ячейки могут использоваться как поставщики данных, но менять-то их зачем? Там свое, функции опять же быть могут. Так что вполне логичная блокировка, на мой взгляд.

А обойти - запускайте из программы VBA. Проверил, при запуске из программы VBA этой функции требуемый инкремент произошел.

Автор - Perfect2You
Дата добавления - 11.03.2017 в 20:07
  • Страница 1 из 1
  • 1
Поиск:

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