Страница 1 из 1

Excel задача

СообщениеДобавлено: 11 май 2016, 16:22
Rick
Доброго.
Прошу автора программы подсказать, возможно ли:

Есть некая программа, которая на сервере запускается в 50 копиях.
Итогом работы копий программ, является некоторая статистика, которая подготовлена для копирования в Excel.
При нажатии на кнопку, статистика (отчет) копируется в буфер обмена для последующей вставки в Excel таблицу.
В каждой строке, 10 заполненных ячеек, но иногда бывает что заполнена всего одна.

Вопрос:
Поддается ли с помощью AutoClickExtreme автоматизация следующий действий:
Открываем через значек программы на панели задач, программу, копируем через кнопку в буфер обмена отчет. Идем опять на панель задач, выводим на экран Excel таблицу и вставляем отчет. Дальше идем опять на панель задач, копируем новый отчет в буфер обмена, выводим на экран Excel и снова вставляет в ТОТ ЖЕ лист на ПУСТУЮ строку (где нет ни одной заполненной ячейки в десяти рядах) новый отчет.
При этом, отчеты всегда с разным количеством строк. Либо в строке все 10 ячеек заполнены, либо заполнена одна только ячейка.

Re: Excel задача

СообщениеДобавлено: 11 май 2016, 17:09
Safonov_Denis
в принципе не вижу никаких проблем, только вставить перед началом цикла проверку, что курсор в экселе стоит на пустой ячейке, скопировать содержимое ячейки и если оно пустое, то остаться на этой ячейке, если нет, то перейти на одну ячейку ниже. И повторить цикл до тех пор пока не выйдем на пустую ячейку

Re: Excel задача

СообщениеДобавлено: 11 май 2016, 20:30
Rick
Safonov_Denis писал(а):в принципе не вижу никаких проблем, только вставить перед началом цикла проверку, что курсор в экселе стоит на пустой ячейке, скопировать содержимое ячейки и если оно пустое, то остаться на этой ячейке, если нет, то перейти на одну ячейку ниже. И повторить цикл до тех пор пока не выйдем на пустую ячейку


Еще один вопрос, а когда копирование подойдет к нижней границе видимости листа, а нужно новую порцию добавить материала, подобное затруднение можно как-то обойти?

Re: Excel задача

СообщениеДобавлено: 11 май 2016, 22:41
Safonov_Denis
курсор будет переходить на следующую строчку и перемещать область видимости вниз

Re: Excel задача

СообщениеДобавлено: 25 май 2016, 10:20
NEOlitik
Извините, что вклиниваюсь:)

Это проще сделать макросом в самом экселе.
Выбрать папку, в которой все отчеты, чтобы эксель последовательно их собрал в один.

пример:
Sub СОБРАТЬ_12_5_ЗА_ПЕРИОД_ИЗ_КНИГ()
Dim Shell As Object
Dim FolderItems As Object
Set Shell = CreateObject("Shell.Application")
Set FolderItems = Shell.BrowseForFolder(0&, "Выберите каталог для поиска файлов", 0, &H11)
If FolderItems Is Nothing Then
Exit Sub
Else
srchPath = FolderItems.Self.Path & "\"
End If
Set Shell = Nothing
Set FolderItems = Nothing

Application.ScreenUpdating = False

Mask = srchPath & "*.xls"

ii = 0 'Счетчик количества файлов
ws_main = ActiveWorkbook.Name
ws_path = Workbooks(ws_main).Path

i = 6 'Счетчик количества строк в файле main (первая пустая)
While Workbooks(ws_main).ActiveSheet.Cells(i, 1) > 0
i = i + 1
Wend

FName = Dir(Mask)
While Not FName = ""
Workbooks.Open (srchPath & FName)
Set ws = Workbooks(FName).ActiveSheet
R = 6 'Счетчик вставляемых строк

While ws.Cells(R, 1) > 0
R = R + 1
Wend
'перенос диапазона данных
Application.CutCopyMode = True

If ii < 1 Then
'Задаем диапазон, который копируем
Range("A1:AN" & R).Copy
Else
Range("A6:AN" & R).Copy
End If

Workbooks(ws_main).Activate
'если счетчик файлов 0 (обрабатываем 1й файл, то вставка в начало файлы)
If ii < 1 Then
ActiveSheet.Cells(1, 1).Select
Else
ActiveSheet.Cells(i, 1).Select
End If
ActiveSheet.Paste
Application.CutCopyMode = False
i = i + (R - 6) 'адрес строки вставки
Workbooks(FName).Close SaveChanges:=False

ii = ii + 1

Set fs = Nothing
FName = Dir
Wend
Application.ScreenUpdating = True
End Sub

запускать в новой пустой книге. пустую книгу предварительно сохранить куда-нибудь в другом каталоге.

Re: Excel задача

СообщениеДобавлено: 25 май 2016, 11:06
Safonov_Denis
я за любую активность на форуме, так что никогда не сдерживайте порывы поделиться информацией :)