Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
Dim wb, ab As Workbook
Set ab = ThisWorkbook
If Not Intersect(Target, Range("A1:BS1")) Is Nothing Then
Columns(Target.Column).Select
Selection.Copy
If IsBookOpen("result.xlsx") Then
Workbooks("result.xlsx").Activate
Set wb = Workbooks("result.xlsx")
lc = wb.Sheets(1).Cells(1, Columns.Count).End(xlToLeft).Column
If lc = 1 Then
If wb.Sheets(1).Cells(1, lc).Value <> "" Then lc = lc + 1
Else
lc = lc + 1
End If
wb.Sheets(1).Cells(1, lc).Select
ActiveSheet.Paste
Else
Set wb = Workbooks.Add
wb.Activate
lc = wb.Sheets(1).Cells(1, Columns.Count).End(xlToLeft).Column
If lc = 1 Then
If wb.Sheets(1).Cells(1, lc).Value <> "" Then lc = lc + 1
Else
lc = lc + 1
End If
wb.Sheets(1).Cells(1, lc).Select
ActiveSheet.Paste
wb.SaveAs ".................." ' прописать путь
End If
End If
End Sub
Function IsBookOpen(wbName As String) As Boolean
Dim wbBook As Workbook
For Each wbBook In Workbooks
If wbBook.Name <> ThisWorkbook.Name Then
If Windows(wbBook.Name).Visible Then
If wbBook.Name = wbName Then IsBookOpen = True: Exit For
End If
End If
Next wbBook
End Function
Поторопился и не до конца понял условие задачи. Но все же можете пользоваться, если пригодится. Макрос двойным щелчком по заголовку таблицы, переносит содержимое на новый лист.
magistor8,Спасибо большое попробую) Но я правда не вижу где бы он выбирал столбцы под названием "TypeDoma" ,"TypUL", "LS" , "VOL_IND", "N_SERVSQUARE", "STATUS" и копировал конкретно их
Kentavrik7, не могу открыть архив, файлов не видел. Но, могу предложить такую альтернативу.
Можете таким образом выделить по имени в шапке хоть 100 разных столбцов и скопировать их по очереди. Ну, а как через ВБА создать новый файл и вставить скопированное уже не сложно найти.
Код
A = WorksheetFunction.Match("TypeDoma", [SHEET1!a1:z1], 0)
B = WorksheetFunction.Match("TypUL", [SHEET1!a1:z1], 0)
C = WorksheetFunction.Match("LS", [SHEET1!a1:z1], 0)
Sheets("SHEET1").Columns(A).Copy
Sheets("SHEET1").Columns(B).Copy
Sheets("SHEET1").Columns(C).Copy
Названия столбцов перечисляем через запятую, в кавычках. Макрос запускаем из Исходного файла с нужного листа. Поиск заголовка ведется в первой строке. Если надо - измените Range("1:1") на нужную строку
Код
Sub CopyColumns()
Dim ColHeadres(), head, Rng As Range
ColHeaders = Array("TypeDoma", "TypUL", "LS", "VOL_IND", "N_SERV", "SQUARE", "STATUS")
For Each head In ColHeaders
If Not Range("1:1").Find(head) Is Nothing Then
If Rng Is Nothing Then
Set Rng = Range("1:1").Find(head).EntireColumn
Else
Set Rng = Union(Rng, Range("1:1").Find(head).EntireColumn)
End If
End If
Next head
Rng.Copy
Application.Workbooks.Add.Worksheets(1).Cells(1, 1).PasteSpecial xlPasteValues
Application.CutCopyMode = False
End Sub
Kentavrik7, готово. Файл во вложении. В коде адрес сохранения новой книги поменяйте. Ну, и, соответственно, там диапозоны нужные Вам, имена страниц и так далее. Также, количество и имя копируемых столбцов по этой же логике можете менять как угодно. Все работает.
Sceptic, Paul Zealand,,Большое спасибо все очень круто )))) Работает настроил под себя, и как всегда по закону ленивого жанра появились еще хотелки)) Сейчас вариант работы такой, открыл книгу запустил макрос, он сохранил сокращенную версию (те столбцы которые в коде) в нужную папку. А можно ли это загнать в цикл? Например чтобы написать путь к папке и он каждый файл открыл скопировал столбцы, сохранил легкую версию в другую папку, потом следующую( в каждой папке по Или это уже слишком сложно?)