将多个文件中的数据添加到摘要电子表格中(带约束)

时间:2016-01-20 18:55:10

标签: excel-vba vba excel

首先,我对Visual Basic(脚本)知之甚少。我已经结合了一些我在网上和通过这个网站找到的代码示例,但是在运行下面的代码时我遇到了一个路障。寻求帮助排除故障。

背景:

  1. 我开发了一个电子表格,用于跟踪我的炼油厂/工厂中发现的所有安全观察结果。这个跟踪器有8个正在使用的主列,A thru H.这个跟踪器有3个主要的标签(表格)可视:“观察列表”,“完成跟踪器”和“完成跟踪2016”。

  2. 制作此跟踪器的副本,我删除了所有数据并将此文件开发为条目形式。这个excel文件(表单)包含允许用户通过VB表单将数据输入到列中的宏,然后通过电子邮件将此表单发送给我。此文件有一个名为“Observations List。”的工作表。

  3. 预期结果:

    我希望收到约。每周20个这样的文件。我的意图是一次打开所有20个文件(活动),然后使用下面的代码,从每个文件中复制包含数据的所有行,并将它们添加到主跟踪器excel文件的底部。此代码将在主跟踪器中运行,并且不会在“完成跟踪器”或“完成跟踪2016”表单的任何日期绘制。每封电子邮件文件的数据从第6行开始。

    我收到的错误是在第38行。它突出显示'LastCol'代码并提供此错误消息 - 编译错误:子或函数未定义。

    Sub AppendDataAfterLastColumn()
    Dim sh As Worksheet
    Dim DestSh As Worksheet
    Dim Last As Long
    Dim CopyRng As Range
    Dim Rng As Range
    
    With Application
        .ScreenUpdating = False
        .EnableEvents = False
    End With
    
    DestSh.Name = "Observations List"
    
     ' Fill in the start row.
    StartRow = 6
    
    ' Loop through all worksheets and copy the data to the
    ' summary worksheet.
    For Each sh In ActiveWorkbook.Worksheets
    
        If sh.Name <> DestSh.Name And sh.Name <> "Completion Tracker" And sh.Name <> "Completion Tracker 2016" Then
    
             ' Use all cells on the sheet
             ' Set Rng = Sheets("Observations List").Cells
    
            ' Find the last column with data on the summary
            ' worksheet.
            Last = LastCol(DestSh)
    
            ' Fill in the columns that you want to copy.
            Set CopyRng = sh.Range("A:H")
    
            ' Test to see whether there enough rows in the summary
            ' worksheet to copy all the data.
            If Last + CopyRng.Columns.Count > DestSh.Columns.Count Then
                MsgBox "There are not enough columns in " & _
                   "the summary worksheet."
                GoTo ExitTheSub
            End If
    
            ' This statement copies values, formats, and the column width.
            CopyRng.Copy
            With DestSh.Cells(1, Last + 1)
                .PasteSpecial 8    ' Column width
                .PasteSpecial xlPasteValues
                .PasteSpecial xlPasteFormats
                Application.CutCopyMode = False
            End With
    
        End If
    Next
    
    ExitTheSub:
    
    Application.Goto DestSh.Cells(1)
    
    With Application
        .ScreenUpdating = True
        .EnableEvents = True
    End With
    End Sub
    

0 个答案:

没有答案