Компьютерный форум
Правила
Вернуться   Компьютерный форум > Форум программистов > Программирование под Windows > Visual Basic
Перезагрузить страницу из Access вызвать макрос Excel
Ответ
 
Опции темы Опции просмотра
  (#1 (permalink)) Старый
Алек_Л Алек_Л вне форума
Member
 
Сообщений: 114
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Регистрация: 04.07.2006
По умолчанию 04.07.2006, 18:23

Добрый день.

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

Excel запускаю, открываю книгу, потом пишу
DoCmd.RunMacro Personal.xls!Макрос9_продажи_сводные
В ответ получаю, что макроса Personal не существует.
Можно было бы перегнать макрос в Access, но не очень хочется, так как
придется его в таком случае переделывать под VBA для Access.

Спасибо за внимание.
Ответить с цитированием
  (#2 (permalink)) Старый
pashulka pashulka вне форума
Member
 
Сообщений: 1,872
Сказал(а) спасибо: 2
Поблагодарили 57 раз(а) в 53 сообщениях
Регистрация: 11.03.2005
По умолчанию 04.07.2006, 19:26

Попробуйте использовать что-то вроде нижеопубликованного кода, только не забудьте предварительно установить (Tools-References) ссылку на Microsoft Excel x.x Object Library

Код:
Private Sub RunExcelMacro()
    Dim iXLApp As New Excel.Application
    With iXLApp
         iFileName$ = "Personal.xls"
         iFullName$ = .StartupPath & .PathSeparator & iFileName$
         If Dir(iFullName$) <> "" Then
            .Visible = True 'по необходимости
            .EnableEvents = False
            With .Workbooks.Open(Filename:=iFullName$, UpdateLinks:=0)
                 .Application.Run iFileName$ & "!Имя_Вашего_Макроса"
                 .Close saveChanges:=False 'True
            End With
            .EnableEvents = True
         Else
            MsgBox "В стандартной папке автозагрузки : " & vbNewLine & _
            .StartupPath & vbNewLine & "отсутствует личная книга макросов", , ""
         End If
         .Quit
    End With
End Sub
Ответить с цитированием
  (#3 (permalink)) Старый
Алек_Л Алек_Л вне форума
Member
 
Сообщений: 114
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Регистрация: 04.07.2006
По умолчанию 05.07.2006, 11:29

Спасибо, большое. Это работает!

Дальше возникает другая затыка: в Excel макрос ссылается на активную книгу, а при открытии из Access книга в Excel не видна и не активна. Подскажите, пожалуйста, что написать после
With MyXLApp
Workbooks.Open mypath чтобы книга стала активной.

Спасибо.
Ответить с цитированием
  (#4 (permalink)) Старый
pashulka pashulka вне форума
Member
 
Сообщений: 1,872
Сказал(а) спасибо: 2
Поблагодарили 57 раз(а) в 53 сообщениях
Регистрация: 11.03.2005
По умолчанию 05.07.2006, 14:21

Активация обычной книги производится с использованием метода .Activate, но личная книга макросов, например, по-умолчанию является скрытой, поэтому в этом случае используют что-то вроде :

Код:
With .Workbooks.Open(Filename:=iFullName$, UpdateLinks:=0)
     .Windows(iFileName$).Visible = True
Ответить с цитированием
  (#5 (permalink)) Старый
Алек_Л Алек_Л вне форума
Member
 
Сообщений: 114
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Регистрация: 04.07.2006
По умолчанию 05.07.2006, 14:55

Цитата:
Активация обычной книги производится с использованием метода .Activate,
Спасибо. Только мне нужно активировать именно обычную книгу. Через Access я открываю файл "ОбычнаяКнига.xls", потом ее нужно активизировать, и потом уже запустить макрос из Personal.
Подскажите, пожалуйста, как применить метод Activate в этом случае? В Excel мне понятно, как это делается, но вот в Access...

Спасибо, большое, за помощь.
Ответить с цитированием
Ads.
  (#6 (permalink)) Старый
pashulka pashulka вне форума
Member
 
Сообщений: 1,872
Сказал(а) спасибо: 2
Поблагодарили 57 раз(а) в 53 сообщениях
Регистрация: 11.03.2005
По умолчанию 05.07.2006, 15:25

Если Вы используете вышеопубликованный вариант, то Вы управляете MS Excel из MS Access, а стало быть Вы открываете свою рабочую книгу именно в MS Excel. Что касается открытия обычной рабочей книги, то после применения метода .Open она автоматически должна стать активной и если этого не происходит, то возможно мы с Вами говорим о разных вещах ... на всякий случай, посмотрите небольшой примерчик :

Код:
Private Sub OpenExcelWorkbook()
    Dim iXLApp As New Excel.Application
    With iXLApp
         iFullName$ = "C:\Мои документы\FALSE.xls"
         iFileName$ = Dir(iFullName$)
         If Dir(iFileName$) <> "" Then
            .Visible = True 'по необходимости
            .EnableEvents = False
            With .Workbooks
                 .Open Filename:=iFullName$, UpdateLinks:=0
                 .Item(iFileName$).Activate
                 '''
                 '''
                 '''
                 If Not iXLApp.ActiveWorkbook Is Nothing Then
                    .Item(iFileName$).Close saveChanges:=False 'True
                 Else
                    MsgBox "Странно, но активной книги нет ...", , ""
                 End If
            End With
            .EnableEvents = True
         Else
            MsgBox "Рабочая книга изволит отсутствовать", , ""
         End If
         .Quit
    End With
End Sub
Ответить с цитированием
  (#7 (permalink)) Старый
Алек_Л Алек_Л вне форума
Member
 
Сообщений: 114
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Регистрация: 04.07.2006
По умолчанию 05.07.2006, 16:03

Спасибо, я попробую так.

Я же делал по другому:
Код:
dim myfile = "Бабака.xls"
mypath = "c:\продажи\" & myfile
With MyXLApp
    Workbooks.Open mypath            ' В этом случае книга открыта, но ее не видно
А зачем нужны знаки $ в конце переменных (например, iFileName$)? И как объявлять эти переменные, так как они не воспринимают команду as?

Спасибо.
Ответить с цитированием
  (#8 (permalink)) Старый
pashulka pashulka вне форума
Member
 
Сообщений: 1,872
Сказал(а) спасибо: 2
Поблагодарили 57 раз(а) в 53 сообщениях
Регистрация: 11.03.2005
По умолчанию 05.07.2006, 16:26

$ - это символ описания типа String применение которого позволяет обойтись без об'явления переменных с помощью инструкции Dim …
Ответить с цитированием
Ads
Ответ

Опции темы
Опции просмотра

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Trackbacks are Вкл.
Pingbacks are Вкл.
Refbacks are Выкл.


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как создать макрос для Excel tigrenakat@mail.ru Visual Basic 0 03.02.2010 22:37
Макрос для MS Excel как реализовать Xakand Visual Basic 3 09.01.2010 18:36
Макрос Excel для новичка Vzhik Visual Basic 4 03.07.2006 23:53
Помогите найти макрос для Excel Visual Basic Visual Basic 1 07.05.2006 18:43
Как правильно вызвать Excel из JAVA IgorAnton Вопросы начинающих программистов 0 11.01.2006 10:17
макрос Excel aslan_b Visual Basic 1 29.07.2005 07:17
Запустить макрос в запущенном Excel(е)? XORXE Visual Basic 1 29.06.2005 10:44
Как запустить макрос в Access imported_Ali .NET 0 22.04.2005 00:58
Как запустить макрос Excel из C# Anonymous .NET 11 15.04.2005 16:57
VBA макрос в Excel Enix Visual Basic 2 13.04.2005 23:17
Excel + автофильтр + макрос ANдрей Visual Basic 2 16.11.2004 01:34
как из программы вызвать функцию Поиск решения в Excel Максимус Delphi 1 16.10.2004 18:03



Powered by vBulletin® Version 3.8.7
Copyright ©2000 - 2018, Jelsoft Enterprises Ltd.
Нardforum.ru - компьютерный форум и программирование, форум программистов