Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Microsoft Office [игнор отключен] [закрыт для гостей] / Запуск гиперссылки во вновь созданном приложении Word / 17 сообщений из 17, страница 1 из 1
09.05.2012, 12:10
    #37786689
Dan-K
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запуск гиперссылки во вновь созданном приложении Word
Пытаюсь запустить гиперссылку из создаваемого экземпляра Word. Но конструкция
Application.FollowHyperlink - не работает.

Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
Sub WORD_HIPER_LINK()
Dim wordApp As Object
Dim strFullFileName$
'для отладки, потом убрать
strFullFileName = "C:\2.xls"
'On Error Resume Next
'создаем word
Set wordApp = CreateObject("Word.Application")
Application.FollowHyperlink strFullFileName
wordApp.Quit
Set wordApp = Nothing
End Sub
...
Рейтинг: 0 / 0
09.05.2012, 12:31
    #37786695
Shocker.Pro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запуск гиперссылки во вновь созданном приложении Word
Dan-Kиз создаваемого экземпляра Word. создаваемый экземпляр есть wordApp, а не Application
...
Рейтинг: 0 / 0
09.05.2012, 12:36
    #37786696
Dan-K
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запуск гиперссылки во вновь созданном приложении Word
Дак он тоже не работает
...
Рейтинг: 0 / 0
09.05.2012, 12:39
    #37786698
Shocker.Pro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запуск гиперссылки во вновь созданном приложении Word
Стоп, а кто сказал, что у Application есть вообще такой метод????
Он есть у документа.
...
Рейтинг: 0 / 0
09.05.2012, 12:39
    #37786699
Dan-K
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запуск гиперссылки во вновь созданном приложении Word
Я так понимаю, что гиперссылка требует себе родителя: книгу или страницу, а приложение его почемуто не устраивает... или библиотеки нужны?
...
Рейтинг: 0 / 0
09.05.2012, 12:41
    #37786701
Dan-K
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запуск гиперссылки во вновь созданном приложении Word
...
Рейтинг: 0 / 0
09.05.2012, 12:41
    #37786702
Edd.Dragon
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запуск гиперссылки во вновь созданном приложении Word
И все-таки вы можете пояснить, зачем вам переменная wordApp в этом коде?

Код: vbnet
1.
2.
3.
Set wordApp = CreateObject("Word.Application")
Application.FollowHyperlink strFullFileName
wordApp.Quit
...
Рейтинг: 0 / 0
09.05.2012, 12:42
    #37786707
Shocker.Pro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запуск гиперссылки во вновь созданном приложении Word
Dan-KВ access - есть...
но мы же за ворд говорим

Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
Dim wordApp As Object, wordDoc As Object
Dim strFullFileName$
'для отладки, потом убрать
strFullFileName = "c:\Книга1.xls"
'On Error Resume Next
'создаем word
Set wordApp = CreateObject("Word.Application")
Set wordDoc = wordApp.documents.Add
wordDoc.FollowHyperlink strFullFileName
wordApp.Quit
Set wordApp = Nothing
...
Рейтинг: 0 / 0
09.05.2012, 12:42
    #37786708
Edd.Dragon
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запуск гиперссылки во вновь созданном приложении Word
Задача - запустить документ? Разве для этого надо создавать "Word.Application"?
...
Рейтинг: 0 / 0
09.05.2012, 12:49
    #37786717
Shocker.Pro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запуск гиперссылки во вновь созданном приложении Word
Edd.DragonЗадача - запустить документ? Разве для этого надо создавать "Word.Application"?полагаю, что у человека это часть какого-то кода. Но если надо запустить просто документ или ссылку, то конечно же
Код: vbnet
1.
Call ShellExecute(0, "open", "c:\книга1.xls", "", "", SW_SHOWNORMAL)


объявление
Код: vbnet
1.
2.
Public Declare Function ShellExecute Lib "shell32.dll" Alias "ShellExecuteA" (ByVal hWnd As Long, ByVal lpOperation As String, _
            ByVal lpFile As String, ByVal lpParameters As String, ByVal lpDirectory As String, ByVal nShowCmd As Long) As Long
...
Рейтинг: 0 / 0
09.05.2012, 13:14
    #37786755
Dan-K
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запуск гиперссылки во вновь созданном приложении Word
Очень большого кода..)))

пытаюсь понять - как работает FollowHyperlink при наличии двух или более экземпляпров приложения excel.

как осуществляется выбор - в каком приложении открывать файл ?

Сейчас попробую PID-ы приложений считать...
...
Рейтинг: 0 / 0
09.05.2012, 13:26
    #37786771
Shocker.Pro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запуск гиперссылки во вновь созданном приложении Word
Если нужно открыть в существующем экземпляре экселя, можно получить его с помощью GetObject....
...
Рейтинг: 0 / 0
09.05.2012, 13:43
    #37786796
Dan-K
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запуск гиперссылки во вновь созданном приложении Word
Мой существующий файл Excel - невидымый, запароленный, зашифрованный... и вообще сидит в exe-шнике и требует под себя отдельное приложение. И открывая другой файл Excel, я должен открыть его ни в коем случае не в своем экземпляре Excel, а во внешнем...

Попробовал проверить:

Получил для каждого открытого приложения Excel идентификационный номер процесса PID

Код: vbnet
1.
2.
Dim PID&
PID = GetCurrentProcessId



При наличии 2 и более экземпляров Excel- для срабатывания гиперссылки из Word (естественно при отсутствии в них открытого файла совпадающего по пути с открываемым) - выбирается экземпляр с самым маленьким PID...

