Форум программистов, компьютерный форум, киберфорум
VBA
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.89/18: Рейтинг темы: голосов - 18, средняя оценка - 4.89
 Аватар для Disa
2 / 2 / 0
Регистрация: 30.11.2009
Сообщений: 88

Найти открытый документ Word по названию

26.11.2015, 01:46. Показов 4007. Ответов 7
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте.
Необходимо создать проверку на наличие открытого документа с заданным названием. Моя проверка не работает. Как реализовать?

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
Sub ResultInfo()
    Dim str_Str As String
    Dim obj_Word   As Word.Application
    Dim obj_WDoc   As Word.Document
    Dim tabCurrent As Word.Table
    
    
    For Each obj_WDoc In Documents 'моя созданная проверка, в паре с If
    
        If obj_WDoc.Name = "Отчёт игры.doc" Then 
            obj_WDoc.Activate    'вот в этот блок If не заходит даже если уже открыт документ "Отчёт игры.doc"
 
        Else
            Set obj_Word = CreateObject("Word.Application")
            obj_Word.Visible = True
            'Set obj_WDoc = CreateObject("Word.Document")
 
            'Set tabCurrent = obj_WDoc.Tables.Add(obj_WDoc.Range, 1, 1)
            Set obj_WDoc = obj_Word.Documents.Add
                        With obj_WDoc
                .SaveAs Filename:="Отчёт игры.doc"
            End With
                        
            Set tabCurrent = obj_WDoc.Tables.Add(obj_WDoc.Range, 1, 2)
            With tabCurrent
                If .Style <> "Сетка таблицы" Then
                    .Style = "Сетка таблицы"
                End If
                .ApplyStyleHeadingRows = True
                .ApplyStyleLastRow = False
                .ApplyStyleFirstColumn = True
                .ApplyStyleLastColumn = False
                .ApplyStyleRowBands = True
                .ApplyStyleColumnBands = False
            End With
        End If
        
    Next obj_WDoc
End Sub
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
26.11.2015, 01:46
Ответы с готовыми решениями:

Дописать информацию в уже открытый документ Word
Всем добрый день. Пишу программу по составлению автоматического шаблона с выгрузкой в word. В принципе почти все готово, кроме одного. Про...

Внести изменения в независимо открытый документ Word
Добрый день, Товарищи! Пишу на скорую руку, очень спешу. Коротко и надеюсь понятно постараюсь. Как можно с помощью vb.net Что нибудь с...

Рефрешнуть открытый документ
Как можно рефрешнуть текущий открытый документ в клиенте? (который просматривается в данный момент)

7
Эксперт NIX
3305 / 933 / 201
Регистрация: 14.01.2013
Сообщений: 4,769
26.11.2015, 06:26
Поставьте бряк на 10 строчку этой процедуры и смотрите, что там, в obj_WDoc.Name
1
15155 / 6428 / 1731
Регистрация: 24.09.2011
Сообщений: 9,999
26.11.2015, 10:30
Disa, зачем Вы создаете документ в отдельном экземпляре приложения Word (строки 14, 19)?
Попробуйте так
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
Sub ResultInfo()
    Dim str_Str As String
    Dim obj_Word   As Word.Application
    Dim obj_WDoc   As Word.Document
    Dim tabCurrent As Word.Table
    
    On Error Resume Next
    Set obj_WDoc = Documents("Отчёт игры.doc")
    If Err Then
      Err.Clear
      On Error GoTo 0
      Set obj_WDoc = Documents.Add
      Set tabCurrent = obj_WDoc.Tables.Add(obj_WDoc.Range, 1, 2)
      With tabCurrent
          If .Style <> "Сетка таблицы" Then
              .Style = "Сетка таблицы"
          End If
          .ApplyStyleHeadingRows = True
          .ApplyStyleLastRow = False
          .ApplyStyleFirstColumn = True
          .ApplyStyleLastColumn = False
          .ApplyStyleRowBands = True
          .ApplyStyleColumnBands = False
      End With
      obj_WDoc.SaveAs FileName:="Отчёт игры.doc", FileFormat:=wdFormatDocument
    End If
End Sub
1
 Аватар для Disa
2 / 2 / 0
Регистрация: 30.11.2009
Сообщений: 88
26.11.2015, 14:07  [ТС]
Казанский,
сама "игра" в Excel, а отчёт с итогами должен выводится в Word, поэтому и создаю экземпляр, чтобы документ создать. После вашего вопроса появилась идея проверки, не запущен ли уже Word, но пока не знаю как сделать это программно.

Добавлено через 3 минуты
Казанский, идея была в том, чтобы заносить новые данные в "Отчёт игры", если он уже был создан ранее. Если нет(первые итоги игры), то создать такой документ, в нём создать таблицу.

