簡體   English   中英

找到最后一行之后的空白行然后粘貼

[英]Find the blank row after the last row then paste

我有一個按鈕可以打開另一個 Excel 文件。 從那里復制某些列並將其粘貼到這個 Excel 文件中。

當我對粘貼 function 使用穩定范圍時,我的代碼有效(例如 A1 而不是 Range("A" & lDestLastRow))。

我想粘貼到下一個空行。

Sub get_data_from_file()
    Dim FileToOpen as Variant
    Dim OpenBook As Workbook
    Dim wsdest as Worksheet
    Dim lDestLastRow as Long

    Application.ScreenUpdating=False
    Set wsdest = Workbooks("Test.xslm").Worksheets("Input Sheet")
    lDestLastRow=Sheet1.Cells(1,1).CurrentRegion.Row+1

    FileToOpen=Application.GetOpenFileName(Title:="Browse for your file and input range",
    FileFilter:"Excel Files (*xls*),*xls*")
    If FileToOpen<>False Then

        SetOpenBook=Application.Workbooks.Open(FileToOpen)
        OpenBook.Sheets(1)Range(B:E).Copy
        wsdest.Range("A", lDestLastRow).PasteSpecial xlPasteValues
        OpenBook.Sheets(1)Range(G:H).Copy
        wsdest.Range("E", lDestLastRow).PasteSpecial xlPasteValues
        OpenBook.Sheets(1)Range(M:M).Copy
        wsdest.Range("G", lDestLastRow).PasteSpecial xlPasteValues

    End if
    Application.ScreenUpdating=True
End Sub
  1. lDestLastRow=Sheet1.Cells(1,1).CurrentRegion.Row+1沒有找到整個工作表的最后一行。 因此,您應該使用wsDest.UsedRange.Find("*", , , , xlByRows, xlPrevious).Row

  2. 不要將您的變量命名為lDestLastRow ,然后將last row + 1這非常令人困惑。 根據其中的內容命名您的變量,例如lDestNextFreeRow

  3. 修復代碼中的拼寫錯誤.Sheets(1)Range(B:E)應該是.Sheets(1).Range("B:E")等等。

  4. 如果您復制完整的列Range("B:E") ,您只能在完整的列中傳遞它們,否則您會超出工作表的最大行數。 因此,將行限制為您的實際數據,而不是復制完整的列。

     Range("B1:E1").Resize(RowSize:=lSrcLastRow)

    這將使用列BE的第一個單元格,然后將大小調整為找到數據的行數。

像下面這樣的東西應該工作:

Option Explicit

Public Sub get_data_from_file()
    Dim wsDest As Worksheet
    Set wsDest = Workbooks("Test.xslm").Worksheets("Input Sheet")
    
    Dim lDestNextFreeRow As Long 'find next free row in destination sheet
    lDestNextFreeRow = wsDest.UsedRange.Find("*", , , , xlByRows, xlPrevious).Row + 1
    
    Dim FileToOpen As Variant
    FileToOpen = Application.GetOpenFilename(Title:="Browse for your file and input range", FileFilter:="Excel Files (*xls*),*xls*")
    
    If FileToOpen <> False Then
        Dim OpenBook As Workbook
        Set OpenBook = Application.Workbooks.Open(FileToOpen)
        
        Dim lSrcLastRow As Long 'find last used row in the source sheet
        lSrcLastRow = OpenBook.Sheets(1).UsedRange.Find("*", , , , xlByRows, xlPrevious).Row
        
        OpenBook.Sheets(1).Range("B1:E1").Resize(RowSize:=lSrcLastRow).Copy
        wsDest.Range("A" & lDestNextFreeRow).PasteSpecial xlPasteValues
        
        OpenBook.Sheets(1).Range("G1:H1").Resize(RowSize:=lSrcLastRow).Copy
        wsDest.Range("E" & lDestNextFreeRow).PasteSpecial xlPasteValues
        
        OpenBook.Sheets(1).Range("M1").Resize(RowSize:=lSrcLastRow).Copy
        wsDest.Range("G" & lDestNextFreeRow).PasteSpecial xlPasteValues
    End If
End Sub

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM