VBA to copy range to different workbook

Rolsu

New Member
Joined
Jul 16, 2019
Messages
3
Hi!

I have an issue with my new workbook.
I'd like to copy data from my active workbook to another one, which is closed.
I have half success.
The sheet stands from two parts. An info part and a table. I can copy all the data from the info part but not the table.
I use the range method to copy single cells. But I cannot do the same with a range.
I need to set the range variables but I don't know how...
Can somebody compliment or convert my code to a working one?

Thank you.

I use this code to the table:

Code:
Sub SaveDim()

Dim M1 As Range
Dim M2 As Range
Dim M3 As Range
Dim M4 As Range
Dim M5 As Range
Dim M6 As Range
Dim M7 As Range
Dim M8 As Range
Dim ID As Range
Dim mydata As Workbook


Worksheets("Data").Select
M1 = Range("B4:B54")
Worksheets("Data").Select
M2 = Range("C4:C54")
Worksheets("Data").Select
M3 = Range("D4:D54")
Worksheets("Data").Select
M4 = Range("E4:E54")
Worksheets("Data").Select
M5 = Range("F4:F54")
Worksheets("Data").Select
M6 = Range("G4:G54")
Worksheets("Data").Select
M7 = Range("H4:H54")
Worksheets("Data").Select
M8 = Range("I4:I54")
Worksheets("Data").Select
ID = Range("J4:J54")


Set mydata = Workbooks.Open("Path and name")
Worksheets("Sheet1").Select
Worksheets("Sheet1").Range("A1").Select
RowCount = Worksheets("Sheet1").Range("A1").CurrentRegion.Rows.Count


With Worksheets("Sheet1").Range("A1")
    
    .Offset(RowCount, 0) = M1
    .Offset(RowCount, 1) = M2
    .Offset(RowCount, 2) = M3
    .Offset(RowCount, 3) = M4
    .Offset(RowCount, 4) = M5
    .Offset(RowCount, 5) = M6
    .Offset(RowCount, 6) = M7
    .Offset(RowCount, 7) = M8
    .Offset(RowCount, 8) = ID


End With


mydata.Save
mydata.Close


End Sub
 

Some videos you may like

Excel Facts

Create a chart in one keystroke
Select the data and press Alt+F1 to insert a default chart. You can change the default chart to any chart type

dmt32

Well-known Member
Joined
Jul 3, 2012
Messages
5,925
Office Version
2019
Platform
Windows
Hi,
welcome to Forum

See if this update to your code does what you want

Rich (BB code):
Sub SaveDim()
    Dim RowCount As Long
    Dim CopyRange As Range
    Dim mydata As Workbook
    
    Set CopyRange = Worksheets("Data").Range("B4:J54")
    
    Application.ScreenUpdating = False
    Set mydata = Workbooks.Open("Path and name")
    
     With mydata.Worksheets("Sheet1")
        RowCount = .Range("A1").CurrentRegion.Rows.Count + 1
           CopyRange.Copy .Cells(RowCount, 1)
     End With
'close and save
    mydata.Close True
    Application.ScreenUpdating = True
End Sub
You will need to specify a valid FilePath & FileName shown in red.

Dave
 

Rolsu

New Member
Joined
Jul 16, 2019
Messages
3
Hi Dave!

Thanks for the fast reply.


Almost good, but there are some bugs.
Maybe because I forgot to write all of the cicumstances. My mistake.


I'd like to copy the values only because the table has a conditional formating.
Another when the table isn't filled fully, data are just from B4 to J36. The code doesn't start filling the new table from the last empty row. It starts from the A55.
 

dmt32

Well-known Member
Joined
Jul 3, 2012
Messages
5,925
Office Version
2019
Platform
Windows
Hi Dave!

Thanks for the fast reply.


Almost good, but there are some bugs.
Maybe because I forgot to write all of the cicumstances. My mistake.
No bugs just changes to needed to suggestion - Always good to fully explain requirements.

I'd like to copy the values only because the table has a conditional formating.
Another when the table isn't filled fully, data are just from B4 to J36. The code doesn't start filling the new table from the last empty row. It starts from the A55.
If you are copying to a table then, untested but try this update

Code:
Sub SaveDim()
    Dim RowCount As Long
    Dim CopyRange As Range
    Dim mydata As Workbook
    
    Set CopyRange = Worksheets("Data").Range("B4:J54")
    
    Application.ScreenUpdating = False
    Set mydata = Workbooks.Open("Path and name")
    
    With mydata.Worksheets("Sheet1")
        RowCount = .Cells.Find(What:="*", _
        SearchOrder:=xlRows, _
        SearchDirection:=xlPrevious, _
        LookIn:=xlValues).Row + 1
        CopyRange.Copy
'paste values only
        .Cells(RowCount, 1).PasteSpecial Paste:=xlPasteValues
    End With
'close and save
    mydata.Close True
    With Application
        .ScreenUpdating = True: .CutCopyMode = False
    End With
End Sub
Dave
 
Last edited:

Rolsu

New Member
Joined
Jul 16, 2019
Messages
3
Hi Dave!

It works perfectly!
Thank you so much and sorry again about the missing information.
 

dmt32

Well-known Member
Joined
Jul 3, 2012
Messages
5,925
Office Version
2019
Platform
Windows
Hi Dave!

It works perfectly!
Thank you so much and sorry again about the missing information.
No worries just something to keep in mind next time posting - glad update does what you want

Dave
 

Watch MrExcel Video

Forum statistics

Threads
1,102,872
Messages
5,489,430
Members
407,689
Latest member
Doublealpha

This Week's Hot Topics

  • Timer in VBA - Stop, Start, Pause and Reset
    [CODE=vba][/CODE] Option Explicit Dim CmdStop As Boolean Dim Paused As Boolean Dim Start Dim TimerValue As Date Dim pausedTime As Date Sub...
  • how to updates multiple rows in muliselect listbox
    Hello everyone. I need help with below code. code is only chaning 1st row in mulitiselect list box. i know issue with code...
  • Delete Row from Table
    I am trying to delete a row from a table using VBA using a named range to find what I need to delete. My Range is finding the right cell. In the...
  • Assigning to a variable
    I have a for each block where I want to assign the value in column 5 of the found row to the variable Serv. [CODE=vba] For Each ws In...
  • Way to verify information
    Hi All, I don't know what to call this formula, and therefore can't search. I have a spreadsheet with information I want to reference...
  • Active Cell Address – Inactive Sheet
    How to use VBA to get the cell address of the active cell in an inactive worksheet and then place that cell address in a location on the current...
Top