如何将所有列数据从一个Excel复制到另一个Excel工作表

时间:2018-01-10 08:19:11

标签: excel vba excel-vba

我正在尝试将所有列数据从一个excel的列范围A:AU 复制到我写的 A:AU 列的另一个excel中代码。

这两个excel都放在我的计算机的不同位置,我已经在我想要粘贴数据的excel中写了我的vba代码,而不是在复制数据的excel中。

复制数据的Excel的名称是" EXRData_08.01.2018.xlsx" ,工作表名称是" EXR_extract_EX"

&安培;我要粘贴数据的excel名称以及我写的vba代码的位置是" UnattendedData.xlsm" ,工作表名称是" RawData&# 34;

我正在尝试从第一个Excel中复制范围A:AU 中的整个列内容,并将其粘贴到另一个存在代码的excel中的相同范围的A:AU 中但我收到错误,它没有运行。请帮助我。

下面是我的代码 -

Sub panos()
  Dim r1 As Range, r2 As Range, N As Long

  Workbooks.Open "\01_Tool\Data\EXRData_08.01.2018.xlsx"
  N = Sheets("EXR_extract_EX").Cells(Rows.Count, "A:AU").End(xlUp).Row
  Set r1 = Sheets("EXR_extract_EX").Range("A:AU" & N)

  Workbooks.Open "_Master\Saurabh\UnattendedData.xlsm"
  Set r2 = Sheets("RawData").Range("A:AU")

  r1.Copy r2
End Sub

1 个答案:

答案 0 :(得分:1)

  1. 您不需要打开UnattendedData.xlsm。如果这是您运行的工作簿,则代码已经打开。
  2. 使用Workbooks.Open的完整路径,否则会遇到问题。
  3. 尽可能使用Worksheets代替SheetsSheets还包含图表等。
  4. 如果您使用WorksheetsSheets,请始终指定工作簿,如wb.Worksheets(…)。否则Excel会猜测工作簿并可能会失败。
  5. 代码中的实际问题是Range("A:AU" & N)无效范围。例如。对于N=15,这会导致"A:AU15"无效。它应该是"A15:AU15""A:AU"

    我怀疑如果列的其余部分是空的,那么使用其中一个或那个的性能有很大的优势,所以我只想复制整列。

    示例:

    Option Explicit 'make sure all variables have to be declared correctly
    
    Public Sub CopyRanges()
        Dim wb As Workbook
        Set wb = Workbooks.Open("C:\YOUR_FULL_PATH_HERE\01_Tool\Data\EXRData_08.01.2018.xlsx")
    
        Dim shtSource As Worksheet
        Set shtSource = wb.Worksheets("EXR_extract_EX")
                       '^-- Always specify a wb for a sheet
    
        Dim shtDestination As Worksheet
        Set shtDestination = ThisWorkbook.Worksheets("RawData")
                             '^-- here we specify the workbook we are running  the code in
        'copy the ranges
        shtSource.Range("A:AU").Copy shtDestination.Range("A:AU")
    
        wb.Close SaveChanges:=False 'don't forget to close the workbook
    End Sub
    

    请注意,如果您需要相对于ThisWorkbook路径的路径,则可以使用类似

    的路径
    ThisWorkbook.Path & "\01_Tool\Data\EXRData_08.01.2018.xlsx"
    

    如果它位于相同的基本路径但是不同的子文件夹中,您可以使用\..\向后移动以退出子文件夹,例如

    ThisWorkbook.Path & "\..\..\01_Tool\Data\EXRData_08.01.2018.xlsx"