【问题标题】:I want to copy data from another workbook to my current workbook using vba code我想使用 vba 代码将数据从另一个工作簿复制到我当前的工作簿
【发布时间】:2022-12-11 11:45:02
【问题描述】:

我只在所有列中获得相同的值。这是我的代码,请帮助我进行更改。我想使用以下代码将工作表 1 中的值复制到工作表 2,但它只允许我在所有列中粘贴相同的值。我知道必须对最后一行做些什么。但不确定它是什么。

Private Sub Btn_load_data_file_Click()
   Dim FileLocation As String
   Dim LastRow As Long
   Dim wb As Workbook
   Set wb = ActiveWorkbook
    
    FileLocation = Application.GetOpenFilename
    If FileLocation = "False" Then
        Beep
        Exit Sub
    End If
    
    Application.ScreenUpdating = False
    Set ImportWorkbook = Workbooks.Open(Filename:=FileLocation)
    LastRow = ImportWorkbook.Worksheets("Projects").Range("A7").End(xlDown).row
    curr_lrow = wb.Worksheets("Projects").Range("A5").End(xlDown).row
    
    'Copy range to clipboard
    ImportWorkbook.Worksheets("Projects").Range("B7", "B" & LastRow).Copy
    ImportWorkbook.Worksheets("Projects").Range("C7", "C" & LastRow).Copy
    'PasteSpecial to paste values, formulas, formats, etc.
    wb.Worksheets("Projects").Range("A" & LastRow).PasteSpecial Paste:=xlPasteValues
    wb.Worksheets("Projects").Range("C" & LastRow).PasteSpecial Paste:=xlPasteValues
  
End Sub


【问题讨论】:

  • 您好,您的粘贴范围应与复制的范围大小相同。您的 Range("A"+LastRow) 仅返回 1 个单元格。
  • @bracko - 不,这不是必需的。您可以毫无问题地粘贴到单个单元格。
  • 您是说 Range("B7", "B" & LastRow) 还是 Range("B7:B" & LastRow)?第一个只有两个单元格,第二个是第 7 行和 LastRow 之间的所有单元格。您还需要在每次复制后粘贴 - 您不能复制 2 份然后粘贴 2 次....
  • 这有效,谢谢 :)

标签: excel vba


【解决方案1】:

尝试这样的事情:

Private Sub Btn_load_data_file_Click()
    
    Dim FileLocation As String
    Dim LastRow As Long, wsPaste As Worksheet, curr_lrow As Long
    Dim wb As Workbook, ImportWorkbook As Workbook, wsImport As Worksheet
    
    FileLocation = Application.GetOpenFilename
    If FileLocation = "False" Then
        Beep
        Exit Sub
    End If
    
    Set wb = ActiveWorkbook
    Set wsPaste = wb.Worksheets("Projects")
    
    Application.ScreenUpdating = False
    Set ImportWorkbook = Workbooks.Open(Filename:=FileLocation)
    Set wsImport = ImportWorkbook.Worksheets("Projects")
    
    LastRow = wsImport.Cells(Rows.Count, "A").End(xlUp).Row + 1 'safer than .End(xlDown)...
    curr_lrow = wsPaste.Cells(Rows.Count, "A").End(xlUp).Row + 1
    
    CopyValues wsImport.Range("B7:B" & LastRow), wsPaste.Range("A" & curr_lrow)
    CopyValues wsImport.Range("C7:C" & LastRow), wsPaste.Range("C" & curr_lrow)
    
    ImportWorkbook.Close False
   
End Sub

'Copy values from `rngFrom` to `rngTo`
Sub CopyValues(rngFrom As Range, rngTo As Range)
    With rngFrom
        rngTo.Cells(1).Resize(.Rows.Count, .Columns.Count).Value = .Value
    End With
End Sub

【讨论】:

  • 感谢@Tim Williams,这对我有用。
  • 很高兴听到。如果您得到有用的答案,请不要忘记将其标记为已接受,以帮助以后遇到类似问题的其他人。
猜你喜欢
  • 2023-02-02
  • 2013-09-01
  • 2017-02-26
  • 1970-01-01
  • 1970-01-01
  • 2019-04-04
  • 1970-01-01
  • 1970-01-01
  • 2014-12-09
相关资源
最近更新 更多