2016-05-12 2 views
0

Можно ли записать макрос для заполнения формы на другом листе из новой записи строки на листе необработанных данных?Макрос для заполнения формы из новой записи строки (последняя строка)

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

+2

Да, это можно сделать с помощью VBA. Было ли что-нибудь еще в этом вопросе? – CallumDA

+2

(Пожалуйста, прочитайте [Как спросить] (http://stackoverflow.com/help/how-to-ask)). – BruceWayne

+0

Спасибо вам за ответ, особенно с советом о том, как задать хороший вопрос на этом форуме. Тем более, что это был мой первый. Чтобы ответить на ваш вопрос @ CallumDA33, да, есть еще вопрос, который я предполагаю. Сможете ли вы помочь с кодом VBA? –

ответ

0

Ниже приведен пример, который копирует последний раз запись из Data листа Form листа. Поместите код ниже в Data лист в проекте VBA:

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, хотя вы можете использовать свои диапазоны жестко закодированные вручную.

Смежные вопросы