2015-03-21 2 views
0

Я надеюсь, что кто-то может помочь мне с моей проблемой. Я искал этот сайт для правильного кодирования своих электронных таблиц, но ничего не работает.VBA - Создание информационного листа из пользовательской формы

У меня есть две таблицы: у меня есть форма переднего вида (Sheet1), где пользователь может вводить информацию. После того, как пользователь выполнит ввод своей информации, он нажмет кнопку, которая перенесет данные в большую таблицу данных («Записи»). Как только данные копируются из Sheet1 в Records, я хочу, чтобы Sheet1 очищался (чтобы у следующего пользователя была пустая форма для работы). Кроме того, когда новый пользователь вводит информацию, я хочу, чтобы эта информация переходила на строку ниже ввода данных предыдущего пользователя на записях.

Надеюсь, что это имеет смысл ... Это код, который я использую сейчас, который ничего не заполняет в «Записях» (я явно сделал это из-за этого).

Sub BUTTON() 
Dim refTable As Variant, trans As Variant 
refTable = Array("c = e6", "d = e7", "e=e8", "f=e9", "g=e10") 
Dim Row As Long 
Row = Worksheets("Records").UsedRange.Rows.Count + 1 
For Each trans In refTable 
    Dim Dest As String, Field As String 
    Dest = Trim(Left(trans, InStr(1, trans, "=") - 1)) & Row 
    Field = Trim(Right(trans, Len(trans) - InStr(1, trans, "="))) 
Next 

End Sub 

Есть ли у кого-нибудь советы по кодированию? Пожалуйста, дайте мне знать!

+0

Какие значения в массиве, например, '' c = e6 "'? –

+0

В этом примере: «C» будет столбцом приема в Records. «E6» - это местоположение ячейки в форме, которую пользователь будет вводить первым. Другими словами, «E6» в Sheet1 теоретически будет перенесен в столбец «C» после нажатия кнопки. То же самое относится к другим значениям: «E7», следующая ячейка, которую пользователь может заполнить, соответствует столбцу D в листе записей. – LT123

+0

Есть только пять полей на форме (как в вашем примере) или есть еще? –

ответ

0

Попробуйте этот код.

Ключевым битом является установка fields согласно порядку, который вы хотите, чтобы они отображались в worksheets("Records") в столбцах A to V.

Например, в моем примере e6 карты в колонке A, e7 в колонке B и т.д.

Sub MapInputToColumn() 
    Dim fields As Range, rw As Integer, col As Integer 

    Set fields = Union(Range("e6"), Range("e7"), Range("e8"), Range("e9"), Range("e10")) 
    rw = Worksheets("Records").UsedRange.Rows.Count + 1 

    For col = 1 To fields.Count 
     Worksheets("Records").Cells(rw, col) = fields(col, 1) 
    Next col 

    fields.ClearContents 
End Sub 
+0

Привет, Алекс, Спасибо за ваш код! Он очищает Sheet1, когда я нажимаю кнопку, но затем не обновляет листы записей ... любые советы? – LT123

+0

Хммм. Вы пробовали отладку в цикле 'for .... next', чтобы проверить значения rw и col и т. Д.? Это работало для меня, когда я тестировал его –

+0

Sub Copy() Dim fields As Range, rw As Integer, col As Integer Set fields = Union (Range («D6: D9»), Range («F6: F10») , Диапазон («D15: D18»), Диапазон («F15: F16»), Диапазон («C22: F26»), Диапазон («C31: F35»), Диапазон («C39: F43»), Диапазон («D45 :. D46 ")) Rw = (" Рабочие Records ") UsedRange.Rows.Count +- окры = 1 Для fields.Count Таблиц (" Запись ") Клетка (RW, Col) = полей (col, 1) Next col fields.ClearContents End Sub – LT123

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