Страница: 1 |
Страница: 1 |
Вопрос: внесение изменений в листе не активируя его?
Добавлено: 22.09.09 09:20
Автор вопроса: oleg
Всем доброго дня!
Столкнулся с ситуацией, когда необходимо внести изменения (выполняется макрос) в неактивном листе книги, листов много и при выполнении начинается "скачка" по листам, после чего происходит процедура печати. Если отключаю обновление экрана (.ScreenUpdating = False) то на печать выводится не тот результат, который должен быть. Именно на печать, при переходе на лист все просчитано верно, да там и вычисление элементарное типа Worksheets(".").Range("A1").Value = Worksheets(".").Range("A2").Value. А вот с печатью проблема. Вес код выглядит так и его задумка: печать определенного количества экз. листа книги равного результату в ячейке другого листа.
Private Sub CommandButton7_Click()
Sheets(".").Select
Worksheets(".").Range("A1").Value = _
Worksheets(".").Range("A2").Value
Dim ws As Worksheet
Set ws = ThisWorkbook.Worksheets("..")
Dim i As Integer
i = Val(ws.Range("...")) ' равный количеству экз.,
i = IIf(i, i, i + 1) ' при этом возможен результат равный "" или 0.
Sheets(Array("..")).Select ' выбираю нужный лист
ActiveSheet.PrintOut , , i ' печатаем количество
Sheets(Array(".")).Select ' возвращаюсь обратно
End Sub
Ответы
Всего ответов: 7
Номер ответа: 1
Автор ответа:
GDK
Вопросов: 13
Ответов: 348
Профиль | | #1
Добавлено: 22.09.09 10:13
Ну и огород.
Нафига?
Номер ответа: 2
Автор ответа:
oleg
Вопросов: 12
Ответов: 23
Профиль | | #2
Добавлено: 22.09.09 12:09
Спасибо, но не совсем то. Наверно не корректно сформулировал проблему. Опишу код с пояснением: данные о количестве копий для печати берутся на одном листе (лист2) из ячейки с10, а распечатывается лист1, при этом упр. кнопка располагается на листе2. Не срабатывает ввод данных в ячейку А39 на листе1 при отключении обновления экрана. Если убрать обновление, то все работает, но из-за слабых компов начинает тормозить, "бегать" по листам, что и не устраивает.
With Application
.ScreenUpdating = False 'отключение обновление экрана
.Calculation = xlCalculationManual 'отключение пересчёт формул вручную
End With
Sheets("лист1".Select
Worksheets("лист1".Range("A39".Value = _
Worksheets("лист1".Range("A38".Value
Dim ws As Worksheet
Set ws = ThisWorkbook.Worksheets("лист2"
Dim i As Integer
i = Val(ws.Range("с10") ' равный количеству экз.,
i = IIf(i, i, i + 1) ' при этом возможен результат равный "" или 0.
Sheets(Array("лист1").Select ' выбираю нужный лист
ActiveSheet.PrintOut , , i ' печатаем количество
Sheets(Array("лист2").Select ' возвращаюсь обратно
With Application
.ScreenUpdating = True
.Calculation = xlCalculationAutomatic
End With
End Sub
Номер ответа: 3
Автор ответа:
GDK
Вопросов: 13
Ответов: 348
Профиль | | #3
Добавлено: 24.09.09 09:42
Я и говорю - чтоб не бегало по листам:
Dim PrintSheet As Excel.Worksheet 'rem
Set PrintSheet = Sheets("Лист1" ' выбираю нужный лист rem
PrintSheet.PrintOut , , i ' печатаем количество rem
Sheets(Array("лист2".Select ' возвращаюсь обратно - этого не требуется поэтому закомментировал
ну и вначале Sheets("лист1".Select тоже не требуется.
Теперь понятно?
Номер ответа: 4
Автор ответа:
oleg
Вопросов: 12
Ответов: 23
Профиль | | #4
Добавлено: 24.09.09 11:18
Спасибо за помощь GDK, но это как в анекдоте "умом понимаю, но.." В результате обработки получаю "run-time error 13, type mismatch" на строке
Тут и торможу. Если не сложно - почему не идет?
Номер ответа: 5
Автор ответа:
GDK
Вопросов: 13
Ответов: 348
Профиль | | #5
Добавлено: 25.09.09 09:41
Номер ответа: 6
Автор ответа:
GDK
Вопросов: 13
Ответов: 348
Профиль | | #6
Добавлено: 25.09.09 09:43
Чтобы выделить текст как код - надо его сначала выбрать мышкой, затем нажать синюю кнопку "Код".
Номер ответа: 7
Автор ответа:
oleg
Вопросов: 12
Ответов: 23
Профиль | | #7
Добавлено: 28.09.09 09:00
Спасибо за помощь!