Как же заставить FollowHyperlink сработать для другого окна?
...
Рейтинг: 0 / 0
09.05.2012, 13:54
    #37786805
Edd.Dragon
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запуск гиперссылки во вновь созданном приложении Word
Dan-Kкак осуществляется выбор - в каком приложении открывать файл ?

Ну если ты понял из вышеприведенного кода - выбор осущетсвляется только тобой.
...
Рейтинг: 0 / 0
09.05.2012, 14:08
    #37786820
Shocker.Pro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запуск гиперссылки во вновь созданном приложении Word
Так, собственно, я пока не понял, в чем проблема.
а) Нужно открыть файл в новом, вновь созданном экземпляре экселя? Это можно сделать через CreateObject.
б) Нужно открыть файл во вполне определенном экземпляре экселя? Тогда чем определен этот экземпляр? Он запущен тобой программно? Тогда у тебя есть ссылка на этот объект.
...
Рейтинг: 0 / 0
09.05.2012, 15:48
    #37786892
Dan-K
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запуск гиперссылки во вновь созданном приложении Word
Shocker.ProТак, собственно, я пока не понял, в чем проблема.
а) Нужно открыть файл в новом, вновь созданном экземпляре экселя? Это можно сделать через CreateObject.
б) Нужно открыть файл во вполне определенном экземпляре экселя? Тогда чем определен этот экземпляр? Он запущен тобой программно? Тогда у тебя есть ссылка на этот объект.


Пользователь еще до того как начнет работать мой файл - наоткрывает кучу файлов и делает в них кучу изменений. Причем там могут быть и 1.xls и 1.xlsb и 1.xlsm...

У меня висит форма, перекрывающая весь экран. На форме кнопка-ссылка для открытия файла 1.xls.

Нажимаем кнопку, открывается файл. Но естественно не в моем приложении а в соседнем....

А пользователь наоткрывал уже штук 5 приложений и в том числе может быть открыт мой файл... а может быть и нет...

Ну активирую я програмно приложение Excel не совпадающее с моим... И через ShellExecute открою файл именно в нем...

(Кстати нигде не встречал упоминания о том, что ShellExecute для открытия файла excel выбирает именно активное окно приложения, долго думал и решил удостовериться и действительно получилось, только месяц думал как выделить окно соседнего приложения, а вот что касается FollowHyperlink - это большой вопрос )

Код: vbnet
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.
Option Explicit
Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)
Declare Function ShellExecute Lib "shell32.dll" Alias "ShellExecuteA" _
(ByVal hwnd As Long, ByVal lpOperation As String, ByVal lpFile As String, _
ByVal lpParameters As String, ByVal lpDirectory As String, ByVal nShowCmd As Long) As Long

Public PID_OPEN_FILE_1
Public strFullFileName$



Sub АКТИВИРУЕМ_ОКНО_СОСЕДНЕГО_ПРИЛОЖЕНИЯ_EXCEL_И_ОТКРЫВАЕМ_ФАЙЛ_В_НЕМ()

Dim WMI
Dim Process
Dim SQuery
Dim WShell  '
Dim Processes 'Коллекция процессов
Dim Ret
Dim PID
'On Error Resume Next
strFullFileName = "C:\1.xls"
'  //Соединяемся с WMI
If PID_OPEN_FILE_1 = Empty Then
MsgBox "попыток открытия файла с помощью данного макроса еще небыло"
Else
MsgBox "файл уже открывали"
End If
 
Set WShell = CreateObject("Wscript.Shell")
Set WMI = GetObject("winMgmts:")
  PID = GetCurrentProcessId
        'Формируем текст запроса
        SQuery = "SELECT * FROM Win32_Process  WHERE Name<>'EXPLORER.EXE'"
        'Создаем коллекцию-результат запроса
        Set Processes = WMI.ExecQuery(SQuery)
        'Цикл по всем элементам коллекции
For Each Process In Processes
 Ret = False
 If Process.Caption Like "EXCEL.EXE" And Process.processid <> PID Then
   Select Case PID_OPEN_FILE_1
   Case Empty
   '''для контроля записываем id-процесса, в котором открыли файл.
   '''при последующем открытии файла будем перебирать все id-процесса - пока не найдем нужный
     PID_OPEN_FILE_1 = Process.processid
       Ret = WShell.AppActivate(Process.processid)
         If Ret = True Then Ret = ShellExecute(0, "open", strFullFileName, 0, vbNullString, 5)
   Case Process.processid
      Ret = WShell.AppActivate(Process.processid)
           If Ret = True Then Ret = ShellExecute(0, "open", strFullFileName, 0, vbNullString, 5)
   End Select
 End If
Next
Set WMI = Nothing
Set WShell = Nothing
End Sub




Но проблема то останется...

Если файл открыт не из моей программы:
1. то я точно не знаю в каком экземпляре приложения он уже может быть открыт
2. если он открыт именно в том экземпляре приложения, которое я выделил, то при открытии вылезает сообщение о том что файл открыт и при повторном открытии будут утеряны все изменения...

Есть у меня подозрение, что попытка открыть уже открытый файл - дает какую-то ошибку ... вот если бы эту ошибку перехватить и до по появления этого окошка - отменить его появление , и просто ограничится активацией окна приложения...
...
Рейтинг: 0 / 0
09.05.2012, 16:02
    #37786903
Dan-K
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запуск гиперссылки во вновь созданном приложении Word
естественно работа макроса рассчитана на наличие ДВУХ открытых приложений Excel
...
Рейтинг: 0 / 0
Форумы / Microsoft Office [игнор отключен] [закрыт для гостей] / Запуск гиперссылки во вновь созданном приложении Word / 17 сообщений из 17, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]