Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Microsoft Office и VBA программирование > Microsoft Office Excel
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Результаты опроса: степень возможности VB для этой задачи
невозможно 1 25.00%
сложно 3 75.00%
пустяки 0 0%
я готов помочь 0 0%
Голосовавшие: 4. Вы ещё не голосовали в этом опросе

Ответ
 
Опции темы Поиск в этой теме
Старый 27.02.2009, 23:21   #11
RussellMur
 
Регистрация: 19.02.2009
Сообщений: 8
По умолчанию

Осталось только открыть уже в открытом Excel'е книгу c:/temp/file.xls
никто не знает как лучше?

Последний раз редактировалось RussellMur; 28.02.2009 в 16:15.
RussellMur вне форума Ответить с цитированием
Старый 28.02.2009, 22:59   #12
EducatedFool
Программист VBA
СуперМодератор
 
Аватар для EducatedFool
 
Регистрация: 13.07.2008
Сообщений: 6,856
По умолчанию

А что тут сложного?

Workbooks.Open "c:\temp\file.xls"
EducatedFool вне форума Ответить с цитированием
Старый 01.03.2009, 00:57   #13
RussellMur
 
Регистрация: 19.02.2009
Сообщений: 8
По умолчанию

Цитата:
Сообщение от EducatedFool Посмотреть сообщение
А что тут сложного?

Workbooks.Open "c:\temp\file.xls"
Я думаю вы имели ввиду VBA
поясню: процесс Excel открыт программой извне. в нём одна пустая Книга1 без макросов каких бы то ни было...
необходимо программно открыть ИМЕННО в ЭТОМ процессе файл "c:\temp\file.xls"
(посредством VB6 скомпилированного EXE-файла например)
RussellMur вне форума Ответить с цитированием
Старый 01.03.2009, 02:07   #14
EducatedFool
Программист VBA
СуперМодератор
 
Аватар для EducatedFool
 
Регистрация: 13.07.2008
Сообщений: 6,856
По умолчанию

Ну тогда так: (вставьте этот код в VB)

Код:
Sub main()
    Path = "C:\Documents and Settings\Игорь\Рабочий стол\Книга555.xls"
    AppActivate "Microsoft Excel", True    ' активируем приложение
    DoEvents: DoEvents: DoEvents: DoEvents: SendKeys "^o"    ' команда "Открыть"
    For i = 1 To Len(Path)    ' посылаем имя файла по одной букве (через паузу)
        DoEvents: DoEvents: DoEvents: DoEvents: SendKeys Mid$(Path, i, 1)
    Next
    DoEvents: DoEvents: DoEvents: DoEvents: SendKeys "~"    ' посылаем Enter
End Sub
Проверял на своём компе - всё отлично работает.
Чем не вариант?

PS: Не забудьте отключить PuntoSwitcher (и другие перехватчики клавиатуры), если таковые имеются.
Предварительно не забудьте проверить, что файл с таким именем существует.

Последний раз редактировалось EducatedFool; 01.03.2009 в 02:16.
EducatedFool вне форума Ответить с цитированием
Старый 09.03.2009, 03:25   #15
RussellMur
 
Регистрация: 19.02.2009
Сообщений: 8
Лампочка

Цитата:
Сообщение от EducatedFool Посмотреть сообщение
Проверял на своём компе - всё отлично работает.
Чем не вариант?
Спасибо за участие. попробовал, но как-то не очень понравилось.
Сделал так:

Код:
Private Declare Function FindWindow Lib "user32" Alias _
        "FindWindowA" (ByVal lpClassName As String, _
        ByVal lpWindowName As String) As Long
Declare Function OpenIcon Lib "user32" _
                (ByVal hWnd As Long) As Long
Declare Function WindowFromPoint Lib "user32" _
                (ByVal xPoint As Long, ByVal yPoint As Long) As Long
Private Declare Function SendMessage Lib "user32" _
                Alias "SendMessageA" (ByVal hWnd As Long, _
                ByVal wMsg As Long, ByVal wParam As Long, lParam As Any) As Long
Private Declare Function PostMessage Lib "user32" _
                Alias "PostMessageA" _
                (ByVal hWnd As Long, _
                ByVal wMsg As Long, _
                ByVal wParam As Long, _
                lParam As Long) As Long
Private Declare Function FindWindowEx Lib "user32" _
                Alias "FindWindowExA" (ByVal hWnd1 As Long, _
                ByVal hWnd2 As Long, ByVal lpsz1 As String, ByVal lpsz2 As String) As Long
