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