Компьютерный форум
Правила
Вернуться   Компьютерный форум > Форум программистов > Программирование под Windows > Visual Basic
Перезагрузить страницу Вытащить данные из Закрытых Книг
Ответ
 
Опции темы Опции просмотра
  (#1 (permalink)) Старый
Od1nz Od1nz вне форума
Новичок
 
Сообщений: 3
Сказал(а) спасибо: 3
Поблагодарили 0 раз(а) в 0 сообщениях
Регистрация: 17.10.2014
По умолчанию Вытащить данные из Закрытых Книг - 17.10.2014, 14:54

Здравствуйте, являюсь новичком в работе с Vba, но возникла необходимость решить задачу.
Нужно извлечь конкретный диапазон из всех выбранных книг, которые являются схожими, имеют лишь разные значения. Перерыл уже кучу всего. Нашел подходящий для меня пример, но не могу его доработать. Подскажите пожалуйста решение.
Есть макрос

Private Sub Main()
Dim path As String, file As String, arg As String, i As Long
Application.ScreenUpdating = False
With Application.FileDialog(msoFileDialogFolderPicker)
.Title = "Укажите рабочую папку": .Show
If .SelectedItems.Count = 0 Then Exit Sub Else path = .SelectedItems(1) & "\"
End With
Rows("2:" & Rows.Count).ClearContents: file = Dir(path & "*.xls"): i = 2
Do While file <> ""
Cells(i, 1) = ExecuteExcel4Macro("'" & path & "[" & file & "]" & "Лист1'!" & Range("H13").Range("A1").Address(, , xlR1C1))
i = i + 1: file = Dir
Loop
End Sub

Он позволяет извлекать лишь конкретные ячейки из всех файлов в папке.
Подскажите пожалуйста как с помощью него извлечь необходимый массив и вставлять этот массив в рабочую книгу, один за другим.

как пример, приложу файл, из которого необходимо извлечь массив Q10:AD209
Вложения
Тип файла: zip sample.zip (355.7 Кб, 12 просмотров)
Ответить с цитированием
  (#2 (permalink)) Старый
pashulka pashulka вне форума
Member
 
Сообщений: 1,872
Сказал(а) спасибо: 2
Поблагодарили 57 раз(а) в 53 сообщениях
Регистрация: 11.03.2005
По умолчанию 17.10.2014, 22:14

Od1nz, Если оставить в покое проверку на схожесть, а предположить, что :

- все книги, откуда нужно извлечь данные, находятся в одной папке
- в этой папке наличествуют только похожие книги
- во всех книгах есть рабочий лист с одним и тем же именем, в примере это "Лист1" (можно заменить на "СВОД")

то решить поставленную задачу, без явного открытия книг, можно, например так :

VB Код:
Private Sub Test() 'Microsoft Excel XP(или старше)
   Dim iFileDialog As FileDialog, iPath$, iFileName$, iCount&
   
    Set iFileDialog = Application.FileDialog(msoFileDialogFolderPicker)
    iFileDialog.Title = "Выберите рабочую папку"
   
    If iFileDialog.Show = -1 Then
       iPath = iFileDialog.SelectedItems(1) & "\"
       iFileName = Dir(iPath & "*.xls") '"*.xls*"
     
       If iFileName <> "" Then
          Application.ScreenUpdating = False
          Do
               With Range("A1:N200").Offset(iCount * 200)
                    .Formula = "='" & iPath & "[" & iFileName & "]Лист1'!Q10"
                    .Value = .Value
                    .Replace "0", "", xlWhole
               'Если в ячейках-источниках могут быть пустые ячейки, но нет 0
              End With
               
               iFileName = Dir: iCount = iCount + 1
          Loop Until iFileName = ""
          Application.ScreenUpdating = True
       Else
          MsgBox "В выбранной папке нет XLS файлов", vbCritical, ""
       End If
    End If
End Sub

Примечание : Обратите внимание на расширение файла, возможно потребуется его корректировка(замена), например, на :
"*.xlsm" - только файлы с указанным расширением
"*.xls?" - только новые файлы, типа xlsm, xlsx
"*.xls*" - только новые файлы, а также старые, но только xls
"*.xl*" - все файлы, созданные Excel, причём как старые, типа xls, так и новые, xlsx и т.д.

Последний раз редактировалось pashulka; 17.10.2014 в 22:17
Ответить с цитированием
2 пользователя(ей) сказали cпасибо:
dzug (04.05.2015), Od1nz (20.10.2014)
  (#3 (permalink)) Старый
Od1nz Od1nz вне форума
Новичок
 
Сообщений: 3
Сказал(а) спасибо: 3
Поблагодарили 0 раз(а) в 0 сообщениях
Регистрация: 17.10.2014
По умолчанию 20.10.2014, 10:35

Всё отлично работает, не могли бы вы ещё подсказать, как подставить допустим в столбец О названия файлов, из которых берутся данные? и было бы вообще отлично. Но и на этом уже огромное спасибо.
Ответить с цитированием
  (#4 (permalink)) Старый
pashulka pashulka вне форума
Member
 
Сообщений: 1,872
Сказал(а) спасибо: 2
Поблагодарили 57 раз(а) в 53 сообщениях
Регистрация: 11.03.2005
По умолчанию 20.10.2014, 12:45

Добавить в столбец "O" имена файлов, откуда мы извлекаем данные, можно, например, так :

VB Код:
With Range("A1:N200").Offset(iCount * 200)
     .Formula = "='" & iPath & "[" & iFileName & "]Лист1'!Q10"
     .Value = .Value
     .Replace "0", "", xlWhole
     .Columns(15).Value = iFileName '.Columns(15) = iFileName 'Столбец "O"
End With
Ответить с цитированием
Пользователь сказал cпасибо:
Od1nz (20.10.2014)
  (#5 (permalink)) Старый
Od1nz Od1nz вне форума
Новичок
 
Сообщений: 3
Сказал(а) спасибо: 3
Поблагодарили 0 раз(а) в 0 сообщениях
Регистрация: 17.10.2014
По умолчанию 20.10.2014, 14:01

Просто супер. ) Спасибо огромное. + к карме вам)
Ответить с цитированием
Ads.
Ads
Ответ

Опции темы
Опции просмотра

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Trackbacks are Вкл.
Pingbacks are Вкл.
Refbacks are Выкл.


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Делимся моделями электронных книг Ириска Гаджеты 9 29.09.2011 13:53
Переводы книг для программирования yamamoto Smalltalk 1 24.12.2010 17:49
Десять программистских книг Alexiski Общие вопросы создания ПО 8 13.04.2010 16:56
Подскажите как вытащить данные с HDD Арт123 Любые вопросы от новичков 7 19.03.2010 21:32
Как вытащить данные из грида другого приложения zsv Delphi 3 13.04.2007 10:08
IBM открыла исходники очередной партии ранее закрытых разработок MULDER Новости 0 10.10.2006 14:25
Как можно из потока данные вытащить в диалог DDD_dimon_ Visual C++ 27 10.08.2006 13:01
Как вытащить данные с Rx сигнала Ethernet les-nick C++ Builder 0 11.07.2005 14:10
Как с помощью SQL вытащить данные из бд и забить и[ в ListBo Lapidos SQL 1 14.06.2005 18:35
Как в RichEdit вытащить данные и переписать Anonymous Вопросы начинающих программистов 1 21.09.2004 15:48
Поиск в интернете книг по программированию imported_Programist Вопросы начинающих программистов 1 17.09.2004 15:19
Поиск книг по программированию для С++ ElfD Visual C++ 15 09.03.2003 19:05



Powered by vBulletin® Version 3.8.7
Copyright ©2000 - 2018, Jelsoft Enterprises Ltd.
Нardforum.ru - компьютерный форум и программирование, форум программистов