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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 23.07.2009, 10:50   #31
SAS888
Старожил
 
Аватар для SAS888
 
Регистрация: 05.12.2007
Сообщений: 4,180
По умолчанию

Если я правильно понимаю, то задача сводится к тому, чтобы во вновь открываемых файлах разрывать (если такие есть) связи с другими файлами и из них брать значения.
Если так, то можно поступить проще. Файлы не открывать. Во-первых, быстрее, во-вторых, не будет выскакивать запрос на обновление связей, который возможно отключить лишь в самом файле со связями. Из файла с макросом это сделать невозможно.
Объясните подробно, что из каких файлов куда вставлять. Т.е. ту часть кода, в которой открываются файлы и копируются значения.
Можно в итоговом файле макросом прописывать ссылки на файл-источник, который не нужно открывать и который может содержать даже "битые" ссылки. А получив по созданной ссылке значение, в ячейке удалить саму ссылку, а значение оставить.
Не экономьте слова. Чем подробнее опишите задачу, тем быстрее и точнее получите ответ.
Конкретно: Из каких файлов (имена файлов), каких листов (имена листов), каких ячеек (строки, столбцы) брать данные, и, соответственно, куда их вставлять.
Можно, конечно, попробовать самостоятельно "вытащить" ответы на эти вопросы из Вашего кода, но, во избежании недоразумений, лучше поясните отдельно.
Чем шире угол зрения, тем он тупее.
SAS888 вне форума Ответить с цитированием
Старый 23.07.2009, 16:28   #32
mephist
Форумчанин
 
Регистрация: 01.05.2009
Сообщений: 200
По умолчанию

В массиве asFileNаmes хранятся имена файлов. Все файлы почти одинаковые (в них одинаковые таблицы, но в этих таблицах заполнены разные столбцы).
Я хочу макросом открывать эти файлы(например hq.xlsx), обрывать все связи (чтобы не было проблем), затем создать ссылки в главном на соответсвующие ячейки
(Ячейки E9:E11 c листа 8.1 главного файла будут ссылаться на ячейки Е9:Е11 с листа "8.1" файла hq,
Ячейки F9:F11 c листа 8.1 главного файла будут ссылаться на ячейки F9:F11 с листа "8.1" файла sz
Ячейки G9:G11 c листа 8.1 главного файла будут ссылаться на ячейки G9:G11 с листа "8.1" файла sd и т.д.)
Сейчас я еще использую копирование ячеек поэтому приходится открывать файлы.
Затем закрываю файл исходник(желательно без изменений) и любуюсь своим главным файлом.
Подскажите пожалуйста, как мне обрубить связи!!! Так как я описывал свое понимание чуть выше, не получается.
mephist вне форума Ответить с цитированием
Старый 24.07.2009, 06:50   #33
SAS888
Старожил
 
Аватар для SAS888
 
Регистрация: 05.12.2007
Сообщений: 4,180
По умолчанию

Цитата:
Подскажите пожалуйста, как мне обрубить связи!!! Так как я описывал свое понимание чуть выше, не получается.
Я уже отвечал, что обрубить связи можно, но для этого сначала файл нужно открыть. А при открытии выскочит запрос на обновление связей. Чтобы этого избежать, нужно предварительно открыть каждый файл, изменить установку запроса на обновление связей ("Не спрашивать и не обновлять") и сохранить файл с этой установкой. Что есть очень не хорошо.

Предлагаю все-таки не открывать файлы-источники.
В следующем примере в диапазоне "E9:M11" формируются ссылки на соответствующие ячейки закрытых файлов, объявленных в массиве, которые находятся в той же папке, что и файл с этим макросом. Т.е. из первого файла в массиве - "E9:E11", из второго - "F9:F11" и т.д. После того, как по ссылкам получаем значения, ссылки удаляются (значения остаются).
Остальную часть Вашего кода я не рассматривал.
Код:
Sub Main()
    Dim i As Integer, j As Integer: Application.ScreenUpdating = False
    asFileNames = Array("hq.xlsx", "sz.xlsx", "sd.xlsx", "mk.xlsx", "mp.xlsx", "mc.xlsx", "ug.xlsx", "mn.xlsx", "mh.xlsx")
    j = 5 'Номер начального столбца ("E")
    With ThisWorkbook.Sheets("8.1")
        For i = LBound(asFileNames) To UBound(asFileNames)
            .Cells(9, j).FormulaR1C1 = "=[" & asFileNames(i) & "]8.1!RC"
            .Cells(9, j).AutoFill Destination:=.Range(.Cells(9, j), .Cells(11, j)), Type:=xlFillDefault
            j = j + 1 'Следующий файл - следующий столбец
        Next
        .[E9:M11].Value = .[E9:M11].Value 'Удаляем ссылки, оставляя значения
    End With
End Sub
P.S. Работоспособность кода не проверял, ибо у меня нет исходных файлов, а создавать их самостоятельно не буду. Пожалуйста, проверьте сами.
Чем шире угол зрения, тем он тупее.
SAS888 вне форума Ответить с цитированием
Ответ


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

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Программа для сбора (с инет-порталов) и анализа статистических данных. Гаур-Мяур Помощь студентам 5 03.04.2009 15:49
Макрос в Excel Dartchuwak Microsoft Office Excel 1 11.01.2009 21:50
Помогите! Глючит Excel Pithon Microsoft Office Excel 8 20.02.2008 07:47
Не работает Excel глючит по страшному? boombox Microsoft Office Excel 2 22.11.2007 12:16