/ / VBA текстово поле към клетка - excel, excel-vba, vba

VBA текстово поле за клетка - excel, excel-vba, vba

Имам потребителска форма за въвеждане в excel, когато потребителят въвежда данни в три различни текстови полета. Това е моят код

      Private Sub Process_Click()

Worksheets("1").Range("A1").Value = Date.Value
Worksheets("1").Range("B1").Value = Name.Value
Worksheets("1").Range("C1").Value = Amount.Value


End Sub

Така че при първото натискане на процеса ще пишеданните в тези клетки А1, В1 и С1. Това, което искам да направя, е, че всеки път, когато отворя формуляра и кликвам върху формата си, бих искал тези стойности да слязат по ред, например следващия път, когато щракна върху процеса, той ще премине към A2, b2 и c2, и така На.

Отговори:

2 за отговор № 1

Това е подобно на отговора на Баранка.

Основната идея е същата. Проверявате за последно попълнения ред и добавяте данните си един ред по-ниско от този.

Методът, използван тук за намиране на последно попълнения ред, може да е малко по-ефективен от използването на a while цикъл, но трябва да тествате и двете, за да се убедите сами:

Private Sub Process_Click()
Dim appendRow As Long

" add 1 to get the row after the last-populated row
appendRow = Worksheets("1").Cells(Rows.Count,1).End(XlUp).Row + 1

Worksheets("1").Range("A" & appendRow).Value = Date.Value
Worksheets("1").Range("B" & appendRow).Value = Name.Value
Worksheets("1").Range("C" & appendRow).Value = Amount.Value
End Sub

0 за отговор № 2

Първо, трябва да знаете коя е била последната запълнена клетка. Това може да се направи лесно в навигацията на обхвата. Ако приемем, че и трите колони са запълнени с данни, можете да прочетете само една (нека да кажем A), за да получите последния ред:

Dim i as Integer
i = 1
while Worksheets("1").Range("A" & i).Value <> "" or Worksheets("1").Range("A" & i).Value <> 0
i = i + 1
wend

Сега, когато знаете последния попълнен ред:

 Worksheets("1").Range("A" & i).Value = Date.Value
Worksheets("1").Range("B" & i).Value = Name.Value
Worksheets("1").Range("C" & i).Value = Amount.Value

Това е просто начин да го решите и той работи, ако вашият набор от данни не е предназначен да бъде наистина голям. Недостатък е, ако имате много дълга таблица, while може да отнеме известно време, за да проследите последния попълнен ред.

Надявам се това да ви помогне