Private Declare Function SetActiveWindow Lib "user32" _
                (ByVal hWnd As Long) As Long
Public Declare Sub Sleep Lib "kernel32" ( _
                ByVal dwMilliseconds As Long)
Const CB_SETCURSEL = &H14E
Const BM_CLICK = &HF5
Const WM_SETTEXT = &HC
Const CB_SELECTSTRING = &H14D
Const WM_USER = 1024
Dim h1 As Long
Dim h2 As Long
Dim h3 As Long
Dim s As Long

Sub Main()
Call Close_ExRcv
Call Close_EXCEL
Call Run_ExRcv

On Error Resume Next
For X = 1 To 100
h1 = FindWindow(vbNullString, ByVal "ExRcv")
If h1 > 0 Then Exit For
Sleep (200)
Next
h2 = FindWindowEx(h1, 0, "ThunderRT6ComboBox", vbNullString)
h2 = FindWindowEx(h1, h2, "ThunderRT6ComboBox", vbNullString)
Call SendMessage(h2, CB_SETCURSEL, 0, 0)

h3 = FindWindowEx(h1, 0, "ThunderRT6CommandButton", "Start")
Call PostMessage(h3, BM_CLICK, 0, 0)
For X = 1 To 100
h1 = FindWindow("XLMAIN", vbNullString)
If h1 > 0 Then Exit For
Sleep (200)
Next
Sleep (1000)
    Dim MyXL As Object
    Dim ExcelWasNotRunning As Boolean
    If h1 = 0 Then
        Call Close_ExRcv
        Call Close_EXCEL
        Exit Sub
    Else
        SendMessage h1, WM_USER + 18, 0, 0
    End If

    Set MyXL = GetObject("C:\Program Files\ExRcv\promur.xls")
    MyXL.Application.Visible = True
    MyXL.Parent.Windows(1).Visible = True

    If ExcelWasNotRunning = True Then MyXL.Application.Quit
Call Close_ExRcv
Call Close_EXCEL
    Set MyXL = Nothing
        
End Sub

Sub Run_ExRcv()
On Error Resume Next
Set objClass = GetObject("winmgmts:{impersonationLevel=impersonate}!\\.\root\CIMV2:Win32_Process")
If Err.Number <> 0 Then
    WScript.Echo Err.Number & ": " & Err.Description
    WScript.Quit
End If
Set objService = GetObject("winmgmts:{impersonationLevel=impersonate}!\\.\root\CIMV2")
If Err.Number <> 0 Then
    WScript.Echo Err.Number & ": " & Err.Description
    WScript.Quit
End If
Set objStartup = objService.Get("Win32_ProcessStartup")
Set objConfig = objStartup.SpawnInstance_
objConfig.ShowWindow = 2
Res = objClass.Create("C:\Program Files\ExRcv\ExRcv.exe", Null, objConfig, PID)
If Res <> 0 Then
    WScript.Echo "Код ошибки: " & Res
End If
End Sub

Sub Close_ExRcv()
On Error Resume Next
Set objService = GetObject("winmgmts:{impersonationLevel=impersonate}!\\.\root\CIMV2")
If Err.Number <> 0 Then
    WScript.Echo Err.Number & ": " & Err.Description
    WScript.Quit
End If
For Each objProc In objService.ExecQuery("SELECT * FROM Win32_Process WHERE Name = 'ExRcv.exe'")
    objProc.Terminate
Next
End Sub

Sub Close_EXCEL()
On Error Resume Next
Set objService = GetObject("winmgmts:{impersonationLevel=impersonate}!\\.\root\CIMV2")
If Err.Number <> 0 Then
    WScript.Echo Err.Number & ": " & Err.Description
    WScript.Quit
End If
For Each objProc In objService.ExecQuery("SELECT * FROM Win32_Process WHERE Name = 'EXCEL.exe'")
    objProc.Terminate
Next

End Sub
RussellMur вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как написать БД, которая работает везде? =) FeNr1z168 БД в Delphi 6 17.02.2009 08:48
Работа с USB или COM портами АлександрСергеевич Общие вопросы Delphi 2 26.12.2008 04:48
Нужно написать софтину xakep Фриланс 6 22.09.2008 19:10
написать программу которая строила графики функций GeSerKo Помощь студентам 1 05.09.2008 21:03
считывание из СОМ(или USB) порта voron29 Общие вопросы Delphi 1 29.06.2008 13:09