Rambler's Top100
Форум: MS ACCESSVBVBA MS OfficeMS SQL server
Новые сообщения: 0000

Форум: MS ACCESS

Вопросы связанные с MS ACCESS

Обновить визитку
Участники «Online»
Все участники

 
 

Доброго времени суток, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: поле таблицы типа 'OLE объект', прямой доступ
 
 автор: АлексейЕ   (30.03.2007 в 12:09)   личное сообщение
 
 

В поле таблицы типа OLE объект хранится EXCEL-евский объект (страница), не связанная с файлом. Возможно, ли работать с этим объектом как с экселевским, не загружая в элемент формы присоединенная рамка объекта? И не сохраняя в файл?
Что-то с первого наскока не обнаружил такого способа.
Что подскажите?

  Ответить  
 
 автор: Explorer   (30.03.2007 в 12:33)   личное сообщение
 
 

>Что подскажите?

сохранять и работать как с файлом

  Ответить  
 
 автор: АлексейЕ   (30.03.2007 в 13:29)   личное сообщение
 
 

Не, я уж лучше скрыто ворму открую.

Так понимаю, других способов нет.

  Ответить  
 
 автор: АлексейЕ   (03.04.2007 в 09:50)   личное сообщение
 
 

Я уже почти согласился на вариант невидимой формы, но одно неприятное обстоятельство, заключающееся в том, что при доступе к экселевскому файлу через рамку объекта выполнить макрос экселя получается только со свойством .Action = acOLEActivate, а это приводит к отображению на экране самого Экселя, перечеркнула весь этот способ и подталкивает к решению на временных экселевских файлах.

Может, кто знает, как выполнить макрос экселя не отображая его на экране?, не хочу я объект сохранять в файл для работы с ним.

  Ответить  
 
 автор: Explorer   (03.04.2007 в 10:41)   личное сообщение
 
 

а что - сохрять как файл и отображать на экране это как-то зависит одно от другого?

  Ответить  
 
 автор: АлексейЕ   (03.04.2007 в 11:23)   личное сообщение
 
 

>а что - сохрять как файл и отображать на экране это как-то
>зависит одно от другого?

У меня есть файл Excel'я, я в нем делаю расчеты платежей.
В нем есть макрос, который следует запустить.
Оператору отображать его не хочу, ни форму, ни эксель.

Файл хранится в базе, в таблице как OLE объект.

- Сначала хотел к ниму обратиться как к объекту в таб. - нет такой возможности.
- Решил обратиться к ниму как объекту в "рамка объекта" на форме, но что бы запустить в нем макрос необходимо свойству .Action присвоить значение acOLEActivate, что приводит к отображению на экране Экселя.
- Хочется избежать сохранения объекта на диск как экселевский файл, что бы все это делать не заметно для оператара.

  Ответить  
 
 автор: Serge Gavrilov   (03.04.2007 в 12:09)   личное сообщение
 
 

Алексей, а вы можете сделать маленький примерчик, над которым можно "подумать"?


- Хочется избежать сохранения объекта на диск как экселевский файл,
чтобы все это делать не заметно для оператара.

А почему сохранение на диск будет заметно?

  Ответить  
 
 автор: АлексейЕ   (03.04.2007 в 12:31)   личное сообщение
 
 

Прошу прощения, не правильно выразил свою мысль.
строку

- Хочется избежать сохранения объекта на диск как экселевский файл, 
чтобы все это делать не заметно для оператара. 

Прошу читать так.

- Хочется все это делать не заметно для оператара, но при этом избежать 
сохранения объекта на диск как экселевский файл. 

  Ответить  
 
 автор: АлексейЕ   (03.04.2007 в 12:31)   личное сообщение
 
 

OFF
Если есть возможность править свои сообщения, то как удалить лишнее?
:)

  Ответить  
 
 автор: Explorer   (03.04.2007 в 12:39)   личное сообщение
 
 

лучшее, что можешь сделать - переписать расчет средствами Access - пихнуть в модуль и считать в запросе например

вообще не понимаю, с чего ты решил что твоя затея как ты ее излагаешь возможна - как она может быть возможна в принципе?

  Ответить  
 
 автор: АлексейЕ   (03.04.2007 в 12:55)   личное сообщение
 
 

Задача стоит в том, что бы расчет мог настраивать и изменять сам пользователь.
Пускать его в код... Можно сделать отдельный библиотечный файл, так у меня сейчас реализованно, т.к. один и тот же расчет используется в нескольких приложениях (оснавная база, калькулятор для регионов, калькулятор для поставщиков), но не всякий пользователь готов будет вносить изменения в него.
Уже сам запарился вносить в этот библиотечный файл изменения. В экселе куда быстрее.

Бросил ему изначальные параметры, запустил "Подбор параметра", получил результат.

На будущее создаю инструмент: Расчет в экселе с разрешением изменений в экселевском файле, так и без разрешений.

Почему не хочу с сохранением его на диске?
Ну просто...
Да сам не могу объяснить толком :)
Казалось, что есть неосвоенные возможности в способе "через рамку объекта".
Но надежды тают, как снег нынешним мартом.

  Ответить  
 
 автор: Explorer   (03.04.2007 в 13:16)   личное сообщение
 
 

вопрос был в том - почему вы решили что это вообще возможно?


какие такие Properties и Methods вашего OLE объекта вы проинтуитили? откуда они возьмутся и кто (application) мог бы с ними управляться (по вашей задумке)?

  Ответить  
 
 автор: АлексейЕ   (03.04.2007 в 13:25)   личное сообщение
 
 

>вопрос был в том - почему вы решили что это вообще возможно?

По причине отсутствия опыта в применении внедренных и связанных объектов OLE

  Ответить  
 
 автор: Serge Gavrilov   (03.04.2007 в 14:01)   личное сообщение
 
 


- Решил обратиться к ниму как объекту в "рамка объекта" на форме,
но что бы запустить в нем макрос необходимо свойству .Action присвоить значение
acOLEActivate, что приводит к отображению на экране Экселя.

все-таки я не совсем понимаю.
Допустим, в поле таблицы хранится Excel Workbook (поле xl).
В Workbook в стандартном модуле есть public процедура TestFunc
Я сделал для таблицы форму "frmXL" и открываю ее acHidden.

Sub test()
    Dim oXL as Object
    DoCmd.OpenForm "frmXL", , , , ,acHidden
    Set  oXL = Forms!frmXL!xl.Object
    oXL.Application.Run "TestFunc"
    [...]
End Sub

процедура выполняется

  Ответить  
 
 автор: АлексейЕ   (03.04.2007 в 15:26)   личное сообщение
38 Кб.
 
 

Вот и я, Сереж, не могу понять, почему у меня не получается.

Прикладываю файл. Если не затруднит, посмотри.
На строке
 oXL.Application.Run "IrrAc" 
кричит, не найден макрос ...

  Ответить  
 
 автор: Serge Gavrilov   (03.04.2007 в 20:53)   личное сообщение
 
 


   DoCmd.OpenForm "frmOle", , , , , acHidden
    Set oXL = Forms!frmOle!ctlOle.Object
    oXL.Worksheets(1).range("Price") = 100000
    oXL.windows(1).Visible = True                          'само приложение на экране не появляется
    oXL.Application.Run "IrrAc"
    DoCmd.Close acForm, "frmOle"
    Set oXL = Nothing

  Ответить  
 
 автор: АлексейЕ   (04.04.2007 в 11:55)   личное сообщение
 
 

Сереж, спасибо.
Ты гений.

  Ответить  
HiProg.com - Технологии программирования
Rambler's Top100 TopList