1

如何在 Excel VBA 中组合这两部分代码?

Part 1:

Sub Copypastelastrow()

    Dim MyPath As String
    Dim MyFile As String
    Dim LatestFile As String
    Dim LatestDate As Date
    Dim LMD As Date
    Dim LMD As Variant
    Dim wsCopy As Worksheet
    Dim wsDest As Worksheet
    Dim lCopyLastRow As Long
    Dim lDestLastRow As Long

    MyPath = "C:\Users\andrew\Desktop\newdoc"

    If Right(MyPath, 1) <> "\" Then MyPath = MyPath & "\"
    MyFile = Dir(MyPath & "*.xlsx", vbNormal)
    If Len(MyFile) = 0 Then
        MsgBox "No files were found...", vbExclamation
        Exit Sub
    End If
    Do While Len(MyFile) > 0

        LMD = FileDateTime(MyPath & MyFile)    
        If LMD > LatestDate Then
            LatestFile = MyFile
           LatestDate = LMD
        End If
        MyFile = Dir
    Loop
    Workbooks.Open MyPath & LatestFile

我不明白如何将打开的工作簿设置为活动工作簿并在最后一行下方复制粘贴。我认为错误出现在第 2 部分:对象变量或未设置块变量!


第2部分:

  Set wsCopy = Workbooks("Workbooks.Open MyPath & LatestFile").Worksheets("sheet1")
  Set wsDest = Workbooks("Workbook2").Worksheets("sheet1")
  
  lCopyLastRow = wsCopy.Cells(wsCopy.Rows.Count, "B").End(xlUp).Row
  lDestLastRow = wsDest.Cells(wsDest.Rows.Count, "B").End(xlUp).Offset(1).Row
  
   wsCopy.Range("S3:T" & lCopyLastRow).Copy
    wsDest.Range("B" & lDestLastRow).PasteSpecial Paste:=xlPasteValues
4

1 回答 1

1

参考工作簿

  • 当您打开工作簿时,它变成ActiveWorkbook

    Workbooks.Open MyPath & LatestFile
    Set wsCopy = ActiveWorkbook.Worksheets("Sheet1")
    

    或在一行中:

    Set wsCopy  = Workbooks.Open(MyPath & LastestFile).Worksheets("Sheet1")
    

    要稍后关闭工作簿,您将使用:

    wsCopy.Parent.Close SaveChanges:=False ' usually because it's only read from.
    
  • 使用变量:

    Workbooks.Open MyPath & LatestFile
    Dim wb As Workbook: Set wb = ActiveWorkbook
    Set wsCopy = wb.Worksheets("Sheet1")  
    

    或者:

    Dim wb As Workbook
    Set wb = Workbooks.Open(MyPath & LatestFile)
    Set wsCopy = wb.Worksheets("Sheet1")  
    

    要稍后关闭工作簿,您将使用:

    wsCopy.Parent.Close SaveChanges:=False ' usually because it's only read from.
    

    或者

    wb.Close SaveChanges:=False ' usually because it's only read from.
    
于 2021-03-24T21:01:05.710 回答