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

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

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

Восстановить пароль

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

Ответ
 
Опции темы Поиск в этой теме
Старый 18.10.2010, 01:41   #1
tae1980
Форумчанин
 
Регистрация: 02.02.2009
Сообщений: 844
По умолчанию Программное отрытие книги

Нужно получить из закрытой книги значение ряда ячеек и значении ряда переменных Excel (имен). Для этого открываю книгу через "Workbooks.Open". Но книга перенасыщены разного рода макросами и функциями, которые при подобном открытии начинают страшно ругаться. Пытаюсь использовать ".EnableEvents = False". Ряд функций все равно пытаются выполниться.

Вопрос: как программно открыть книгу так что бы ни чего не запускалось и не считалось? Может есть другие пути решения задачи?
С уважением, Алексей.
tae1980 вне форума Ответить с цитированием
Старый 18.10.2010, 05:55   #2
SAS888
Старожил
 
Аватар для SAS888
 
Регистрация: 05.12.2007
Сообщений: 4,180
По умолчанию

Цитата:
Нужно получить из закрытой книги значение ряда ячеек и значении ряда переменных Excel (имен)
Цитата:
как программно открыть книгу так что бы ни чего не запускалось и не считалось?
Перед открытием книги, помимо запрета обработки событий Application.EnableEvents = False, запретите автоматический пересчет формул: Application.Calculation = xlManual.

Цитата:
Может есть другие пути решения задачи?
О каких именах идет речь? Значения ячеек из листа Excel можно получить вообще не открывая книгу. С именами сложнее.
Чем шире угол зрения, тем он тупее.

Последний раз редактировалось SAS888; 18.10.2010 в 08:07.
SAS888 вне форума Ответить с цитированием
Старый 18.10.2010, 09:19   #3
tae1980
Форумчанин
 
Регистрация: 02.02.2009
Сообщений: 844
По умолчанию

Цитата:
Сообщение от SAS888 Посмотреть сообщение
Перед открытием книги, помимо запрета обработки событий Application.EnableEvents = False, запретите автоматический пересчет формул: Application.Calculation = xlManual.
Спасибо!
Цитата:
Сообщение от SAS888 Посмотреть сообщение
О каких именах идет речь? Значения ячеек из листа Excel можно получить вообще не открывая книгу. С именами сложнее.
Задача получения значений ячеек и имен для меня на данный момент равнозначны. В будущем задача сместиться к получению значений имен, так как все ключевые данные я уже перенес в имена. В ряде имен храняться непосредственно значения, а в ряде ссылки на ячейки, в последнем случае нужно получать значение ячеек.
С уважением, Алексей.
tae1980 вне форума Ответить с цитированием
Старый 18.10.2010, 09:55   #4
SAS888
Старожил
 
Аватар для SAS888
 
Регистрация: 05.12.2007
Сообщений: 4,180
По умолчанию

Если Вы сумеете свести задачу к получению значений ячеек, то книгу-источник данных открывать вообще не обязательно.
Чем шире угол зрения, тем он тупее.
SAS888 вне форума Ответить с цитированием
Старый 18.10.2010, 10:25   #5
tae1980
Форумчанин
 
Регистрация: 02.02.2009
Сообщений: 844
По умолчанию

Цитата:
Сообщение от SAS888 Посмотреть сообщение
Если Вы сумеете свести задачу к получению значений ячеек, то книгу-источник данных открывать вообще не обязательно.
К сожалению задача смещается в противоположном направлении, с именами удобнее работать чем с ячейками. Остается открывать книги по фону и вытягивать информацию из них. Что не так смертельно. Это нужно больше для технических нужд, так что запускаться будет не часто и если что можно будет подождать.
С уважением, Алексей.
tae1980 вне форума Ответить с цитированием
Старый 18.10.2010, 17:17   #6
tae1980
Форумчанин
 
Регистрация: 02.02.2009
Сообщений: 844
По умолчанию

А как скрыть открытие книги? Так что бы книга не появлялась в панели задач.
С уважением, Алексей.
tae1980 вне форума Ответить с цитированием
Старый 18.10.2010, 21:52   #7
EducatedFool
Программист VBA
СуперМодератор
 
Аватар для EducatedFool
 
Регистрация: 13.07.2008
Сообщений: 6,858
По умолчанию

Цитата:
Так что бы книга не появлялась в панели задач.
Код:
ActiveWorkbook.Windows(1).Visible = False
Вместо ActiveWorkbook поставьте ссылку на открываемую книгу.

