Форум программистов, компьютерный форум, киберфорум
VBA
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.88/8: Рейтинг темы: голосов - 8, средняя оценка - 4.88
1 / 1 / 0
Регистрация: 01.02.2012
Сообщений: 16

При открытии формы меняется открытый документ

14.11.2012, 22:00. Показов 1812. Ответов 10
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Доброго времени суток! Подскажите пожалуйста как справиться со следующей проблемой.
Есть макрос, который на определенном этапе работы показывает форму. Как только форма появляется, на заднем плане меняется документ, то есть активный документ закрывается другим открытым документом (скорее всего первым в коллекции Documents, но это не точно, так как ошибка очень непостоянна). Мне же нужно, чтобы на заднем плане оставался виден тот документ который и был активен при запуске макроса. Команд связанных хоть как-то с другими документами в этом макросе нет.
Пробовал ставить команду активации нужного документа (разумеется, определив его в самом начале выполнения макроса) прям перед командой UserForm.Show, а так же в событие UserForm_Activate() - не помогло.
Буду благодарен за любой совет, и заранее спасибо!
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
14.11.2012, 22:00
Ответы с готовыми решениями:

При открытии второй формы в объекте OLE отоброжать документ 1.doc, и при нажатии кнопки печатался
Всем привет!!! ПРОЭКТ в VB6. Имеется 2 формы: В первой форме по результатам работы создается вордовский файл "1.doc" и...

Нужно сделать, чтобы при открытии главной формы открывалась еще одна (форма 2) сразу при появлении первой формы
я попробывал в евентс поставить онкреэйт форм 2 .шов ,программа запускается но появляется ошибка , как рализовать? есть какой нибудь...

Не открывается документ, ошибка при открытии
нужна помощь при открытии, много чего перепробовал, не получается

10
5472 / 1150 / 50
Регистрация: 15.09.2012
Сообщений: 3,576
15.11.2012, 11:22
Boris7770,
  1. где находится форма: в Normal или где-то в другом месте?
  2. выложите фрагмент кода, где вызывается форма, и код процедуры UserForm_Initialize.
0
1 / 1 / 0
Регистрация: 01.02.2012
Сообщений: 16
15.11.2012, 12:08  [ТС]
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
Private Sub Info()
Dim str As String
Dim InputName
Dim Base As Database
Dim Block As Recordset
Dim SQLstr$
 
If Selection.Start = Selection.End Then
    InputName = InputBox("Input ward")
    If InputName = "" Then Exit Sub
    str = InputName
Else
    str = Trim(Selection.Text)
End If
For ind = 1 To Documents.Count
If Documents(ind).Name = ActiveDocument.Name Then ADoc = ind: Exit For
Next


Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
SQLstr = "SELECT Translations.eText, Translations.rText FROM Translations WHERE Translations.eText like" & Chr(34) & "*" & str & "*" & Chr(34) & " Or Translations.rText Like " & Chr(34) & "*" & str & "*" & Chr(34) & ";"
'Selection.TypeText SQLstr  'proverka sql virazeniya
 
    On Error GoTo OBErr
        Set Base = OpenDatabase("c:\panel\panel")
    On Error GoTo 0
    On Error GoTo ORErr
        Set Block = Base.OpenRecordset(SQLstr, dbOpenDynaset)
    On Error GoTo 0
If Not Block.RecordCount > 0 Then MsgBox "Nothing": Exit Sub
    
    Block.MoveFirst
    i = 0 ' s4et4ik nomerov vo freme
    j = 1 ' s4et4ik imen strok
 
