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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 27.10.2009, 15:19   #1
hackPNZ
Пользователь
 
Регистрация: 14.10.2009
Сообщений: 29
По умолчанию Работа с открытым файлом Excel

Доброго временени суток!

Подскажите, пожалуйста, как мне лучше поступить в следующем случае. Создаю экселевскую табличку вот таким кодом:
Код:
        
Set values = CreateObject("Excel.Application")
        fpath = ThisWorkbook.Path & "\Расчет.xls"
        values.Workbooks.Add(fpath).Activate
        With values
             ............
       End With
Вопрос, если файл открыт, как мне прибить его к объекту values? В плане, как написать проверку открыт файл или нет я знаю... Не могу никак заставить работать с помощью GetObject... Мне важно чтобы весь алгоритм в With values работал одинаково как при создании файла, так и при изменении открытого. То есть чтобы и по CreateObject и по GetObject там лежал один и тот же объект...

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

Цитата:
Создаю экселевскую табличку вот таким кодом:
Судя по ThisWorkbook.Path, этот код запускается из Excel
Тогда зачем всё так усложнять???

Цитата:
если файл открыт, как мне прибить его к объекту values?
Что это за такой объект? Зачем он?

Цитата:
Мне важно чтобы весь алгоритм в With values работал одинаково как при создании файла, так и при изменении открытого.
Какой алгоритм?
EducatedFool вне форума Ответить с цитированием
Старый 27.10.2009, 21:20   #3
hackPNZ
Пользователь
 
Регистрация: 14.10.2009
Сообщений: 29
По умолчанию

Ну скажем так, у меня есть некоторая анкета (вот как раз она This Workbook), на ее основе я заполняю шаблон расчетов в экселе(объект values) и потом договора вордовские.

Так вот в анкете написан макрос, обновляющий таблицы расчетов, он открывает расчет через CreateObject и после выполнения расчетов перезаписывает файл. Вот проблема возникает, если файл расчетов открыт в момент запуска макроса..

Я вообще недавно изучаю VBA, поэтому чет ничего культурное не придумаю как бы лучше это реализовать... В идеале надо чтобы этот макрос мог выполняться и из расчетов и при этом не комильфо тупо его копировать в макросы расчетов и подправлять там код... дублирование кода бесполезное получится....
hackPNZ вне форума Ответить с цитированием
Старый 28.10.2009, 02:13   #4
EducatedFool
Программист VBA
СуперМодератор
 
Аватар для EducatedFool
 
Регистрация: 13.07.2008
Сообщений: 6,856
По умолчанию

Цитата:
Ну скажем так, у меня есть некоторая анкета (вот как раз она This Workbook), на ее основе я заполняю шаблон расчетов в экселе(объект values) и потом договора вордовские.
Ну скажем так, я мало что понял из вышесказанного...

Одно могу заявить с уверенностью: никакие CreateObject("Excel.Application") и GetObject в коде не нужны - вполне достаточно ОДНОЙ запущенной копии приложения Excel.
EducatedFool вне форума Ответить с цитированием
Старый 28.10.2009, 10:39   #5
hackPNZ
Пользователь
 
Регистрация: 14.10.2009
Сообщений: 29
По умолчанию

То есть если книга не открыта, юзаем Open, если открыта обращаемся напрямую через Workbook(Name) и творим там что хотим?
hackPNZ вне форума Ответить с цитированием
Старый 30.10.2009, 12:28   #6
hackPNZ
Пользователь
 
Регистрация: 14.10.2009
Сообщений: 29
По умолчанию

Я решил данную проблему вот так:
Код:
    fActName = "Акт.doc"
    st = ThisWorkbook.Path & "\" & fActName

    On Error Resume Next
    Set wrd = GetObject(, "Word.Application")
    
    'проверяем открыт ли файл.
    If wrd.Documents(fActName) Is Nothing Then

        Set wrd = CreateObject("Word.Application")
        wrd.Documents.Add(st).Activate
        wrd.Visible = True
        Set wrd = wrd.ActiveDocument

    Else
        Set wrd = wrd.Documents(fActName)
    End If
    On Error GoTo
Макрос запускается из экселя и заполняет документ Акт данными.
hackPNZ вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
работа с файлом lg12 Помощь студентам 7 24.08.2009 08:33
Работа с файлом D_E_N Общие вопросы Delphi 6 17.07.2009 14:03
С++ работа с файлом. НедоВовик Помощь студентам 1 05.07.2009 18:22
Си++. работа с файлом milate Помощь студентам 0 08.06.2009 12:52
Работа с файлом в C Mishka Помощь студентам 2 22.07.2008 13:28