Посмотрите на этот код и посмотрите, можете ли вы его адаптировать к своей ситуации.
Что происходит:
Пользовательская форма активизирован и SheetName установлен, и вспомогательный ClearData вызывается.
Когда вы нажимаете кнопку «Обновить», вызывается субпозиция PutData.
PutData просто помещает данные из элементов управления UserForm (текстовые поля, поля списка, поля со списком, флажки и т. Д.) В лист, основанный на адресе.
ClearData сбрасывает UserForm, чтобы очистить свежую дату в поле TextBox.
Если вы хотите построить навигатор для перемещения по всем записям, это еще одна история, но если вы это сделали, то элемент GetData сделает полную противоположность PutData. Я приведу пример GetData, но не буду добавлять элементы управления навигации для краткости.
Результатом является то, что вы будете передавать значения из пользовательской формы в новой строке рабочего листа при нажатии «Обновить», а затем сбросить с новой датой.
Переводников: включенных в примере
- UserForm_Activate
- cmdUpdate_click
- cmdClear_Click
- PutData
- ClearData
- GetData (Bonus)
Этот код помещаются в коде пользовательской формы, объявление переменных выше активации делает объем этих переменный вся форма пользователя и доступно для каждого суб на нем.
Dim lastRow As Long, lRow As Long
Dim sheetName As String
Private Sub UserForm_Activate()
sheetName = "Database"
Call ClearData
End Sub
Private Sub cmdUpdate_Click()
Call PutData
End Sub
Private Sub cmdClear_Click()
Call ClearData
End Sub
Private Sub PutData()
'Save the Text from the Control into the sheet, using .Cells(row,col)
Sheets(sheetName).Cells(lRow, 1) = txtDate.Text
Sheets(sheetName).Cells(lRow, 13) = txtValue.Text
ActiveWorkbook.Save
Call ClearData
End Sub
Private Sub ClearData()
txtDate.Text = Now 'Reset the UserForm to blank with the date as NOW.
txtValue.Text = ""
'Re-Acquire the last Row and set the new row variable.
lastRow = Sheets(sheetName).Range("A" & Rows.count).End(xlUp).row
lRow = lastRow + 1
End Sub
Примечание: событие нажмите для командных кнопок просто вызовите подпрограмму, которая делает фактическую работу. Причина этого очевидна с помощью sub ClearData. Он вызывается как при активации формы, так и после обновления, а также нажатии кнопки cmdClear. Поэтому вместо того, чтобы писать три раза и обновлять его или исправлять, когда он изменяется, все это в одном месте, и вы вызываете его из нескольких источников.
Бонус: Этот дополнительный элемент является дополнительным, который вы можете использовать, если вы решите перемещаться по всем своим записям. Для этого у вас будет кнопка для Prev, Next, First, Last, New и т. Д., А затем каждый снимет или повысит значение lRow соответствующим образом и вызовет GetData.
Here is a link to an answer I provided that does exactly that, имена переменных немного отличаются от этого, но функциональность понятна.
Я включаю его, потому что он показывает Как заполнить UserForm данными из листа.
Private Sub GetData()
'If you get a navigating control for your row source, you can use a GetData sub
'To bring data from your sheet to the User Form.
'Changing lRow changes the Sheets Row Source. Call GetData to refresh the Form.
txtDate.Text = Sheets(sheetName).Cells(lRow, 1)
txtValue.Text = Sheets(sheetName).Cells(lRow, 13)
End Sub
также: Поскольку я не вижу ничего в коде защиты рабочих листов, я не в том числе не-защищая их, чтобы избежать путаницы в будущем читателей. Это просто дает рабочий пример того, как перемещать данные в UserForms и Worksheets и из них.
Я хотел бы попросить вас создать резервную копию и, возможно, просто пересмотреть вопрос, чтобы объяснить, где вы хотите сохранить значения. т.е. TextBox1 в столбец C и т. д. Предполагая, что все идут в одну строку. Или объясните, что вы пытаетесь выполнить. Иногда может быть лучший способ, если было ясно, что вы собираетесь делать в общей картине, а не просто решить эту проблему с нынешним подходом. Если это имеет смысл .... – peege
Сколько полей находится в UserForm? Каковы их имена и какой столбец будет содержать ценность каждого из них? Как бы то ни было, вы пытаетесь поместить некоторые данные в «Таблицы» («База данных»). Ячейки ([newRow], 13) »и, возможно, дата в столбце A? – peege