用于从新行条目(最后一行)填充表单的宏

时间:2016-05-12 15:53:16

标签: excel excel-vba excel-formula vba

是否可以编写宏来在原始数据工作表上的新行条目中填充不同工作表上的表单?

Macro to populate form from new row entry (last row)

1 个答案:

答案 0 :(得分:0)

以下示例将最后编辑的条目从Data表复制到Form表。将以下代码放入VBA项目中的Data工作表:

Option Explicit

Private Sub Worksheet_Change(ByVal Target As Range)

    Static objTargetCells As Object
    Dim objTargetCell As Range
    Dim strHeader As Variant
    Dim objTargetSheet As Worksheet
    Dim x As Long

    Set objTargetSheet = Sheets("Form")

    If objTargetCells Is Nothing Then
        Set objTargetCells = CreateObject("Scripting.Dictionary")
        x = 1
        Do
            strHeader = Target.Worksheet.Cells(1, x).Value
            Set objTargetCell = objTargetSheet.Cells.Find(strHeader, , xlValues, xlWhole, xlByRows, xlNext, True, , False)
            Set objTargetCells(strHeader) = objTargetCell.Offset(0, 1)
            x = x + 1
        Loop While Cells(1, x).Value <> ""
    End If

    With Target.Worksheet
        If .Cells(1, Target.Column).Value <> "" And Target.Row <> 1 Then
            x = 1
            For Each strHeader In objTargetCells
                objTargetCells(strHeader).Value = .Cells(Target.Row, x).Value
                x = x + 1
            Next
            objTargetSheet.Cells.EntireColumn.AutoFit
        End If
    End With

End Sub

这是Data工作表看起来像:

Data

Form工作表:

Form

代码在每个Data工作表更改事件上运行。第一次在Data工作表上创建表字段字典,并在Form工作表上使用对相应目标单元格的引用填充它。这些单元格可以通过.Find方法找到,但您可以手动使用硬编码范围。