Новости:

К первому сообщению темы должен быть прикреплен файл примера в формате xls*.
Приложив пример, Вы избавите себя и других от вопросов типа "А какой критерий?", "А куда выводить результат?", "А сколько строк?" и все тех же просьб выложить файл. Рисовать за Вас Ваши же таблички с заданиями, а затем и решение к ним, никто желанием не горит. Да и, как показывает практика, в большинстве случаев без файла решения не найти.

Главное меню

Редактирование, поиск и другое через макрос

Автор d7d1cd, 29.11.2013, 20:59

« назад - далее »

d7d1cd

Добрый вечер, уважаемые знатоки Excel и VBA. Есть на моей работе, так сказать рутинная работа. Хочу эту рутину немного автоматизировать. Рутина заключается в том, что заполняя один файл Excel, иногда необходимо брать данные из нескольких других файлов Excel, проводить над ними определенное колдовство и результат записывать в первый файл. Причем этот первый файл могут одновременно редактировать несколько человек (каждый заполняет свои данные). Все файлы лежат на сервере и доступны по локальной сети. Кроме того, первый файл сохранен с возможностью одновременной работы с ним нескольким пользователям.
Моя идея состоит в следующем. Я создаю еще один файл Excel. При его открытии будет запускаться форма. При закрытии формы будет закрываться и файл. По сути это будет программа для работы с описанными файлами.

Сейчас у меня пока один вопрос. Я в программе содержимое файлов на сервере планирую хранить в массивах. Когда данные расположены в книге, в которую встроен макрос, то заполнение массива понятно как сделать. А как заполнить массивы данными в моем случае? Ведь данный находятся в другом файле, да и еще файл лежит на сервере...

d7d1cd

Открыть и получить данные смог. Вот так:
Dim Book As Workbook
Dim Arr As Variant
Set Book = Application.Workbooks.Open("\\Server\Documents\Data.xls")
Arr = Book.Sheets("Data").Range("A1:X2000").Value
Book.Close


Но во время выполнения этого кода видно, что открывается файл. Возможно ли сделать это как то скрыто?

nilem

попробуйте так:
Dim Arr As Variant
Application.ScreenUpdating = False
With Workbooks.Open("\\Server\Documents\Data.xls")
    Arr = .Sheets("Data").Range("A1:X2000").Value
    .Close 0
End With

''или такой вариант
'With GetObject("\\Server\Documents\Data.xls")
'    Arr = .Sheets("Data").Range("A1:X2000").Value
'    .Close 0
'End With
Application.ScreenUpdating = True

d7d1cd

"Или такой вариант" работает как надо. Спасибо!