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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 07.08.2009, 13:15   #1
Maxx
Форумчанин
 
Аватар для Maxx
 
Регистрация: 29.10.2008
Сообщений: 294
По умолчанию Копирование из закрытой книги

Добрый день!

Вот уже несколько дней бьюсь над этой темой - результат нулевой

Задание:

В файл Total.csv надо поместить данные из файлов A.csv и AA.csv, лежащих в папке "A".

В файле Total.csv данные должны размещаться в одну колонку в столбце A неразрывно, начиная с ячейки A1.

Макрос на выполнение данной процедуры должен запускаться из книги Main.xlsm

Копирование в Total.csv должно быть без открытия A.csv и AA.csv

Помогите, пожалуйста! Или дайте идею хоть какую-нибудь!
Вложения
Тип файла: rar TotalA.rar (7.0 Кб, 21 просмотров)
Maxx вне форума Ответить с цитированием
Старый 07.08.2009, 19:35   #2
Chelentano
Пользователь
 
Регистрация: 06.07.2009
Сообщений: 45
По умолчанию

Привет! Я сам новичок, не знаю, как оно работает с csv-файлами, но c xls когда-то слышал, что можно в коде макроса попробовать что-то типа такого:

Sub Копирование_книг()
Application.ScreenUpdating=False 'эта команда по- моему позволяет пользователю не видеть, что делает макрос и ускоряет вообще работу макроса
Workbooks("A.xls").Open
Wokbooks("AA.xls").Open

'далее идут команды копирования и вставок между книгами

Workbooks("A.xls").Close
Wokbooks("AA.xls").Close

Application.ScreenUpdating=True


End sub

Последний раз редактировалось Chelentano; 07.08.2009 в 19:40.
Chelentano вне форума Ответить с цитированием
Старый 07.08.2009, 19:57   #3
doober
Старожил
 
Аватар для doober
 
Регистрация: 02.05.2009
Сообщений: 3,907
По умолчанию

Документы будут находиться постоянно в определенных папках,или нет?
Анализ,обработка данных Недорого
doober вне форума Ответить с цитированием
Старый 07.08.2009, 22:32   #4
doober
Старожил
 
Аватар для doober
 
Регистрация: 02.05.2009
Сообщений: 3,907
По умолчанию

Я думаю средсвами Excel без открытия не получиться,попробуйте сторонее приложение,что не понятно,пишите в личку,или мыло
Вложения
Тип файла: rar CSV.rar (56.6 Кб, 15 просмотров)
Анализ,обработка данных Недорого
doober вне форума Ответить с цитированием
Старый 08.08.2009, 01:34   #5
doober
Старожил
 
Аватар для doober
 
Регистрация: 02.05.2009
Сообщений: 3,907
По умолчанию

Был не прав по поводу возможностей Excel
Формат csv можно открыть как тектовый документ
Как открыть описано здесь.
http://programmersforum.ru/showthrea...F2%EE%E2%FB%E9
Анализ,обработка данных Недорого
doober вне форума Ответить с цитированием
Старый 10.08.2009, 07:46   #6
SAS888
Старожил
 
Аватар для SAS888
 
Регистрация: 05.12.2007
Сообщений: 4,180
По умолчанию

Посмотрите вложение. Откройте файл "Main" и запустите макрос "Main".
ВАЖНО: файл "Total.csv" должен находиться в той же папке, что и файл "Main".
Вложения
Тип файла: rar TotalA_2.rar (6.4 Кб, 41 просмотров)
Чем шире угол зрения, тем он тупее.
SAS888 вне форума Ответить с цитированием
Старый 10.08.2009, 10:09   #7
Maxx
Форумчанин
 
Аватар для Maxx
 
Регистрация: 29.10.2008
Сообщений: 294
По умолчанию

SAS888, спасибо за неоценимую помощь! Все работает!

А я пытался сделать по следующей схеме:
With ThisWookbook.WorkSheet(1)
Далее цикл по перебору строк
Ячейка в Total = Ячейка в A.csv (указав на этот файл полный путь и имя листа)

В итоге - НЕ ВЫШЛО :-(

Если не затруднит:
Код:
Sub Main()
    Dim myPath As String, myName As String, fso, tsW
    Set fso = CreateObject("Scripting.FileSystemObject")
    Set tsW = fso.OpenTextFile(ThisWorkbook.Path & "\Total.csv", 2, True)
    With Application.FileDialog(msoFileDialogFolderPicker)
        .Title = "Укажите рабочую папку"
        .Show
        If .SelectedItems.Count = 0 Then Exit Sub
        myPath = .SelectedItems(1) & "\"
    End With
    myName = Dir(myPath & "*.csv")
    Do While myName <> ""
        tsW.Write fso.OpenTextFile(myPath & myName, 1).ReadAll
        myName = Dir
    Loop
    tsW.Close
End Sub
Что делают эти строки (мне для дальнейшего развития)?

И можно ли заменить выбор папок на автоматический (помимо папки А будет еще только папка B во все тойже папке Total). Структура папок меняться не будет.
Maxx вне форума Ответить с цитированием
Старый 10.08.2009, 10:31   #8
SAS888
Старожил
 
Аватар для SAS888
 
Регистрация: 05.12.2007
Сообщений: 4,180
По умолчанию

Цитата:
Что делают эти строки
1. Set fso = CreateObject("Scripting.FileSystemO bject") - создаем объект Scripting.FileSystemObject.
2. tsW.Write fso.OpenTextFile(myPath & myName, 1).ReadAll - в файл, открытый для записи (Set tsW = fso.OpenTextFile(ThisWorkbook.Path & "\Total.csv", 2, True)), записываем данные, считанные из файла, открытого для чтения (весь файл разом).
3. myName = Dir - переходим к следующему файлу в той же директории, удовлетворяющему условию Dir(myPath & "*.csv").
Цитата:
можно ли заменить выбор папок на автоматический
Для этого нужен список папок и путей их расположения.
Чем шире угол зрения, тем он тупее.
SAS888 вне форума Ответить с цитированием
Старый 10.08.2009, 10:47   #9
Maxx
Форумчанин
 
Аватар для Maxx
 
Регистрация: 29.10.2008
Сообщений: 294
По умолчанию

Цитата:
Для этого нужен список папок и путей их расположения.
Все будет именно так и НЕ КАК НЕ ПО ДРУГОМУ (кроме имен файлов и папок):

Total - в ней папка A с файлами A и AA.csv и папка B с файлами B и BB.csv

Также в папке Total лежит файл с макросом Main.xlsm и обобщающий файл Total.csv

Цитата:
создаем объект Scripting.FileSystemObject
надо будет початать что это такое
Maxx вне форума Ответить с цитированием
Старый 10.08.2009, 10:58   #10
Maxx
Форумчанин
 
Аватар для Maxx
 
Регистрация: 29.10.2008
Сообщений: 294
По умолчанию

Сделал методом тупого перебора :-)))

Код:
Sub Main()
    Dim myPathA, myPathB As String, myName As String, fso, tsW
    Set fso = CreateObject("Scripting.FileSystemObject")
    Set tsW = fso.OpenTextFile(ThisWorkbook.Path & "\Total.csv", 2, True)
    
    Cells.ClearContents
    
    myPathA = ThisWorkbook.Path & "\A\"
    myPathB = ThisWorkbook.Path & "\B\"
    
    myName = Dir(myPathA & "*.csv")
    Do While myName <> ""
        tsW.Write fso.OpenTextFile(myPathA & myName, 1).ReadAll
        myName = Dir
    Loop
    
    myName = Dir(myPathB & "*.csv")
    Do While myName <> ""
        tsW.Write fso.OpenTextFile(myPathB & myName, 1).ReadAll
        myName = Dir
    Loop
    tsW.Close
End Sub
Maxx вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Сложное копирование из одной книги в другую kzld Microsoft Office Excel 12 15.07.2009 11:56
макрос который будет копировать столбец А из закрытой книги Данные, и вставлять в книгу Сток в столбец B Utirka66 Microsoft Office Excel 8 06.07.2009 09:53
Экспорт данных из закрытой книги как это организовать? Дмитрий Фукс Microsoft Office Excel 11 06.04.2009 23:42
Копирование данных с др. книги Iskin Microsoft Office Excel 2 30.12.2008 07:32
Получение пользовательской функцией данных с закрытой книги KozakMamaj Microsoft Office Excel 18 22.10.2008 06:55