Visual Basic, .NET, ASP, VBScript
 

   
   
     

Форум - VBA

Страница: 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
Ну и огород.
Sheets(Array("..";)).Select ' выбираю нужный лист

Нафига?
  1. Private Sub CommandButton7_Click()
  2. Sheets(".").Select
  3. Worksheets(".").Range("A1").Value = _
  4.     Worksheets(".").Range("A2").Value
  5. Dim ws As Worksheet
  6.  
  7. Dim PrintSheet As Excel.Worksheet 'rem
  8.  
  9. Set ws = ThisWorkbook.Worksheets("..")
  10. Dim i As Integer
  11.     i = Val(ws.Range("...")) ' равный количеству экз.,
  12.         i = IIf(i, i, i + 1) ' при этом возможен результат равный "" или 0.
  13.             Set PrintSheet = Sheets(Array("..")) ' выбираю нужный лист    rem
  14. PrintSheet.PrintOut , , i ' печатаем количество                           rem
  15.     'Sheets(Array(".")).Select ' возвращаюсь обратно                      rem
  16. End Sub

Ответить

Номер ответа: 2
Автор ответа:
 oleg



Вопросов: 12
Ответов: 23
 Профиль | | #2 Добавлено: 22.09.09 12:09
Спасибо, но не совсем то. Наверно не корректно сформулировал проблему. Опишу код с пояснением: данные о количестве копий для печати берутся на одном листе (лист2) из ячейки с10, а распечатывается лист1, при этом упр. кнопка располагается на листе2. Не срабатывает ввод данных в ячейку А39 на листе1 при отключении обновления экрана. Если убрать обновление, то все работает, но из-за слабых компов начинает тормозить, "бегать" по листам, что и не устраивает.

Private Sub CommandButton7_Click()
 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" на строке

Set PrintSheet = Sheets(Array("лист1";)) ' выбираю нужный лист rem
Тут и торможу. Если не сложно - почему не идет?

Ответить

Номер ответа: 5
Автор ответа:
 GDK



Вопросов: 13
Ответов: 348
 Профиль | | #5 Добавлено: 25.09.09 09:41
  1. Set PrintSheet = Excel.ActiveWorkbook.Sheets("Лист1") 'Полная и правильная запись

Ответить

Номер ответа: 6
Автор ответа:
 GDK



Вопросов: 13
Ответов: 348
 Профиль | | #6 Добавлено: 25.09.09 09:43
Чтобы выделить текст как код - надо его сначала выбрать мышкой, затем нажать синюю кнопку "Код".

Ответить

Номер ответа: 7
Автор ответа:
 oleg



Вопросов: 12
Ответов: 23
 Профиль | | #7 Добавлено: 28.09.09 09:00
Спасибо за помощь!

Ответить

Страница: 1 |

Поиск по форуму



© Copyright 2002-2011 VBNet.RU | Пишите нам