While Not Block.EOF
    CBName = "T" & j
    fInfo.FR.Controls.Add "Forms.optionbutton.1", CBName
    fInfo.FR.Controls(i).Top = 15 + i * 20
    fInfo.FR.Controls(i).Caption = Block.Fields(0)
    fInfo.FR.Controls(i).ControlTipText = Block.Fields(0)
    fInfo.FR.Controls(i).Height = 22
    fInfo.FR.Controls(i).Width = 320
    fInfo.FR.Controls(i).Left = 20
    fInfo.FR.Controls(i).AutoSize = False
    fInfo.FR.Controls(i).Font.Size = 14
    fInfo.FR.Controls(i).BackColor = &HFFFFFF
    fInfo.FR.Controls(i).BackStyle = 1
    fInfo.FR.Controls(i).PicturePosition = 7
    fInfo.FR.Controls(i).SpecialEffect = 2
    fInfo.FR.Controls(i).TextAlign = 1
    fInfo.FR.Controls(i).Alignment = 1
    fInfo.FR.Controls(i).WordWrap = False
 
    CBName = "L" & j
    fInfo.FR.Controls.Add "Forms.label.1", CBName
    fInfo.FR.Controls(i + 1).Top = 15 + i * 20
    fInfo.FR.Controls(i + 1).Caption = Block.Fields(1)
    fInfo.FR.Controls(i + 1).ControlTipText = Block.Fields(1)
    fInfo.FR.Controls(i + 1).Height = 22
    fInfo.FR.Controls(i + 1).Width = 320
    fInfo.FR.Controls(i + 1).Left = 355
    fInfo.FR.Controls(i + 1).AutoSize = False
    fInfo.FR.Controls(i + 1).Font.Size = 14
    fInfo.FR.Controls(i + 1).BackColor = &HFFFFFF
    fInfo.FR.Controls(i + 1).BackStyle = 1
    fInfo.FR.Controls(i + 1).PicturePosition = 7
    fInfo.FR.Controls(i + 1).SpecialEffect = 2
    fInfo.FR.Controls(i + 1).TextAlign = 1
    fInfo.FR.Controls(i + 1).WordWrap = False
 
    i = i + 2
    j = j + 1
    Block.MoveNext
Wend
 
fInfo.FR.ScrollHeight = 30 + 20 * i
 
If fInfo.FR.ScrollHeight < 330 Then
    fInfo.FR.Height = 40 + 20 * i
    fInfo.bSerch.Top = 60 + i * 20
    fInfo.bCancel.Top = 60 + i * 20
    fInfo.Height = 110 + i * 20
End If
 
fInfo.Controls("T1").Value = True

Documents(ADoc).Activate
fInfo.show



Visual Basic
1
2
3
4
5
6
7
Exit Sub
OBErr:
    MsgBox "Sorry, there are some problems with connecting to database."
    Exit Sub
ORErr:
    MsgBox "Sorry, there are some problems with SQL query to database"
End Sub

В UserForm_Initialize() ничего нет вообще. Форма и сам макрос в Normal.
0
5472 / 1150 / 50
Регистрация: 15.09.2012
Сообщений: 3,576
15.11.2012, 12:09
Boris7770, просто форма запускается, вы ничего не далаете и меняется активный документ?
0
1 / 1 / 0
Регистрация: 01.02.2012
Сообщений: 16
15.11.2012, 15:52  [ТС]
Именно так, Скрипт. Сначала я думал что показывается первый документ из коллекции Documents, т.к. при запуске макроса с одного документа все оставалось на месте, а с другого - менялось. Но потом документы как бы поменялись местами, то есть теперь на заднем плане всегда оказывается другой документ (Word и документы я не закрывал и ничего с ними вообще не делал).

Добавлено через 11 минут
я совсем запутался. Сделал вот так

Visual Basic
1
2
3
4
5
Private Sub UserForm_Activate()
 MsgBox ActiveDocument.Name
 Documents(ADoc).Activate
 MsgBox ActiveDocument.Name
End Sub
В итоге оба раза показывается, что активен тот документ которого не видно, как такое может быть?
0
5472 / 1150 / 50
Регистрация: 15.09.2012
Сообщений: 3,576
15.11.2012, 16:08
Boris7770, а если вымышленную ситуацию сделать:
  1. Импортируйте в Normal форму, которую я выложил.
  2. Создайте новый модуль.
  3. Поместите в новый модель вот этот код:
    Visual Basic
    1
    2
    3
    4
    5
    
    Sub Procedure_1()
     
        UserForm1.Show
     
    End Sub
Осталась неправильная работа?
Вложения
Тип файла: zip Test.zip (1,000 байт, 8 просмотров)
0
1 / 1 / 0
Регистрация: 01.02.2012
Сообщений: 16
15.11.2012, 16:50  [ТС]
Как надо работает. Но где тогда ошибка в моем коде? И почему активен один документ, а на экране другой? Может активный документ и тот что на первом плане это вообще разные вещи? Я не спец в этих делах, помогите пожалуйста разобраться.
0
5472 / 1150 / 50
Регистрация: 15.09.2012
Сообщений: 3,576
15.11.2012, 17:03
Boris7770, в сообщении #3 в какой строке кода вызывается форма?
0
1 / 1 / 0
Регистрация: 01.02.2012
Сообщений: 16
15.11.2012, 19:09  [ТС]
Скрипт, там криво отобразилось, еще раз напишу. 90-я строка.

Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
Sub Info()
Dim str As String
Dim InputName
Dim Base As Database
Dim Block As Recordset
Dim SQLstr$
 
If Selection.Start = Selection.End Then
    InputName = InputBox("Input ward")
    If InputName = "" Then Exit Sub
    str = InputName
Else
    str = Trim(Selection.Text)
End If
 
For ind = 1 To Documents.Count
 If Documents(ind).Name = ActiveDocument.Name Then ADoc = ind: Exit For
Next
 
SQLstr = "SELECT Translations.eText, Translations.rText FROM Translations WHERE Translations.eText like" & Chr(34) & "*" & str & "*" & Chr(34) & " Or Translations.rText Like " & Chr(34) & "*" & str & "*" & Chr(34) & ";"
'Selection.TypeText SQLstr  'proverka sql virazeniya
 
    On Error GoTo OBErr
        Set Base = OpenDatabase("c:\panel\panel")
    On Error GoTo 0
    On Error GoTo ORErr
        Set Block = Base.OpenRecordset(SQLstr, dbOpenDynaset)
    On Error GoTo 0
If Not Block.RecordCount > 0 Then MsgBox "Nothing": Exit Sub
    
    Block.MoveFirst
    i = 0 ' s4et4ik nomerov vo freme
    j = 1 ' s4et4ik imen strok
 
While Not Block.EOF
    CBName = "T" & j
    fInfo.FR.Controls.Add "Forms.optionbutton.1", CBName
    fInfo.FR.Controls(i).Top = 15 + i * 20
    fInfo.FR.Controls(i).Caption = Block.Fields(0)
    fInfo.FR.Controls(i).ControlTipText = Block.Fields(0)
    fInfo.FR.Controls(i).Height = 22
    fInfo.FR.Controls(i).Width = 320
    fInfo.FR.Controls(i).Left = 20
    fInfo.FR.Controls(i).AutoSize = False
    fInfo.FR.Controls(i).Font.Size = 14
    fInfo.FR.Controls(i).BackColor = &HFFFFFF
    fInfo.FR.Controls(i).BackStyle = 1
    fInfo.FR.Controls(i).PicturePosition = 7
    fInfo.FR.Controls(i).SpecialEffect = 2
    fInfo.FR.Controls(i).TextAlign = 1
    fInfo.FR.Controls(i).Alignment = 1
    fInfo.FR.Controls(i).WordWrap = False
 
    CBName = "L" & j
    fInfo.FR.Controls.Add "Forms.label.1", CBName
    fInfo.FR.Controls(i + 1).Top = 15 + i * 20
    fInfo.FR.Controls(i + 1).Caption = Block.Fields(1)
    fInfo.FR.Controls(i + 1).ControlTipText = Block.Fields(1)
    fInfo.FR.Controls(i + 1).Height = 22
    fInfo.FR.Controls(i + 1).Width = 320
    fInfo.FR.Controls(i + 1).Left = 355
    fInfo.FR.Controls(i + 1).AutoSize = False
    fInfo.FR.Controls(i + 1).Font.Size = 14
    fInfo.FR.Controls(i + 1).BackColor = &HFFFFFF
    fInfo.FR.Controls(i + 1).BackStyle = 1
    fInfo.FR.Controls(i + 1).PicturePosition = 7
    fInfo.FR.Controls(i + 1).SpecialEffect = 2
    fInfo.FR.Controls(i + 1).TextAlign = 1
    fInfo.FR.Controls(i + 1).WordWrap = False
 
    i = i + 2
    j = j + 1
    Block.MoveNext
