简体   繁体   中英

Is there a VBA code to select multiple (and varied totals of) columns from multiple worksheets to copy and paste into a new worksheet

I am trying to copy multiple columns from multiple worksheets into a new worksheet in Excel using a VBA Macro.

I have already created the worksheet, and I want to paste specific columns one after another in that worksheet.

I would like to copy from each worksheet all columns including and beyond a certain column, in all worksheets including and from Column F.

I have written a piece of code that selects the appropriate data and loops correctly.

However, i get a "run-time error 1004", when the loop hits a worksheet where I am copying only one column.

I know this is because of the choice of my code. However, I don't know how to solve the problem.

The problem is that my code selects a range to the end of the worksheet when there is only one column being selected. This creates a copied area too big to paste in the new worksheet.

Dim i As Integer
        
        i = 1
        
        Do While i <= Worksheets.Count - 1
        Worksheets(i).Select
        
        'Select, Copy and Paste Data
        
        RangeFromF1
        
        Selection.Copy
        
        Worksheets("Combined").Select
        
        Range("X1").Select
        
        Selection.End(xlToLeft).Select
        
        ActiveCell.Offset(0, 1).Select
        
        ActiveSheet.Paste
        
        i = i + 1
        
        Loop

End Sub

Public Sub RangeFromF1()

       Range("F1", Range("F1").End(xlDown).End(xlToRight)).Select

End Sub

Instead of going from column F to the right, try going from the last column to the left.

Public Sub RangeFromF1()

       Range("F1", Cells(1, Columns.Count).End(xlToLeft).End(xlDown)).Select

End Sub

You might also want to get rid of all the Select stuff.

Sub CopyStuff()
Dim i As Long

    i = 1

    Do While i <= Worksheets.Count - 1

        With Worksheets(i)

            .Range("F1", .Cells(1, .Columns.Count).End(xlToLeft).End(xlDown)).Copy

            Worksheets("Combined").Cells(1, Columns.Count).End(xlToLeft).Offset(, 1).Paste

            i = i + 1
            
        End With

    Loop

End Sub

Before coming back to check for your answer noris, I figured out a way, to do as you suggested, with the following code:

Public Sub ReferenceSelection()

Dim startcell As Range
 
 Set startcell = Range("A1").End(xlDown).End(xlToRight)
 
Range(startcell, ("F1")).Select

End Sub

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM