Страницы: 1
RSS
Книги и Листы. Массивы. Массив из листов закрытой книги
 
Доброго времени суток!

Можно ли переносить листы из одной книги в другую, не копируя , а в массиве. Имеется ввиду именно листами, а не значения листа. Может костыли какие есть?
Это код не работает
Это код работает (получение массивов по именованным диапазонам)
Во всех делах очень полезно периодически ставить знак вопроса к тому, что вы с давних пор считали не требующим доказательств (Бертран Рассел) ►Благодарности сюда◄
 
Что то типа такого?
Код
ThisWorkbook.Worksheets(Array("Лист1", "Лист2")).Move Workbooks("Приемник.xlsm")
Изменено: Sanja - 11.06.2019 15:47:53
Согласие есть продукт при полном непротивлении сторон
 
Sanja, не - это я знаю. Это эмуляция того, что я выделил несколько листов и через ПКМ копирую перемещаю ("Move" ведь) в другую книгу.
Хотелось бы функцией открыть книгу в фоне, забрать все листы, как объекты в массив. Закрыть книгу и уже в основной разбираться, что подходит, а что нет.
Изменено: Jack Famous - 11.06.2019 15:53:20
Во всех делах очень полезно периодически ставить знак вопроса к тому, что вы с давних пор считали не требующим доказательств (Бертран Рассел) ►Благодарности сюда◄
 
Цитата
Jack Famous написал: забрать все листы, как объекты в массив.
Не совсем массив, но попробуйте...Забирает листы (как объекты) в словарь (ключи)
Код
Sub shDict()
Dim Sh As Worksheet
Dim objSh As Object
Set objSh = CreateObject("Scripting.Dictionary")
For Each Sh In Worksheets
    iTemp = objSh(Sh)
Next
End Sub
Согласие есть продукт при полном непротивлении сторон
 
Sanja, я тоже так сначала подумал, но чёт не получается. Смотрите:
Функция получает одномерный массив с типом данных «WorkSheet»
, но результат выполнения из другого модуля уже возвращает «Objects»
, и, если добавить в цикл отображения Debug.Print x.Name, то в функции будут перечислены имена листов, но в цикле её результата уже вызовет ошибку, потому что у объекта нет такого свойства.

UPD1: Попробовал передать словарь объектом в переменную, но тоже не вышло…
UPD2: Запись в глобальную переменную не помогла…
Изменено: Jack Famous - 11.06.2019 16:59:00
Во всех делах очень полезно периодически ставить знак вопроса к тому, что вы с давних пор считали не требующим доказательств (Бертран Рассел) ►Благодарности сюда◄
 
Не пойму о чем Вы
Код
Sub shDict()
Dim Sh As Worksheet
Dim objSh As Object
Set objSh = CreateObject("Scripting.Dictionary")
For Each Sh In Worksheets
    iTemp = objSh(Sh)
Next
For Each iKey In objSh.Keys
    Debug.Print iKey.Name
Next
End Sub
Согласие есть продукт при полном непротивлении сторон
 
Цитата
Sanja: Не пойму о чем Вы
попробуйте передать массив листов в другой модуль (вызвать функцию, чтобы она вернула его)… Я же сказал, что внутри функции всё корректно, а проблемы начинаются при работе с результатом функции после работы самой функции (добавил полный вид функции в сообщение выше).

А ещё вместо iTemp = objSh(Sh) надо  iTemp = objSh.Item(Sh) — разве нет?
Изменено: Jack Famous - 11.06.2019 16:59:25
Во всех делах очень полезно периодически ставить знак вопроса к тому, что вы с давних пор считали не требующим доказательств (Бертран Рассел) ►Благодарности сюда◄
 
Цитата
Jack Famous написал: разве нет?
.Item - свойство по-умолчанию, можно опустить
Согласие есть продукт при полном непротивлении сторон
 
?
Код
Public objSh As Object

Sub shDict()
Dim Sh As Worksheet
Set objSh = CreateObject("Scripting.Dictionary")
For Each Sh In Worksheets
    iTemp = objSh(Sh)
Next
Call Test(objSh)
End Sub

Private Sub Test(mySheet)
For Each iKey In objSh.Keys
    Debug.Print iKey.Name
Next
End Sub
Изменено: Sanja - 11.06.2019 17:12:47
Согласие есть продукт при полном непротивлении сторон
 
Sanja, у меня вызов идёт из другого модуля - может в этом дело… Буду разбираться в четверг уже  :)
Хороших выходных  ;)
Во всех делах очень полезно периодически ставить знак вопроса к тому, что вы с давних пор считали не требующим доказательств (Бертран Рассел) ►Благодарности сюда◄
 
Всем привет!

По предварительным данным, "конвертация" листов в объекты происходит после закрытия книги из которой их брали. Как обойти пока не знаю…
Во всех делах очень полезно периодически ставить знак вопроса к тому, что вы с давних пор считали не требующим доказательств (Бертран Рассел) ►Благодарности сюда◄
 
Jack Famous, Вы бы уже показали эти файлы и Ваши наработки по теме. А так же опишите саму задачу, а не способ
Согласие есть продукт при полном непротивлении сторон
 
Цитата
Sanja: Вы бы уже показали эти файлы и Ваши наработки по теме
состряпал пример
Цитата
Sanja: опишите саму задачу, а не способ
а вот тут не соглашусь, потому как задача (вопрос) как раз в способе и заключается. А именно, можно ли и, если да, то как?  :)
Все коды
Во всех делах очень полезно периодически ставить знак вопроса к тому, что вы с давних пор считали не требующим доказательств (Бертран Рассел) ►Благодарности сюда◄
 
Всё же основной вопрос, кмк, не "можно ли", а "нахрена"
F1 творит чудеса
 
Максим Зеленский, ну раз уж так интересно…  :)
В последнее время часто пишу коды, в процессе выполнения которых открываются файлы и из забирается информация (именованные диапазоны и листы). Для получения именованных диапазонов написал функцию. Хочу такую же, но для получения листов. Потом объединю в одну. Больше интересен сам технический момент - можно-ли сохранять в памяти и получать из неё такие объекты, как листы?

В глобальном смысле "зачем" - мне всегда проще написать функцию/процедуру, котрая будет делать всю работу и просто вызывать её каждый раз, вместо того, чтобы нагромождать код. Итоговые процедуры получаюся малокодными, легко редактируемыми и удобочитаемыми
Изменено: Jack Famous - 13.06.2019 11:43:47
Во всех делах очень полезно периодически ставить знак вопроса к тому, что вы с давних пор считали не требующим доказательств (Бертран Рассел) ►Благодарности сюда◄
 
Доброе время суток.
Цитата
Jack Famous написал:
можно-ли сохранять в памяти и получать из неё такие объекты, как листы?
Когда книга открыта, то её листы как раз в памяти. А если книга закрыта и память освобождена, то что там? ;)
 
Андрей VG, и вам здравствуйте  :)
Цитата
Андрей VG: если книга закрыта и память освобождена, то что там?
эксперимент показывает, что там пустые объекты  :D можно как-то это обойти?
Во всех делах очень полезно периодически ставить знак вопроса к тому, что вы с давних пор считали не требующим доказательств (Бертран Рассел) ►Благодарности сюда◄
 
Цитата
Jack Famous написал:
можно как-то это обойти?
Обойти что?
«Бритва Оккама» или «Принцип Калашникова»?
 
bedvit, переформулирую, вернувшись к "истокам": Можно ли передать листы из одной в книги в другую иначе как прямым копированием? И, если да, то как?
Изменено: Jack Famous - 13.06.2019 11:54:32
Во всех делах очень полезно периодически ставить знак вопроса к тому, что вы с давних пор считали не требующим доказательств (Бертран Рассел) ►Благодарности сюда◄
 
Расшифруйте термин
Цитата
Jack Famous написал:
прямым копированием
.
Я знаю два способа копирования:
1. Через оперативку напрямую (я так понял он вам не подходит) когда открыт процесс Excel.
2. Через чтения с диска (оперативка может и здесь использоваться, но не напрямую), когда закрыт процесс Excel
Что то вроде:
-Открыть архив xlsx
-из папки Книга1.xlsx\xl\worksheets скопировать файл sheet2.xml в аналогичную папку другого файла xlsx
-поправить файл workbook.xml в нужном файле xlsx (возможно еще что-то, по памяти не вспомню).
Изменено: bedvit - 13.06.2019 12:13:07
«Бритва Оккама» или «Принцип Калашникова»?
 
bedvit, то есть, после закрытия книги-источника мы никак  не можем иметь её листы где-то в памяти?
Во всех делах очень полезно периодически ставить знак вопроса к тому, что вы с давних пор считали не требующим доказательств (Бертран Рассел) ►Благодарности сюда◄
 
Можно.
Записть в память все значения, форматирования, формулы, примечия, имена и проч., проч., проч... :)

Я тоже не понимаю смысла темы.
 
Цитата
Jack Famous написал:
не можем иметь её листы где-то в памяти?
почему не можем, можем я же написал, читайте выше  - папка Книга1.xlsx\xl\worksheets файл sheet1.xml
Если бы не могли, мы бы не смогли сохранять наши изменения. Только память не оперативная, а постоянная (ПЗУ).
«Бритва Оккама» или «Принцип Калашникова»?
 
Цитата
Jack Famous написал: после закрытия книги-источника мы никак  не можем иметь её листы где-то в памяти?
Потренировался на Ваших файлах. После закрытия файла-источника листов, объект, куда они (листы) переданы как элементы очищается
Согласие есть продукт при полном непротивлении сторон
 
Sanja, аналогично. vikttur, bedvit, вас понял  :)

Всем большое спасибо!  :idea:
Во всех делах очень полезно периодически ставить знак вопроса к тому, что вы с давних пор считали не требующим доказательств (Бертран Рассел) ►Благодарности сюда◄
Страницы: 1
Наверх