Home > Software design >  Select Headings of selection(s) to be union with the selection(s) itself?
Select Headings of selection(s) to be union with the selection(s) itself?

Time:02-16

By using manual selection(s) , I copy range(s) from workbook to another workbook.
But, how to select the headings of this selection(s) to be union with the selection itself , to fulfill copy and paste in one shot.
Headings are found on first row.
e.g, contiguous selection if I selected Range “B3:D5” , subsequently I need to select ”B1:D1” and union with Range “B3:D5”.
e.g, non-contiguous selection if I selected Range “B3:D5,F3:F5” , subsequently I need to select ”B1:D1,F1” and union with Range “B3:D5,F3:F5”
Copying of contiguous selection and non- contiguous selections (in the same rows) works without problem.
In advance, grateful for useful answer and comments.

Dim wb As Workbook: Set wb = ThisWorkbook    'Source Workbook
Dim srg As Range: Set srg = wb.ActiveSheet.Range(Selection.Address)

Dim wb1 As Workbook: Set wb1 = Workbooks.Add  'Destination Workbook
Dim drg As Range: Set drg = wb1.Sheets(1).Range("A1")

srg.Copy
drg.PasteSpecial Paste:=xlPasteColumnWidths
srg.Copy drg      

Dim r As Range
  For Each r In drg.Rows
  r.WrapText = True
    If r.RowHeight < 40 Then r.RowHeight = 40  
       Next r

CodePudding user response:

If you want the Selected range Unioned with row one, try this

Dim srg As Range
Set srg = Selection ' no need to go via Selection.Address
Set srg = Application.Union(srg, srg.EntireColumn.Rows(1))

Or just

Set srg = Application.Union(Selection, Selection.EntireColumn.Rows(1))

CodePudding user response:

Copy Header With Selection

Option Explicit

Sub ExportSelection()
    
    If Not TypeOf Selection Is Range Then Exit Sub
    
    Dim dfCell As Range
    With Selection
        With Union(.EntireColumn.Rows(1), .Cells)
            .Rows(1).Copy
            Set dfCell = Workbooks.Add(xlWBATWorksheet) _
                .Worksheets(1).Range("A1")
            dfCell.PasteSpecial xlPasteColumnWidths
            .Copy dfCell
        End With
    End With
    
    With dfCell.CurrentRegion ' headers and data
        Dim rrg As Range
        For Each rrg In .Rows
            rrg.WrapText = True
            If rrg.RowHeight < 40 Then rrg.RowHeight = 40
        Next rrg

        With .Rows(1) ' headers
        
        End With
        
        With .Resize(.Rows.Count - 1).Offset(1) ' data
        
        End With
    
        With .Worksheet ' worksheet
            Debug.Print .Name
            With .Parent ' workbook
                Debug.Print .Name
                .Saved = True ' for easy closing when developing
            End With
        End With
    
    End With

End Sub
  • Related