You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将多工作簿的文件创建日期填入对应导入数据行的Z列

问题分析与解决方案

问题根源

  1. 循环范围错误:原代码循环源文件的行号(2 To LastRow),直接写入目标表对应行的Z列,导致每次导入都覆盖目标表前N行的Z列数据,而非本次新增的行。
  2. 代码结构混乱:If FileToOpen <> False Then的闭合End If位置错误,导致逻辑分支混乱。
  3. 冗余操作:在循环内重复获取文件创建日期,完全没必要,浪费运行资源。

修正后的VBA代码

Sub GetFile()
    Dim FileToOpen As Variant
    Dim OpenWorkbook As Workbook
    Dim DataWorksheet As Worksheet
    Dim DestCell As Range
    Dim SourceLastRow As Long
    Dim TargetStartRow As Long
    Dim TargetEndRow As Long
    Dim FileCreationDate As Date
 
    Application.ScreenUpdating = False
    Set DataWorksheet = Sheet1
    
    FileToOpen = Application.GetOpenFilename(FileFilter:="Excel Files (*.xlsx*),*xlsx*")
    
    If FileToOpen <> False Then
        Set OpenWorkbook = Application.Workbooks.Open(FileToOpen)
        
        ' 获取源文件有效数据行数
        With OpenWorkbook.Sheets(1)
            SourceLastRow = .Cells(.Rows.Count, "A").End(xlUp).Row
            .Range("A2:Y" & SourceLastRow).Copy
        End With
        
        ' 确定目标表的粘贴起始行
        If DataWorksheet.Range("A2") = "" Then
            Set DestCell = DataWorksheet.Range("A2")
        Else
            Set DestCell = DataWorksheet.Range("A1").End(xlDown).Offset(1, 0)
        End If
        
        ' 粘贴数据
        DestCell.PasteSpecial xlPasteValuesAndNumberFormats
        
        ' 计算本次新增数据的行范围
        TargetStartRow = DestCell.Row
        TargetEndRow = TargetStartRow + SourceLastRow - 2 ' 减去源文件表头行(从A2开始复制)
        
        ' 仅获取一次文件创建日期
        FileCreationDate = CreateObject("Scripting.FileSystemObject").GetFile(FileToOpen).DateCreated
        
        ' 给本次新增的所有行填充Z列(第26列)
        DataWorksheet.Range(DataWorksheet.Cells(TargetStartRow, 26), DataWorksheet.Cells(TargetEndRow, 26)).Value = FileCreationDate
        
        ' 清理操作
        OpenWorkbook.Close False
        Application.CutCopyMode = False
    End If
    
    Application.ScreenUpdating = True
End Sub

关键修改说明

  • 精准定位新增行:通过TargetStartRow和TargetEndRow计算出本次导入数据在目标表中的行范围,确保只给新增行填充日期。
  • 优化日期获取:将文件创建日期的获取移到循环外,仅执行一次,提升代码运行效率。
  • 修正逻辑结构:调整If语句的闭合位置,确保代码分支逻辑清晰正确。

内容的提问来源于stack exchange,提问作者Charisma

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.19 12:41:09