Wend
 
fInfo.FR.ScrollHeight = 30 + 20 * i
 
If fInfo.FR.ScrollHeight < 330 Then
    fInfo.FR.Height = 40 + 20 * i
    fInfo.bSerch.Top = 60 + i * 20
    fInfo.bCancel.Top = 60 + i * 20
    fInfo.Height = 110 + i * 20
End If
 
fInfo.Controls("T1").Value = True
 
 
Documents(ADoc).Activate
fInfo.show
 
 
Exit Sub
OBErr:
    MsgBox "Sorry, there are some problems with connecting to database."
    Exit Sub
ORErr:
    MsgBox "Sorry, there are some problems with SQL query to database"
End Sub
0
5472 / 1150 / 50
Регистрация: 15.09.2012
Сообщений: 3,576
15.11.2012, 19:11
Boris7770, в строке 89 активация документа есть.
0
1 / 1 / 0
Регистрация: 01.02.2012
Сообщений: 16
15.11.2012, 20:17  [ТС]
Скрипт, есть конечно, это первое что приходит в голову, только не помогает. Я еще писал Word.Application.Activate перед этим, думал из-за того что до формы идет обращение к аксесу что-то сбивается... Все без толку((
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
15.11.2012, 20:17
Помогаю со студенческими работами здесь

Документ при открытии занимает больше 1 Гб на HDD
Да. Вот такая беда!=-O К тому же хамячит память с системного диска. До открытия свободно 14 после только 4 или 5(по разному) Но вот док...

При открытии браузера поисковая страница меняется и появляются надписи adds by coupextension
Здравствуйте! Подозреваю наличие вируса. При открытии браузера поисковая страница меняется и появляются надписи adds by...

IntelliJ IDEA: при открытии файла класса меняется режим Insert (вставка/замещение)
Всем привет может кто то знает как это убрать : При открытии нового класса файла или при переходе на другой режим ...

Формы. При повторном открытии формы сбрасываются результаты вывода данных
Создал 2 формы. В 1й форме проходит расчет различных выражений. Данные расчета присваиваются переменным. Ввожу данные Нажимаю кнопку...

При открытии документа с ним открывается еще один документ (не пустой)
Всем доброго времени суток! Проблема следующая возникла у меня: Иногда при открытии какого-либо эксель документа вместе с ним...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
11
Ответ Создать тему
Новые блоги и статьи
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога Финальные проекты на Си и на C++: hello-sdl3-c. zip hello-sdl3-cpp. zip Результат:
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд. Даже если у вас. . .
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает монорепозиторий в котором находятся все исходники. При создании нового решения, мы просто добавляем нужные проекты и имеем. . .
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение: В этой книге («Подход, основанный на вариантах использования») Ивар утверждает, что архитектура программного обеспечения — это структуры,. . .
Управление камерой с помощью скрипта OrbitControls.js на Three.js: Вращение, зум и панорамирование
8Observer8 05.03.2026
Содержание блога Финальная демка в браузере работает на Desktop и мобильных браузерах. Итоговый код: orbit-controls-threejs-js. zip. Сканируйте QR-код на мобильном. Вращайте камеру одним пальцем,. . .
SDL3 для Web (WebAssembly): Синхронизация спрайтов SDL3 и тел Box2D
8Observer8 04.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-sync-physics-sprites-sdl3-c. zip На первой гифке отладочные линии отключены, а на второй включены:. . .
SDL3 для Web (WebAssembly): Идентификация объектов на Box2D v3 - использование userData и событий коллизий
8Observer8 02.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-collision-events-sdl3-c. zip Сканируйте QR-код на мобильном и вы увидите, что появится джойстик для управления главным героем. . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru