【问题标题】:Fill column with value until last row用值填充列直到最后一行
【发布时间】:2019-05-13 13:06:20
【问题描述】:

我的代码应该从 Excel 文件 TimeSheet 中复制数据。每个文件都包含带有人名的标题和带有日常记录的块。代码循环文件夹中的所有 excel 文件并将记录附加到主文件。代码在这里部分解决了。但是现在我在用人名填写 A 列时遇到问题。

代码应首先用任务填充 NewSht 中的 B 列,然后从归档的 B7 OldSht 中获取值并将其复制到 A 列 NewSht 中的第一个空单元格并填充到 B 列中的最后一行。使用当前代码,我得到 ​​p>

'Range类的自动填充方法失败'

错误。

Sub AllFiles()

Application.EnableCancelKey = xlDisabled

Dim folderPath As String
Dim Filename As String
Dim wb As Workbook
Dim Masterwb  As Workbook
Dim sh As Worksheet
Dim NewSht As Worksheet
Dim OldSht As Worksheet
Dim FindRng As Range
Dim target As Range
Dim LastRow As Long

' set master workbook
Set Masterwb = Workbooks("result2.xlsm")

folderPath = "C:\Users\TimeSheets2019\inside" 'contains folder path

If Right(folderPath, 1) <> "\" Then folderPath = folderPath & "\"
Application.ScreenUpdating = False

Filename = Dir(folderPath & "*.xlsx*")
Do While Filename <> ""
    Set wb = Workbooks.Open(folderPath & Filename, ReadOnly:=True)
    Set NewSht = Masterwb.Worksheets("Tabelle1") ' added
    Set OldSht = wb.Worksheets("Manager Form") ' added

    ' get the first empty row in the new sheet
    Set FindRng = NewSht.Cells.Find(What:="*", Lookat:=xlPart, LookIn:=xlFormulas, SearchOrder:=xlByRows, SearchDirection:=xlPrevious, MatchCase:=False)
    Set target = NewSht.Cells(NewSht.Rows.Count, 2).End(xlUp).Offset(1, 0)
LastRow = NewSht.Range("B" & Rows.Count).End(xlUp).Row
    'copy taks list to column B            
    OldSht.Range("B7:B15, B17:B26").Copy
    NewSht.Cells(NewSht.Rows.Count, 2).End(xlUp).Offset(1, 0).PasteSpecial xlPasteValues
' copy person name until last row in coulmn B
    OldSht.Range("B5").AutoFill Destination:=NewSht.Range("A2:A" & LastRow), Type:=xlFillDefault
    wb.Close False

Exit_Loop:
    Set wb = Nothing
    Filename = Dir
Loop
Application.ScreenUpdating = True

End Sub

TimeSheet to copy

Results in Master file

【问题讨论】:

  • OldSht.Range("B5").AutoFill Destination:=NewSht.Range("A2:A" &amp; LastRow), Type:=xlFillDefault 自动填充范围不是必须包含源单元格吗?
  • 自动填充目标必须包括源范围。您需要自动填充或复制/粘贴值吗?
  • @BigBen 是对的。根据文档Range.AutoFill method“目标必须包括源范围。”
  • @BigBen 我只是在编辑它以“包含”您发布的源单元格。
  • @Eve 这不是自动填充的工作方式(请参阅链接文档)。自动填充无法做到这一点。请edit您的问题,并附上您原始数据的屏幕截图以及之后的外观。

标签: excel vba


【解决方案1】:

正如 cmets 中已经指出的那样,Range.AutoFill 仅在目标范围包括源范围时才有效。您不能从一张纸自动填充到另一张纸。

我认为您只需要在这里进行简单的价值转移:

NewSht.Range("A2:A" & LastRow).Value = OldSht.Range("B5").Value

【讨论】:

  • 是的,它可以工作,但是如何用第一个空行替换“A2:A”?目前它为第一个文件正确填写名称,第二次将名称转移到 A1 单元格,即标题
  • 这听起来像 LastRow 是 1,这不是您所期望的。 B列有数据吗?您是否需要将数据粘贴到 B 列之后找到最后一行?
  • 是的@BigBen,这个想法首先将任务列表复制到 B 列,然后将名称添加到 A 列直到结束,然后与其余文件相同
  • 然后在复制步骤之后移动LastRow = NewSht.Range("B" &amp; Rows.Count).End(xlUp).Row
  • 非常感谢@BigBen,以及如何替换“A2:A”,使其从 A 列中的第一个空行开始,而不是 A2?
猜你喜欢
  • 2014-11-05
  • 2022-01-12
  • 1970-01-01
  • 2015-09-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-11-09
相关资源
最近更新 更多