Домашняя страница Undo Do New Save Карта сайта Обратная связь Поиск по форуму
МИР MS EXCEL - Гость.xls

Вход

Регистрация

Напомнить пароль

 

= Мир MS Excel/Помещение массива из закрытой книги Эксель в ячейку открытой - Мир MS Excel

Регистрация · Логин: · Пароль: · · Забыли пароль?
  • Страница 1 из 1
  • 1
Модератор форума: _Boroda_, Manyasha, SLAVICK, китин  
Мир MS Excel » Вопросы и решения » Вопросы по VBA » Помещение массива из закрытой книги Эксель в ячейку открытой (Макросы/Sub)
Помещение массива из закрытой книги Эксель в ячейку открытой
t330 Дата: Среда, 25.12.2019, 17:45 | Сообщение № 1
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 116
Репутация: 0 ±
Замечаний: 0% ±

Excel 2016
Всем привет.

Помогите пожалуйста понять, как работает помещение массива из закрытой книги Экселя в ячейку открытой книги в функции ToArr2 и строке номер 10 в коде ниже:

Во вложении архив с файлами. Рабочий макрос находится в Свод.хls
Сам макрос собирает данные со всех остальных файлов папке из диаппазона AS9:EK17 , суммирует их и помещает в файл Свод.xls в тот же самый диаппазон AS9:EK17 ...

На разных форумах видел, что для помещения массива из закрытого файла эксель в ячейку открытого файла эксель , нужно обязательно открыть (в коде) эти "закрытые файлы", взять данные, потом закрыть.

А в коде , который представлен ниже, вся работа сделана как -то красиво и коротко , с использованием строки 10 и функции ToArr2 .
Непонятно? как работает функци ToArr2? Зачем в ней просто arr2 приравнивается к ref ?

Спасибо!

[vba]
Код


'---------------------------------------------------------------------------------------
' Module    : Module1
' Author    : Íèêîëàé (nilem), lng0967@mail.ru
' Date      : 12.12.2010
' Purpose   : http://www.programmersforum.ru/showthread.php?t=126381
'---------------------------------------------------------------------------------------

Option Explicit
Dim arr2() As Variant  ' объявили массив для записи в него данных из закрытых файлов Эксель из диапазона AS9:EK17

Sub GetValue2()
Dim f As String, i As Long, j As Byte
Dim x(1 To 9, 1 To 97)  ' объявили массив куда будем записывать суммы ячеек из всех закрытых файлов из диаппазонов AS9:EK17
Application.ScreenUpdating = False

f = Dir(ThisWorkbook.Path & "\" & "*.xls*", vbNormal)  '  сюда пишем путь к файлам эксель

' циклом перебираем все закрытые файлы эксель в папке, кроме текущего открытого файла, то есть кроме файла Свод.хls
Do While f <> ""   
    If f <> ThisWorkbook.Name Then
10        [a1].Formula = "=ToArr2('" & ThisWorkbook.Path & "\[" & f & "]P-2.1'!AS9:EK17)"  ' сюда помещаем все данные из закрытой книги эксель из диппазона AS9:EK17

' циклом заполняем массив x(i,j) суммами или текстом из ячеек AS9:EK17 закрытых файлов , то есть из массива arr2

        For i = 1 To 9
            For j = 1 To 97 Step 16
                If IsNumeric(arr2(i, j)) Then
                    x(i, j) = x(i, j) + arr2(i, j)
         
                Else
                    x(i, j) = arr2(i, j)
                End If
            Next j
        Next i
    End If: f = Dir()  '  переходим к следующему файлу в папке

Loop

Range("AS9:EK17").Value = x  ' заполняем данными массива x  диппазон AS9:EK17 в файле Свод.xls
[a1].Value = "" ' обнуляем значение ячейки a1 в активном листе.
Application.ScreenUpdating = True
End Sub

' ZVI:2010-09-16 http://www.planetaexcel.ru/forum.php?thread_id=19264
Private Function ToArr2(ref)   '   функция помещающая в массив arr2  значения из диаппазона AS9:EK17 закрытой книги Эксель , находящейся по адресу: ThisWorkbook.Path & "\[" & f & "]P-2.1
    arr2 = ref
    
End Function

Sub ert()
If ActiveSheet.Name = "Ð-2.1" Then MsgBox "ok"
End Sub

[/vba]
К сообщению приложен файл: 0754801.zip(46.8 Kb)
 
Ответить
СообщениеВсем привет.

Помогите пожалуйста понять, как работает помещение массива из закрытой книги Экселя в ячейку открытой книги в функции ToArr2 и строке номер 10 в коде ниже:

Во вложении архив с файлами. Рабочий макрос находится в Свод.хls
Сам макрос собирает данные со всех остальных файлов папке из диаппазона AS9:EK17 , суммирует их и помещает в файл Свод.xls в тот же самый диаппазон AS9:EK17 ...

На разных форумах видел, что для помещения массива из закрытого файла эксель в ячейку открытого файла эксель , нужно обязательно открыть (в коде) эти "закрытые файлы", взять данные, потом закрыть.

А в коде , который представлен ниже, вся работа сделана как -то красиво и коротко , с использованием строки 10 и функции ToArr2 .
Непонятно? как работает функци ToArr2? Зачем в ней просто arr2 приравнивается к ref ?

Спасибо!

[vba]
Код


'---------------------------------------------------------------------------------------
' Module    : Module1
' Author    : Íèêîëàé (nilem), lng0967@mail.ru
' Date      : 12.12.2010
' Purpose   : http://www.programmersforum.ru/showthread.php?t=126381
'---------------------------------------------------------------------------------------

Option Explicit
Dim arr2() As Variant  ' объявили массив для записи в него данных из закрытых файлов Эксель из диапазона AS9:EK17

Sub GetValue2()
Dim f As String, i As Long, j As Byte
Dim x(1 To 9, 1 To 97)  ' объявили массив куда будем записывать суммы ячеек из всех закрытых файлов из диаппазонов AS9:EK17
Application.ScreenUpdating = False

f = Dir(ThisWorkbook.Path & "\" & "*.xls*", vbNormal)  '  сюда пишем путь к файлам эксель

' циклом перебираем все закрытые файлы эксель в папке, кроме текущего открытого файла, то есть кроме файла Свод.хls
Do While f <> ""   
    If f <> ThisWorkbook.Name Then
10        [a1].Formula = "=ToArr2('" & ThisWorkbook.Path & "\[" & f & "]P-2.1'!AS9:EK17)"  ' сюда помещаем все данные из закрытой книги эксель из диппазона AS9:EK17

' циклом заполняем массив x(i,j) суммами или текстом из ячеек AS9:EK17 закрытых файлов , то есть из массива arr2

        For i = 1 To 9
            For j = 1 To 97 Step 16
                If IsNumeric(arr2(i, j)) Then
                    x(i, j) = x(i, j) + arr2(i, j)
         
                Else
                    x(i, j) = arr2(i, j)
                End If
            Next j
        Next i
    End If: f = Dir()  '  переходим к следующему файлу в папке

Loop

Range("AS9:EK17").Value = x  ' заполняем данными массива x  диппазон AS9:EK17 в файле Свод.xls
[a1].Value = "" ' обнуляем значение ячейки a1 в активном листе.
Application.ScreenUpdating = True
End Sub

' ZVI:2010-09-16 http://www.planetaexcel.ru/forum.php?thread_id=19264
Private Function ToArr2(ref)   '   функция помещающая в массив arr2  значения из диаппазона AS9:EK17 закрытой книги Эксель , находящейся по адресу: ThisWorkbook.Path & "\[" & f & "]P-2.1
    arr2 = ref
    
End Function

Sub ert()
If ActiveSheet.Name = "Ð-2.1" Then MsgBox "ok"
End Sub

[/vba]

Автор - t330
Дата добавления - 25.12.2019 в 17:45
Hugo Дата: Среда, 25.12.2019, 22:45 | Сообщение № 2
Группа: Друзья
Ранг: Участник клуба
Сообщений: 2882
Репутация: 643 ±
Замечаний: 0% ±

Затем что таким способом можно в массив получить данные закрытой книги, "не открывая" её.


excel@nxt.ru
webmoney: E265281470651 R418926282008 Z422237915069
 
Ответить
СообщениеЗатем что таким способом можно в массив получить данные закрытой книги, "не открывая" её.

Автор - Hugo
Дата добавления - 25.12.2019 в 22:45
_Boroda_ Дата: Среда, 25.12.2019, 23:08 | Сообщение № 3
Группа: Модераторы
Ранг: Местный житель
Сообщений: 15748
Репутация: 6143 ±
Замечаний: 0% ±

2003; 2007; 2010; 2013 RUS
Попробую на пальцах пояснить. Не совсем точно и грамотно пояснение, но это сознательно, для понятности жертвуем точностью :D

1. arr2 - глобальный массив, видимость во всех макросах книги

2. ref - это просто так назвали переменную в функции, это то, что в нее вовнутрь суют для обработки. В нашем случае это
[vba]
Код
'" & ThisWorkbook.Path & "\[" & f & "]P-2.1'!AS9:EK17)
[/vba] - путь ThisWorkbook.Path, имя книги f, имя листа P-2.1, диапазон AS9:EK17
Это как бы мы на листе написали формулу типа
Код
='D:\Стереть\[4080999.xlsx]Лист2'!AS9
, которая может вытянуть данные из закрытой книги (видите в коде кусок [vba]
Код
[a1].Formula
[/vba])

3. Внутри функции ToArr2 мы присваиваем массиву arr2 значения из этого диапазона

4. Потом по значению из arr2 мы заполняем массив х. И так для каждого файла. А затем выгружаем массив х на лист в файле Свод


Скажи мне, кудесник, любимец ба’гов...
Платная помощь:
Boroda_Excel@mail.ru
Яндекс-деньги: 41001632713405 | Webmoney: R289877159277; Z102172301748; E177867141995
 
Ответить
СообщениеПопробую на пальцах пояснить. Не совсем точно и грамотно пояснение, но это сознательно, для понятности жертвуем точностью :D

1. arr2 - глобальный массив, видимость во всех макросах книги

2. ref - это просто так назвали переменную в функции, это то, что в нее вовнутрь суют для обработки. В нашем случае это
[vba]
Код
'" & ThisWorkbook.Path & "\[" & f & "]P-2.1'!AS9:EK17)
[/vba] - путь ThisWorkbook.Path, имя книги f, имя листа P-2.1, диапазон AS9:EK17
Это как бы мы на листе написали формулу типа
Код
='D:\Стереть\[4080999.xlsx]Лист2'!AS9
, которая может вытянуть данные из закрытой книги (видите в коде кусок [vba]
Код
[a1].Formula
[/vba])

3. Внутри функции ToArr2 мы присваиваем массиву arr2 значения из этого диапазона

4. Потом по значению из arr2 мы заполняем массив х. И так для каждого файла. А затем выгружаем массив х на лист в файле Свод

Автор - _Boroda_
Дата добавления - 25.12.2019 в 23:08
t330 Дата: Среда, 25.12.2019, 23:19 | Сообщение № 4
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 116
Репутация: 0 ±
Замечаний: 0% ±

Excel 2016
которая может вытянуть данные из закрытой книги (видите в коде кусок
[a1].Formula

)


Спасибо! Вот эта фраза помогла допетрить:)
Вспомнил, что в экселе формулами можно вытягивать данные из закрытых книг , не открывая их!
 
Ответить
Сообщение
которая может вытянуть данные из закрытой книги (видите в коде кусок
[a1].Formula

)


Спасибо! Вот эта фраза помогла допетрить:)
Вспомнил, что в экселе формулами можно вытягивать данные из закрытых книг , не открывая их!

Автор - t330
Дата добавления - 25.12.2019 в 23:19
Мир MS Excel » Вопросы и решения » Вопросы по VBA » Помещение массива из закрытой книги Эксель в ячейку открытой (Макросы/Sub)
  • Страница 1 из 1
  • 1
Поиск:

Яндекс цитирования
© 2010-2020 · Дизайн: MichaelCH · Хостинг от uCoz · При использовании материалов сайта, ссылка на www.excelworld.ru обязательна!