Добавлено через 6 минут
Kubuntovod, я ставил, видел. И понимаю, что моя проверка не подходит, просто не понимаю чисто теоретически, как реализовать поиск по названию по всем открытым документам.
0
6082 / 1327 / 195
Регистрация: 12.12.2012
Сообщений: 1,023
26.11.2015, 14:25
Цитата Сообщение от Disa Посмотреть сообщение
идея проверки, не запущен ли уже Word
Предложу вариант, с помощью которого можно проверить из Excel, запущен ли экземпляр приложения Word, и если он существует, то найти в нем требуемый документ по названию.

Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
Sub GetDocumentFromExcel()
    Dim objWord As Object, objDoc As Object
    On Error Resume Next
    Set objWord = GetObject(, "Word.Application")
    On Error GoTo 0
    If objWord Is Nothing Then 'Нет ни одного экземпляра приложения Word.
        MsgBox "Word не открыт, значит, и документ не открыт."
    Else 'Существует экземпляр приложения Word, поищем в нем документ.
        For Each objDoc In objWord.Documents
            If objDoc.Name = "Отчёт игры.doc" Then Exit For
        Next objDoc
        If objDoc Is Nothing Then
            MsgBox "Документ не открыт в существующем экземпляре приложения Word."
        Else
            MsgBox "Документ открыт."
            '...действия с документом (objDoc).
        End If
    End If
End Sub
С уважением,
Аксима
1
 Аватар для Disa
2 / 2 / 0
Регистрация: 30.11.2009
Сообщений: 88
27.11.2015, 23:46  [ТС]
Аксима,
при отладке, в проверке открыт ли экземпляр Word(строка 6), вижу что значения соответствуют условию (Nothing = Nothing), и экземпляр Word на самом деле закрыт, но в блок не заходит(строку 7 пропускает). Почему может быть так?

Visual Basic
1
2
  If objWord Is Nothing Then 'Нет ни одного экземпляра приложения Word.
        MsgBox "Word не открыт, значит, и документ не открыт."
0
6082 / 1327 / 195
Регистрация: 12.12.2012
Сообщений: 1,023
28.11.2015, 20:07
Disa, понятия не имею, почему так происходит.
Пытался смоделировать указанную вами ситуацию несколько раз, но не получилось (при условии, что значение переменной objWord равно Nothing, всегда выскакивало данное сообщение).

В крайнем случае, можно попробовать заменить эту проверку проверкой на Err.Number <> 0 (строку On Error GoTo 0 уберите тогда)

С уважением,
Аксима
1
 Аватар для Disa
2 / 2 / 0
Регистрация: 30.11.2009
Сообщений: 88
01.12.2015, 15:48  [ТС]
Аксима,
странная работа была еще в проверке "For Each objDoc In objWord.Documents". Я заметил, что она один за другим проверяла какие-то "новые" документы (Документ 3, Документ 5 и т.д., смотря сколько раз до этого была запущена программа), но при этом ни один документ, на самом деле, не был открыт.

Понял, что это происходит из-за того, что при закрытии Word приложение не закрывалось полностью, а при закрытии Документа, информация о нём где-то оставалась в памяти.
Проблема решалась завершением процесса, через диспетчер задач, а полностью исчезла при перезагрузке компьютера.
Я не понимаю, почему такое могло возникнуть, но больше такое не повторяется.

И спасибо за альтернативный вариант
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
01.12.2015, 15:48
Помогаю со студенческими работами здесь

Сохранение в открытый документ
Реализовал сохранение текстового файла с помощью saveFileDialog, но каждый раз при сохранении заменять файл неудобно, как можно реализовать...

Как не открывать вновь открытый документ
Sub Otk() Dim circleObj As AcadCircle Dim centerPoint(0 To 2) As Double Dim radius As Double Dim point1 As Variant ...

Как найти документ Word
Добрый день. Вчера печатал документ, часа 2 наверное печатал, сегодня его не могу найти. Куда он пропал - даже не знаю. У меня информации,...

Как в VB сделать привязку на текущий открытый документ?
Помогите пожалуйста, как в VB сделать привязку на текущий открытый документ (учитывая что это CD9), а то он выдает мне 'There is no active...

Как дозаписывать данные в открытый документ Excel
Подскажите как дозаписывать в открытый документ Excel. т.е. создается новый документ .xslx записывается сразу пару строк, потом...


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

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
Новые блоги и статьи
Реалии
Hrethgir 01.03.2026
Нет, я не закончил до сих пор симулятор. Эта задача сложнее. Не получилось уйти в плавсостав, но оно и к лучшему, возможно. Точнее получалось - но сварщиком в палубную команду, а это значит, в моём. . .
Ритм жизни
kumehtar 27.02.2026
Иногда приходится жить в ритме, где дел становится всё больше, а вовлечения в происходящее — всё меньше. Плотный график не даёт вниманию закрепиться ни на одном событии. Утро начинается с быстрых,. . .
SDL3 для Web (WebAssembly): Сборка SDL3 и Box2D из исходников с помощью CMake и Emscripten
8Observer8 27.02.2026
Недавно вышла версия 3. 4. 2 библиотеки SDL3. На странице официальной релиза доступны исходники, готовые DLL (для x86, x64, arm64), а также библиотеки для разработки под Android, MinGW и Visual Studio. . . .
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru