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

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

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

Восстановить пароль

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

Ответ
 
Опции темы Поиск в этой теме
Старый 01.11.2010, 11:56   #1
Meta2
Пользователь
 
Регистрация: 28.10.2009
Сообщений: 38
По умолчанию Не могу заставит работать copy/paste в Excel. Код внутри.

Доброго времени суток.

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

Поэтому я хочу собрать вместе содержимое около 300 таких файлов и ручками-ручками их обработать. Для того, чтобы это реализовать, я написал такой код:

Код:
Sub Copy_Paste()

Dim sh As Worksheet: Set sh = ActiveSheet

Dim sFname As Variant

Application.ScreenUpdating = False

Dim iPos, j, k As Integer

iPos = 1

sFname = Application.GetOpenFilename(FileFilter:="Excel Files, *.xls", FilterIndex:=1, MultiSelect:=True)

If IsArray(sFname) Then
    For i = LBound(sFname) To UBound(sFname)
        Set Wb = Application.Workbooks.Open(i)
        
        With Wb.Sheets(1).Cells
        
            Set c = .Find(What:="Внимание!", LookIn:=xlValues, LookAt:=xlWhole)
        
            If Not c Is Nothing Then
                sh.Cells(iPos, 1).Activate
                
                .Range(Cells(1, 1), Cells(c.Row, 20)).Select
                Selection.Copy
                
                iPos = iPos + c.Row
                
                sh.Paste
                'NOT WORKING!!!!
                'sh.Cells(iPos, 1).Activate

            End If
        End With
        
       Wb.Close SaveChanges:=True
    Next i
End If
End Sub
Идея такая - я ищу в каждом файле ключевое слово "Внимание!" - выделяю диапазон, копирую его, потом сдвигаю активную ячейку и перехожу к следующему файлу, где ищу ключевое слово, выделяю диапазон ...

Так вот, мне почему-то не удаётся сместить ячейку, в которую я собираюсь производить вставку...

И ещё сильно раздражает появление диалога со словами "В буфере обмена находится большой объём данных..." Как-нибудь можно сделать так, чтобы программа просто тупо копировала, а не думала за меня, что делать с данными в буфере??

Примеры файлов в аттаче.

Спасибо!
Вложения
Тип файла: zip тест.zip (104.1 Кб, 14 просмотров)
Meta2 вне форума Ответить с цитированием
Старый 01.11.2010, 12:08   #2
VictorM
Старожил
 
Аватар для VictorM
 
Регистрация: 15.05.2008
Сообщений: 2,058
По умолчанию

Цитата:
И ещё сильно раздражает появление диалога со словами "В буфере обмена находится большой объём данных..." Как-нибудь можно сделать так, чтобы программа просто тупо копировала, а не думала за меня, что делать с данными в буфере??
Правка-Буфер обмена.
Затем - читаем справку:
Цитата:
Буфер обмена нажмите кнопку Параметры.
Снимите флажок Автоматическое отображение буфера обмена Office.
Снимите флажок Открывать буфер обмена Office при двойном нажатии Ctrl+C.
Должно помочь.
Или же Как не выводить на экран системные предупреждения ?
"Дайте людям рыбы, и вы накормите их на весь день; научите их ловить рыбу - и вы накормите их на всю жизнь"
"Большое спасибо" - Z261597841314, R208907249777, U447361470499

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

Честно сказать-не понял.что вы хотите скопировать,какая инфа вам нужна,да и ошибка вылетает.
Внутренний голос подсказывает хотите типа прайса создать
Если такое количество файлов для обработки,возможно есть смысл обрабатывать HTML,мороки меньше.
Можете прикрепить файл HTML с пояснениями.что надо с него взять.
Анализ,обработка данных Недорого
doober вне форума Ответить с цитированием
Старый 01.11.2010, 13:02   #4
EugeneS
Форумчанин
 
Регистрация: 06.08.2009
Сообщений: 472
Сообщение

попробуй заменить часть кода:

Код:
If Not c Is Nothing Then
...
End If
на

Код:
If Not c Is Nothing Then
   .Range(Cells(1, 1), Cells(c.Row, 20)).Copy sh.Cells(iPos, 1):iPos = iPos + c.Row
 End If
в файле измененный код, если что-то непонятно
Вложения
Тип файла: zip Main_file.zip (7.7 Кб, 11 просмотров)

Последний раз редактировалось EugeneS; 01.11.2010 в 13:11.
EugeneS вне форума Ответить с цитированием
Старый 01.11.2010, 13:10   #5
Meta2
Пользователь
 
Регистрация: 28.10.2009
Сообщений: 38
По умолчанию

Я хочу получить итоговый файл вида, как в аттаче.

Исходные файлы предоставить не могу. Это набор текстовых файлов - *.asp - страниц, в которых содержится таблицы со номерами грузов, номерами счетов в этих грузах, а также с указанием массы и объёма товаров в грузах.

Исходник дать не могу, сорри.

Программа, которая преобразовывала файлы - TotalHTMLConverter

Основная проблема в том, что наименование некоторых товаров не помещается в одну строку описания и TotalHTMLConverter разбивает его на две строки в таблице. Или сдвигает колонку с весом товара. До позиции 5 вес указывался в колонке, допустим, "K", а с позиции 6 - в колонке "L"

Как я скажу скрипту, что сдвинулась колонка с данными?? И как я ему скажу, что вот этот партномер вдруг оказался на двух строках??

Я бы слил данные из этих файлов в один, руками бы его вычислил и всё. Это одноразовая работа, в будущем она повторяться не будет.
Вложения
Тип файла: zip Out.zip (6.4 Кб, 9 просмотров)

Последний раз редактировалось Meta2; 01.11.2010 в 13:12.
Meta2 вне форума Ответить с цитированием
Старый 01.11.2010, 13:14   #6
Meta2
Пользователь
 
Регистрация: 28.10.2009
Сообщений: 38
По умолчанию

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

Результат сформирован на основании файлов 1.xls, 2.xls, 3.xls
Вложения
Тип файла: zip Sample.zip (15.3 Кб, 15 просмотров)
Meta2 вне форума Ответить с цитированием
Старый 01.11.2010, 13:20   #7
Meta2
Пользователь
 
Регистрация: 28.10.2009
Сообщений: 38
По умолчанию

EugeneS
Евгений, Вы - гений!!!
Спасибо, всё работает. Результат, как я и хотел!
Meta2 вне форума Ответить с цитированием
Старый 01.11.2010, 14:30   #8
Meta2
Пользователь
 
Регистрация: 28.10.2009
Сообщений: 38
По умолчанию

а вот ещё один вопрос вдогонку:

я хочу визуально отделить запись из одного файла от записи из другого, и пишу такой код:

Код:
            If Not c Is Nothing Then
                 .Range(Cells(1, 1), Cells(c.Row, 20)).Copy sh.Cells(iPos, 1): iPos = iPos + c.Row
                 
                 
                 For n = 1 To 30
                    sh.Cells(iPos, n).Interior.ColorIndex = 8
                 Next n
            End If
В отладчике я вижу, как ячейки окрашиваются в другой цвет, а в результирующем файле они как были белые, так и остались...
Meta2 вне форума Ответить с цитированием
Старый 01.11.2010, 16:01   #9
EugeneS
Форумчанин
 
Регистрация: 06.08.2009
Сообщений: 472
По умолчанию

результат согласно Вашего примера результирующих данных.

Будучи на Лист1 файла "Main" запустите макрос "Copy_Paste". Результат выводится на Лист2.

PS. Тестировался на 20 вложеных файлах
Вложения
Тип файла: zip Main_file.zip (10.2 Кб, 14 просмотров)
EugeneS вне форума Ответить с цитированием
Старый 01.11.2010, 18:28   #10
Meta2
Пользователь
 
Регистрация: 28.10.2009
Сообщений: 38
По умолчанию

EugeneS
Да, спасибо, я уже и сам разобрался. Логическая ошибка - сначала пишу, потом сам же затираю.

Но всё равно спасибо!
Meta2 вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
copy-paste. Оптимизация! mephist Microsoft Office Excel 3 15.07.2009 05:02
Не могу понять в чем проблема!(copy,length,pos) zotox Помощь студентам 1 26.04.2009 03:12
У кого нибудь есть исходный код функции Copy slips Паскаль, Turbo Pascal, PascalABC.NET 3 25.04.2009 13:13
Облом Copy&Paste SHEI'TI Microsoft Office Word 2 24.09.2007 14:16