Можно обойтись и без этой строки кода. Я обычно открываю файлы таким кодом:
Код:
Sub test()
    Dim wb As Workbook, filename As String
    filename = "C:\Documents and Settings\Admin\Рабочий стол\PatchDrupalThemes.xls"
    Set wb = GetObject(filename) ' файл открывается, но окно этого файла скрыто
    ' ...
    wb.Close False ' закрываем файл без сохранения
End Sub
EducatedFool вне форума Ответить с цитированием
Старый 27.10.2010, 14:41   #8
tae1980
Форумчанин
 
Регистрация: 02.02.2009
Сообщений: 844
По умолчанию

Цитата:
Сообщение от EducatedFool Посмотреть сообщение
Можно обойтись и без этой строки кода. Я обычно открываю файлы таким кодом:
Код:
Sub test()
    Dim wb As Workbook, filename As String
    filename = "C:\Documents and Settings\Admin\Рабочий стол\PatchDrupalThemes.xls"
    Set wb = GetObject(filename) ' файл открывается, но окно этого файла скрыто
    ' ...
    wb.Close False ' закрываем файл без сохранения
End Sub
Открываю книгу таким способ: макросы не запускаются, функции не выполняются, но в книге есть связанные данные из другой книги и выдается вопрос "обновлять ссылки или нет". Как отказаться от обновления без вывода окна.

И еще, можно ли открыть книгу в режиме только чтение? Так на всякий случай перестраховаться.
С уважением, Алексей.
tae1980 вне форума Ответить с цитированием
Старый 27.10.2010, 23:52   #9
EducatedFool
Программист VBA
СуперМодератор
 
Аватар для EducatedFool
 
Регистрация: 13.07.2008
Сообщений: 6,858
По умолчанию

Цитата:
в книге есть связанные данные из другой книги и выдается вопрос "обновлять ссылки или нет"
Попробуйте Application.AskToUpdateLinks = FALSE
Цитата:
Сообщение от Справка VBA

AskToUpdateLinks Property

True if Microsoft Excel asks the user to update links when opening files with links.
False if links are automatically updated with no dialog box.

Read/write Boolean
Цитата:
И еще, можно ли открыть книгу в режиме только чтение?
Откроется она в режиме чтение/запись, но можно тут же переключиться на режим "только чтение":
ActiveWorkbook.ChangeFileAccess Mode:=xlReadOnly

Почитайте на досуге встроенную в Excel справку по VBA - узнаете много нового, нужного и интересного...

Цитата:
Так на всякий случай перестраховаться
А зачем? Вы не доверяете собственноручно написанному коду?
Или компьютеру, который против вашей воли может захотеть сохранить файл?

Если на то пошло, так сначала делайте макросом (команда filecopy) копию своего драгоценного файла, а потом с ней и работайте.
EducatedFool вне форума Ответить с цитированием
Старый 04.11.2010, 14:57   #10
tae1980
Форумчанин
 
Регистрация: 02.02.2009
Сообщений: 844
По умолчанию

Цитата:
Сообщение от EducatedFool Посмотреть сообщение
А зачем? Вы не доверяете собственноручно написанному коду?
Или компьютеру, который против вашей воли может захотеть сохранить файл?
Если на то пошло, так сначала делайте макросом (команда filecopy) копию своего драгоценного файла, а потом с ней и работайте.
Если честно, я не доверяю себе. Могу допустить ошибку которую, пройдет через все циклы проверок. И уже после "внедрения" кода в работу наделать много бед. За всем уследить не получается (по крайне мере у меня). Подобное уже случалось. И если есть возможность предпочитаю лишний раз перестраховаться, тем более если это не требует больших затрат. Это раз.
Во вторых. Изменения в файлах данных, должны производиться операторами (или процессами) имеющих на это права. Отслеживаться и логироваться. Это правило имеет статус аксиомы. И необходимо для нахождения "крайних" в случае возникновения ошибок в работе. И предпочитаю не давать "техническим" ошибкам даже шанса на появления, а тем более ошибкам которая будет нарушать аксиомы. Это сильно упрощает программирование и значительно сокращает цикл проверок.
Кроме этого, подобный подход пропагандируется в той литературе по которой я учился. И он уже в крови. :))
С уважением, Алексей.
tae1980 вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Скопировать данные из некоторых ячеек одной книги в другие книги fcunited Microsoft Office Excel 8 09.06.2010 12:14
Программное бодключение к БД Talemir БД в Delphi 1 19.08.2009 01:20
Программное создание книги Волк Microsoft Office Excel 2 16.03.2009 07:57
снятие пароля с книги/листа из другой книги? Bezdar Microsoft Office Excel 3 25.12.2008 11:59