Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / надо После CreateObject(Excel... сменить в неём CurDir / 5 сообщений из 5, страница 1 из 1
12.10.2004, 16:03:53
    #32734445
туплю
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
надо После CreateObject(Excel... сменить в неём CurDir
надо После CreateObject(Excel... сменить в нём (в Excel) CurDir из Аксессовского кода.

чтой-то туплю
вспомошествуйте
...
Рейтинг: 0 / 0
12.10.2004, 16:17:54
    #32734503
Тупой
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
надо После CreateObject(Excel... сменить в неём CurDir
Аллё! Помёрзли чоль все?
Очень нужно.

XL.Application.DefaultFilePath = NewPath
не подходит - не хочу менять настройки пользователей. К тому же DefaultFilePath будет влиять только на следующий сеанс екселя.
...
Рейтинг: 0 / 0
12.10.2004, 17:05:28
    #32734695
еще тупее
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
надо После CreateObject(Excel... сменить в неём CurDir
И де гуру?

пока нашел обход
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
    On Error Resume Next
    Set xlsApp = CreateObject("Excel.Application")
 '----- не меняет CurDir - приходится 2 раза открывать - лома 
Dim sDefaultFilePath As String
    sDefaultFilePath = xlsApp.DefaultFilePath
    xlsApp.DefaultFilePath = "C:\Temp"
    xlsApp.Quite
    Set xlsApp = CreateObject("Excel.Application")
 '----- 
    Set OpenXLS = xlsApp.Workbooks.Add(FileName)
    sOpenXLS = Err =  0 
    xlsApp.DefaultFilePath = sDefaultFilePath

но не кульно 2 раза создавать Excel.Application только чтобы поменять в его конечном сеансе текущую директорию. Как выполнить ChDir для сеанса екселя из сеанса аксесса?
...
Рейтинг: 0 / 0
12.10.2004, 19:01:44
    #32734979
ждём-с
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
надо После CreateObject(Excel... сменить в неём CurDir
up
...
Рейтинг: 0 / 0
13.10.2004, 13:51:15
    #32736247
2 up
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
надо После CreateObject(Excel... сменить в неём CurDir
1. итак, можно ли пробраться от объекта Application напрямую через пространство имен к "методу" VBA.ChDir библиотеки VBA безусловно "подключенной" к нашему объекту "Ёксель" (и задействовать этод "метод" имменно этим нашим объектом ("Ёксель") через некую цепочку ссылок) не ясно. Т.е. непонятно, собсно, как перейти от Ёксель к VBA (в нём). Вроде бы подходящих свойств, возвращающих подключенные библиотеки (Self) нет? Как и методов, позволяющих некоторому обьекту Application запускать ф-ии подключенных к нему библиотек?


2. Методы типа Run работают, кажется, только с функциями определенными в некотором проекте ёкселя. Передать им библиотечную функцию мне не удалось. Если кто знает топ-секрет - просьба поделиться.


3.Связываться с DDE вообще непонятно как. Если Topic:=System (собственно эксель), то строка ChDir не интерпретируется самим экселем. Надо вызвать "раздел" VBA. Можно ли это сделать (есть ли такой)? Если нет - что слать в System - не понятно. (В аксесе надо бы слать, кажется, методы DoCmd).
И + изначальная проблема (кажется не шибко разрешимая) с получением канала на конкретный ексель из множества запущенных.


4. Есть еще и ""программирование"" посыла клавиш, что в нашем случае выглядит примерно так (из под самого екселя):
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
Sub Макрос1()
    ChDir "C:\"
    Debug.Print CurDir

    SendKeys "C:\Temp{ENTER}{ESC}"
    With Application
        .Dialogs( 1 ).Show
    End With
    Debug.Print CurDir
End Sub
и, вроде бы, устойчиво срабатывает (если директория есть)
Но вызывая из аксесса некий аналог указанной процедуры натыкаемся на то, что диалог может и не получить (всех) посланных в него клавиш (что вполне отвечает этой манере "программирования"). Несколько спасает такой трюк (приписывание пробелов в начале отсылаемой строки - благо диалог ее трямкает сам).:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
    With Application
        aV = .Visible
        .Visible = True
        sCmd = String( 10 , " ") & sCmd & "{ENTER}{ESC}"
        Set vD = .Dialogs( 1 )
        SendKeys sCmd, False
        vD.Show
        .Visible = aV
(диалог моргает (и получает клавиши) даже без .Visible = True, но так надежнее)

но это не есть карошо:
ибо обеспечить на все 100 закрытие диалога при "пролете" строки (а именно {ESC}) "мимо тазика" никак не возможно. Пусть даже я промахнусь с посылом пути (и ошибку отслежу), но открытый диалог (и сам эксель), который пользователь не вызывал, да + "подвисший" в ожидании закрытия диалога аксесс, вызовет у юзера легкое замешательство. (И это не говоря о неизбежном вздрагивании, которое будет производить мелькание диалога при "штатной работе" такой ф-ии)




вот и думай, куды крестьянину поддаться.
колитесь, гуру, какие еще есть лазейки?
...
Рейтинг: 0 / 0
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / надо После CreateObject(Excel... сменить в неём CurDir / 5 сообщений из 5, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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