Страницы: 1
RSS
Userform: вывод на передний план при смене активного окна, без возможности активации иного приложения / листа и т.д.  до выбора
 
Добрый день! Бьюсь с формами и циклами уже несколько часов - все никак не получается: форма не выводится на передний план, а идет "мерцание" для выбора активного приложения как это устранить? UserForm1.vbModeless show - не предлагать, здесь нельзя, так как макрос "бежит дальше". Спасибо большое!

Здесь нужно, видимо, скорректировать код
Код
wda.WindowState = wdWindowStateMinimize
Windows("tesr.xlsm").Activate
UserForm1.Show

Код цикла:
Код
For vib = 1 To 10

wda.WindowState = wdWindowStateMinimize
Windows("tesr.xlsm").Activate
UserForm1.Show

'''''''''''''''''''''''''
'''''''''ЦИКЛ'''''''''''
'''''''''''''''''''''''''

''''
Range("C7:F15").Select
Selection.Copy
''''
With wda
.ActiveDocument.Bookmarks("ob_1").Select

End With

wda.Selection.PasteSpecial False, False, False

'
Application.CutCopyMode = False
'Очистка буфера обмена

''''
Range("C1:E5").Select
Selection.Copy
''''
With wda
.ActiveDocument.Bookmarks("ob_2").Select

End With

wda.Selection.PasteSpecial False, False, False

'
Application.CutCopyMode = False
'Очистка буфера обмена

''''
wda.Activate
wda.Selection.TypeParagraph
wda.Selection.TypeParagraph
wda.Selection.TypeText Text:="ob_1"
wda.Selection.MoveLeft Unit:=wdCharacter, Count:=4, Extend:=wdExtend
wda.Selection.Bookmarks.Add Name:="ob_1"
wda.Selection.MoveRight Unit:=wdCharacter, Count:=5, Extend:=wdExtend
wda.Selection.TypeParagraph
wda.Selection.TypeParagraph
''''

wda.Activate
wda.Selection.TypeParagraph
wda.Selection.TypeParagraph
wda.Selection.TypeText Text:="ob_2"
wda.Selection.MoveLeft Unit:=wdCharacter, Count:=4, Extend:=wdExtend
wda.Selection.Bookmarks.Add Name:="ob_2"
wda.Selection.MoveRight Unit:=wdCharacter, Count:=5, Extend:=wdExtend
wda.Selection.TypeParagraph
wda.Selection.TypeParagraph
''''

'''''''''''''''''''''''''
''''''КОНЕЦ ЦИКЛА'''''''
'''''''''''''''''''''''''
Next vib

End Sub
 
У вас все процессы монитор обновляет, поэтому и мерцание. Отключите обновление монитора
Код
Application.ScreenUpdating = False
И выполняйте обновление формы если это необходимо при выполнении цикла при помощи команды
Код
UserForm1.Repaint
Плюс ко всему вы везде всё активируете и выделяете в макросе. Напишите код без выделения ячеек листов и книг. Не обязательно выделять сначала какой-то элемент, а потом выполнять над ним операцию. Можно сразу выполнить нужную операцию не выделяя элементы.
Изменено: Alemox - 18.07.2017 14:51:05
Мастерство программиста не в том, чтобы писать программы, работающие без ошибок.
А в том, чтобы писать программы, работающие при любом количестве ошибок.
 
Цитата
Alemox написал:
UserForm1.Repaint
Не подходит - действует аналогично UserForm1.vbModeless show (разница в том, что форму не показывает, а макрос бежит вперед)

Цитата
Alemox написал:
вы везде всё активируете и выделяете в макросе
Дело в том что идет пересоздание закладок в ворд - я покак более удачного способа как
Код
wda.Activate
wda.Selection.TypeParagraph
wda.Selection.TypeParagraph
wda.Selection.TypeText Text:="ob_1"
wda.Selection.MoveLeft Unit:=wdCharacter, Count:=4, Extend:=wdExtend
wda.Selection.Bookmarks.Add Name:="ob_1"
wda.Selection.MoveRight Unit:=wdCharacter, Count:=5, Extend:=wdExtend
wda.Selection.TypeParagraph
wda.Selection.TypeParagraph
''''
 
wda.Activate
wda.Selection.TypeParagraph
wda.Selection.TypeParagraph
wda.Selection.TypeText Text:="ob_2"
wda.Selection.MoveLeft Unit:=wdCharacter, Count:=4, Extend:=wdExtend
wda.Selection.Bookmarks.Add Name:="ob_2"
wda.Selection.MoveRight Unit:=wdCharacter, Count:=5, Extend:=wdExtend
wda.Selection.TypeParagraph
wda.Selection.TypeParagraph
''''

не нашел:(
Код
Application.ScreenUpdating = False
Этот код разместить в самое начало макроса или в начале кода цикла?
Изменено: Macedon - 18.07.2017 15:01:04
 
Пожонглировал немного с кодом - получил результат, но мне кажется, что есть решение получше...
Нужно поправить конец кода на:
Код
wda.WindowState = wdWindowStateMaximize
Next vib
Страницы: 1
Наверх