Есть книга эксель 2010 с защищенными ячейками и общим доступом. Надо из этой книги копировать данные двух листов в другую книгу. У первой книги меняются имена. Вторая книга может называться статично. (PrimerForVBAIn куда копировать) В первой книге задал пароль"1" для большей схожести.
PS: Кстати надо копировать в файл который будет лежать всегда в одном и том же месте. В идеале что бы он еще и открывался этим макросом.
Здравствуйте.
Есть книга эксель 2010 с защищенными ячейками и общим доступом. Надо из этой книги копировать данные двух листов в другую книгу. У первой книги меняются имена. Вторая книга может называться статично. (PrimerForVBAIn куда копировать) В первой книге задал пароль"1" для большей схожести.
PS: Кстати надо копировать в файл который будет лежать всегда в одном и том же месте. В идеале что бы он еще и открывался этим макросом.koyaanisqatsi
Hugo, Сейчас есть один файл на 6.6 Mb в оперативке он примерно 100 метров, работа ведется по удаленному доступу. И файл могут открывать несколько юзеров. Сейчас все в одном файле. и расчеты и входящие заявки и этикетки. Хочу отпилить часть с этикетками. Для этого надо передать 2-3 листа в файлик где будут хранится этикетки. Вообще Андрей уже давно мне вангавал переход на вариант с базой данных, но у меня не хватит мозгов на данном этапе это сделать. А я уже уперся в обхем файла. Пытался внедрить в него еще деление между двумя складами файл вырос до 11 Mb в оперативе примерно 150Mb попытался открыть три раза файл сервер начал зависать. Приходится придумывать обходные маневры.
Кстати надо копировать в файл который будет лежать всегда в одном и том же месте. В идеале что бы он еще и открывался этим макросом.
Hugo, Сейчас есть один файл на 6.6 Mb в оперативке он примерно 100 метров, работа ведется по удаленному доступу. И файл могут открывать несколько юзеров. Сейчас все в одном файле. и расчеты и входящие заявки и этикетки. Хочу отпилить часть с этикетками. Для этого надо передать 2-3 листа в файлик где будут хранится этикетки. Вообще Андрей уже давно мне вангавал переход на вариант с базой данных, но у меня не хватит мозгов на данном этапе это сделать. А я уже уперся в обхем файла. Пытался внедрить в него еще деление между двумя складами файл вырос до 11 Mb в оперативе примерно 150Mb попытался открыть три раза файл сервер начал зависать. Приходится придумывать обходные маневры.
Кстати надо копировать в файл который будет лежать всегда в одном и том же месте. В идеале что бы он еще и открывался этим макросом.koyaanisqatsi
Сообщение отредактировал koyaanisqatsi - Среда, 21.01.2015, 22:52
Можно открыть этого монстра и скопировать часть листов в новый файл, его сохранить под любым именем, или просто поработать и затем убить. Можно скопировать в уже существующий - но что делать с такими же листами, если они там уже есть? Ну и в любом случае этого монстра придётся открыть - т.е.100 метров оперативки потратить придётся.
Хотя может если использовать getobject - то поменьше... Например так (подставьте свой путь): [vba]
Код
Sub tt() With GetObject("c:\Downloads\PrimerForVBA.xlsx") .Sheets(Array("заявки", "рейсы")).Copy .Close 0 End With End Sub
[/vba]
Можно открыть этого монстра и скопировать часть листов в новый файл, его сохранить под любым именем, или просто поработать и затем убить. Можно скопировать в уже существующий - но что делать с такими же листами, если они там уже есть? Ну и в любом случае этого монстра придётся открыть - т.е.100 метров оперативки потратить придётся.
Хотя может если использовать getobject - то поменьше... Например так (подставьте свой путь): [vba]
Код
Sub tt() With GetObject("c:\Downloads\PrimerForVBA.xlsx") .Sheets(Array("заявки", "рейсы")).Copy .Close 0 End With End Sub
Sub SaveAsShared() 'разрешить общий доступ Application.DisplayAlerts = False With ActiveWorkbook .SaveAs Filename:=.FullName, AccessMode:=xlShared End With Application.DisplayAlerts = True End Sub
Sub RestoreAsNotShared() 'убрать общий доступ Application.DisplayAlerts = False With ActiveWorkbook If .MultiUserEditing Then .ExclusiveAccess End With Application.DisplayAlerts = True End Sub
Sub ClearJournal() ' очистить журнал Application.DisplayAlerts = False With ActiveWorkbook If .MultiUserEditing Then .ExclusiveAccess .SaveAs Filename:=.FullName .SaveAs Filename:=.FullName, AccessMode:=xlShared End With Application.DisplayAlerts = True End Sub
[/vba]
Фиттнес для общего доступа [vba]
Код
Sub SaveAsShared() 'разрешить общий доступ Application.DisplayAlerts = False With ActiveWorkbook .SaveAs Filename:=.FullName, AccessMode:=xlShared End With Application.DisplayAlerts = True End Sub
Sub RestoreAsNotShared() 'убрать общий доступ Application.DisplayAlerts = False With ActiveWorkbook If .MultiUserEditing Then .ExclusiveAccess End With Application.DisplayAlerts = True End Sub
Sub ClearJournal() ' очистить журнал Application.DisplayAlerts = False With ActiveWorkbook If .MultiUserEditing Then .ExclusiveAccess .SaveAs Filename:=.FullName .SaveAs Filename:=.FullName, AccessMode:=xlShared End With Application.DisplayAlerts = True End Sub
Hugo, С первым файлом идет постоянная работа а файл 2 в который я захочу перенести этикетки будет открыватся в случае необходимости когда уже вся основная работа завершена. Так что проблем нет с открытием первого файла, он и так почти всегда открыт. более того на моем компе даже три таких может быть открыто. А по поводу вопроса "но что делать с такими же листами". Просто если в обоих листах общий доступ то создать новый лист нельзя. Прийдется копировать в уже существующий. Поэтому я создал лист с таким же именем. Более того во втором файле будет много формул которые ссылаются на эти листы. Если не будет таких листов формулы испортятся. Почему-то эксель не умет сохранять формулы на несуществующие листы. ( Я конечно извиняюсь, но вы не очень внимательно прочитали что я написал " With GetObject("c:\Downloads\PrimerForVBA.xlsx")" это работать не будет. Так как первый файл всегда называется по разному. У второго файла можно задать статическое имя. Поэтому я и хочу не забрать данные а отдать.
RAN, А зачем мне убирать и разрешать общий доступ ? Я же не хотел проводить действия с первым файлом. Хотел только из него выгрузить данные двух или трех страниц. В файл который будет всегда называться одинаково и лежать в одном и том же месте. Если убрать общий доступ у файла который открыт на нескольких компьютерахх а потом разрешить то на тех компьютерах возникнет проблема с сохранением файла. И им выдаст ошибку о разрыве связи файлом.
Hugo, С первым файлом идет постоянная работа а файл 2 в который я захочу перенести этикетки будет открыватся в случае необходимости когда уже вся основная работа завершена. Так что проблем нет с открытием первого файла, он и так почти всегда открыт. более того на моем компе даже три таких может быть открыто. А по поводу вопроса "но что делать с такими же листами". Просто если в обоих листах общий доступ то создать новый лист нельзя. Прийдется копировать в уже существующий. Поэтому я создал лист с таким же именем. Более того во втором файле будет много формул которые ссылаются на эти листы. Если не будет таких листов формулы испортятся. Почему-то эксель не умет сохранять формулы на несуществующие листы. ( Я конечно извиняюсь, но вы не очень внимательно прочитали что я написал " With GetObject("c:\Downloads\PrimerForVBA.xlsx")" это работать не будет. Так как первый файл всегда называется по разному. У второго файла можно задать статическое имя. Поэтому я и хочу не забрать данные а отдать.
RAN, А зачем мне убирать и разрешать общий доступ ? Я же не хотел проводить действия с первым файлом. Хотел только из него выгрузить данные двух или трех страниц. В файл который будет всегда называться одинаково и лежать в одном и том же месте. Если убрать общий доступ у файла который открыт на нескольких компьютерахх а потом разрешить то на тех компьютерах возникнет проблема с сохранением файла. И им выдаст ошибку о разрыве связи файлом.koyaanisqatsi
Сообщение отредактировал koyaanisqatsi - Четверг, 22.01.2015, 07:32
Почему-то эксель не умет сохранять формулы на несуществующие листы
Может, если использовать ДВССЫЛ(). Например, ДВССЫЛ("'Несуществующий лист'!A1"). Только ДВССЫЛ() не умеет работать с закрытыми книгами, емнип.JayBhagavan
Языком ты или построишь жизнь,или разрушишь ее до основания.Думайте что говорите.(с)А.Хакимов
RAN, не очень понял шутки ? Есть какая-то метода рабочая по уменьшению объема эксель файлов ? Если вы о том что история хранящаяся внутри файла обнуляется после того как дать и снять общий доступ. То это действие и так происходит каждый раз при копировании этого файла на новую дату. худеет файл но не значительно. Там естественно большой объем формул а не данных. Все данные с которыми надо работать впринципе уже приведены в тестовом примере тут. И как можно заметить их весьма не много. А вот формул которые выдают тот или иной результат просто тьма. Вот пытаюсь немного разобраться/оптимизировать.
А что насчет копирования листов? все же тема была создана именно для этого. Буду тогда стараться искать уже готовые решения в интеренет. Единственно когда я в прошлый раз пытался использовать уже готовый чей-то макрос получилось что возникали ошибки(
RAN, не очень понял шутки ? Есть какая-то метода рабочая по уменьшению объема эксель файлов ? Если вы о том что история хранящаяся внутри файла обнуляется после того как дать и снять общий доступ. То это действие и так происходит каждый раз при копировании этого файла на новую дату. худеет файл но не значительно. Там естественно большой объем формул а не данных. Все данные с которыми надо работать впринципе уже приведены в тестовом примере тут. И как можно заметить их весьма не много. А вот формул которые выдают тот или иной результат просто тьма. Вот пытаюсь немного разобраться/оптимизировать.
А что насчет копирования листов? все же тема была создана именно для этого. Буду тогда стараться искать уже готовые решения в интеренет. Единственно когда я в прошлый раз пытался использовать уже готовый чей-то макрос получилось что возникали ошибки(koyaanisqatsi
Сообщение отредактировал koyaanisqatsi - Четверг, 22.01.2015, 13:25
Hugo, переделал ваше предложение под свой вариант получился такой код [vba]
Код
Sub tt() With GetObject("d:\ЭтикеткиРазвесы.xlsm") .Sheets(Array("заявки", "рейсы вторник")).Copy .Close 0 End With End Sub
[/vba]
что делает этот макрос ? он открывает файл под именем ЭтикеткиРазвесы.xlsm и копирует от туда два листа в новую книгу. А мне надо чтобы из текущей книги попадали два листа в закрытую. Чтобы я мог из открытого файла нажать кнопочку которая автоматом откроет файл этикеток и загрузит туда данные из текущего файла.
Hugo, переделал ваше предложение под свой вариант получился такой код [vba]
Код
Sub tt() With GetObject("d:\ЭтикеткиРазвесы.xlsm") .Sheets(Array("заявки", "рейсы вторник")).Copy .Close 0 End With End Sub
[/vba]
что делает этот макрос ? он открывает файл под именем ЭтикеткиРазвесы.xlsm и копирует от туда два листа в новую книгу. А мне надо чтобы из текущей книги попадали два листа в закрытую. Чтобы я мог из открытого файла нажать кнопочку которая автоматом откроет файл этикеток и загрузит туда данные из текущего файла.koyaanisqatsi
Всем спасибо кто хотел помочь. Александр Субботин Написал такой макрос. Работает. Третий вариант под мои условия. В принципе там все с комментариями в познавательных целях для новичков весьма полезно может быть. Макрос для копирования листов из книги в книгу. Думаю тема закрыта.
Всем спасибо кто хотел помочь. Александр Субботин Написал такой макрос. Работает. Третий вариант под мои условия. В принципе там все с комментариями в познавательных целях для новичков весьма полезно может быть. Макрос для копирования листов из книги в книгу. Думаю тема закрыта.koyaanisqatsi
Sub tt() With GetObject("C:\Книга2.xlsx") Windows(.Name).Visible = True ThisWorkbook.Sheets(Array("заявки", "рейсы вторник")).Copy Before:=.Sheets(1) .Save .Close 0 End With End Sub
[/vba] На этих листах не должно быть умных таблиц.
Вертаю. [vba]
Код
Sub tt() With GetObject("C:\Книга2.xlsx") Windows(.Name).Visible = True ThisWorkbook.Sheets(Array("заявки", "рейсы вторник")).Copy Before:=.Sheets(1) .Save .Close 0 End With End Sub
[/vba] На этих листах не должно быть умных таблиц.RAN