2016-06-15 2 views
-1

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

Для первого он хорошо работает и добавляет данные после заполненных, но второй не делает, поскольку он добавляет данные, находящиеся далеко от заполненных.

Вот изображение: Screenshot

Вот код:

Private Sub CommandButton1_Click() 
Dim RowCount As Long 

If CategoriesComboBox.Value = "Household" Then 
RowCount = Worksheets("Data Lists").Range("C7").CurrentRegion.Rows.Count 

With Worksheets("Data Lists").Range("C7") 
    .Offset(RowCount, 0).Value = Me.NameTextBox.Value 
End With 
End If 

If CategoriesComboBox.Value = "Entertainment" Then 
RowCount = Worksheets("Data Lists").Range("D7").CurrentRegion.Rows.Count 

With Worksheets("Data Lists").Range("D7") 
    .Offset(RowCount, 0).Value = Me.NameTextBox.Value 
End With 
End If 

If CategoriesComboBox.Value = "Food" Then 
RowCount = Worksheets("Data Lists").Range("E7").CurrentRegion.Rows.Count 

With Worksheets("Data Lists").Range("E7") 
    .Offset(RowCount, 0).Value = Me.NameTextBox.Value 
End With 
End If 
If CategoriesComboBox.Value = "Gifts/Donations" Then 
RowCount = Worksheets("Data Lists").Range("F7").CurrentRegion.Rows.Count 

With Worksheets("Data Lists").Range("F7") 
    .Offset(RowCount, 0).Value = Me.NameTextBox.Value 
End With 
End If 
If CategoriesComboBox.Value = "Children" Then 
RowCount = Worksheets("Data Lists").Range("G7").CurrentRegion.Rows.Count 

With Worksheets("Data Lists").Range("G7") 
    .Offset(RowCount, 0).Value = Me.NameTextBox.Value 
End With 
End If 

If CategoriesComboBox.Value = "Investment Accounts" Then 
RowCount = Worksheets("Data Lists").Range("G7").CurrentRegion.Rows.Count 

With Worksheets("Data Lists").Range("G7") 
    .Offset(RowCount, 0).Value = Me.NameTextBox.Value 
End With 
End If 

If CategoriesComboBox.Value = "Medical" Then 
RowCount = Worksheets("Data Lists").Range("G7").CurrentRegion.Rows.Count 

With Worksheets("Data Lists").Range("G7") 
    .Offset(RowCount, 0).Value = Me.NameTextBox.Value 
End With 
End If 

If CategoriesComboBox.Value = "Other" Then 
RowCount = Worksheets("Data Lists").Range("G7").CurrentRegion.Rows.Count 

With Worksheets("Data Lists").Range("G7") 
    .Offset(RowCount, 0).Value = Me.NameTextBox.Value 
End With 
End If 

If CategoriesComboBox.Value = "Personal" Then 
RowCount = Worksheets("Data Lists").Range("G7").CurrentRegion.Rows.Count 

With Worksheets("Data Lists").Range("G7") 
    .Offset(RowCount, 0).Value = Me.NameTextBox.Value 
End With 
End If 

If CategoriesComboBox.Value = "Pets" Then 
RowCount = Worksheets("Data Lists").Range("G7").CurrentRegion.Rows.Count 

With Worksheets("Data Lists").Range("G7") 
    .Offset(RowCount, 0).Value = Me.NameTextBox.Value 
End With 
End If 

If CategoriesComboBox.Value = "Taxes/Legal" Then 
RowCount = Worksheets("Data Lists").Range("G7").CurrentRegion.Rows.Count 

With Worksheets("Data Lists").Range("G7") 
    .Offset(RowCount, 0).Value = Me.NameTextBox.Value 
End With 
End If 

If CategoriesComboBox.Value = "Transportation" Then 
RowCount = Worksheets("Data Lists").Range("G7").CurrentRegion.Rows.Count 

With Worksheets("Data Lists").Range("G7") 
    .Offset(RowCount, 0).Value = Me.NameTextBox.Value 
End With 
End If 
End Sub 
+1

Можете ли вы вставьте свой макрос, как текст? Обычно нам не нравится набирать ваш макрос, а затем работать над исправлением. Но я собираюсь догадаться, что это ваше использование «CurrentRegion», которое, возможно, не та область, которую вы ожидаете от нее? – BruceWayne

+0

@BruceWayne Извините за это. Я здесь новенький. Вот макрос (я не закончил их все, как вы видите, потому что я использовал копию и вставку для дублирования). Я использовал то же самое для других. Private Sub CommandButton1_Click() Dim RowCount As Long Если CategoriesComboBox.Value = "бытовой" Тогда RowCount = ("Рабочие листы Списки данных"). Range ("C7"). CurrentRegion.Rows.Count С Таблицах ("Списки данных"). Range ("С7") .Offset (RowCount, 0) .Value = Me.NameTextBox.Value End With End If –

ответ

1

Это должно решить:
Correct для обоих ROWCOUNT переменных

'RowCount in household 
RowCount = Cells(Rows.Count, "C").End(xlUp).Row + 1 'probably + 1 is going to leave a blank, check for it 
'RowCount in entretainment 
RowCount = Cells(Rows.Count, "D").End(xlUp).Row + 1 'probably + 1 is going to leave a blank, check for it 
'... and so on for each field in your form with its corresponding Column letter 


PS: " Я спешу. e ASAP. " не является хорошим способом просить о вещах. Это не мы работаем для бесплатного сайта и доступности 24/7, особенно если вы вставляете только то, что хотите.

EDIT:
Заменить этот

If CategoriesComboBox.Value = "Entertainment" Then 
RowCount = Worksheets("Data Lists").Range("D7").CurrentRegion.Rows.Count 

With Worksheets("Data Lists").Range("D7") 
    .Offset(RowCount, 0).Value = Me.NameTextBox.Value 
End With 
End If 

Для этого:

If CategoriesComboBox.Value = "Entertainment" Then 
RowCount = Worksheets("Data Lists").Cells(Rows.Count, "D").End(xlUp).Row -6 'since offset is starting at D7 

With Worksheets("Data Lists").Range("D7") 
    .Offset(RowCount, 0).Value = Me.NameTextBox.Value 
End With 
End If 
+1

+1 для PS. Кроме того, просто примечание к OP: вы можете хотеть (err, should) квалифицировать «Cells()» и «Rows.Count» с листом, который вы ожидаете от запуска (используя «С» или просто добавить лист имя перед '.Cells()' и '.Rows.Count' – BruceWayne

+1

+1 Да, это хорошая практика, однако, во многом зависит от контекста, например, если пользовательская форма вызывается только из последовательности, которая может доступ к ним внутри листа -IE: командная кнопка - я думаю, что это сэкономит вам несколько строк для кодирования и сделает поток более понятным из того, как должно было работать. – Sgdva

+0

Это не работает корректно. между строками –

0

То, что я хочу, это просто выход в специально отведенных ячейках --->Sample

Private Sub CommandButton1_Click() 
Dim RowCount As Long 

If CategoriesComboBox.Value = "Household" Then 
RowCount = Worksheets("Data Lists").Range("C7").CurrentRegion.Rows.Count 

With Worksheets("Data Lists").Range("C7") 
    .Offset(RowCount, 0).Value = Me.NameTextBox.Value 
End With 
End If 

If CategoriesComboBox.Value = "Entertainment" Then 
RowCount = Worksheets("Data Lists").Cells(Rows.Count, "D").End(xlUp).Row - 6 'since offset is starting at D7 

With Worksheets("Data Lists").Range("D7") 
    .Offset(RowCount, 0).Value = Me.NameTextBox.Value 
End With 
End If 

If CategoriesComboBox.Value = "Food" Then 
RowCount = Worksheets("Data Lists").Range("E7").CurrentRegion.Rows.Count 

With Worksheets("Data Lists").Range("E7") 
    .Offset(RowCount, 0).Value = Me.NameTextBox.Value 
End With 
End If 
If CategoriesComboBox.Value = "Gifts/Donations" Then 
RowCount = Worksheets("Data Lists").Range("F7").CurrentRegion.Rows.Count 

With Worksheets("Data Lists").Range("F7") 
    .Offset(RowCount, 0).Value = Me.NameTextBox.Value 
End With 
End If 
If CategoriesComboBox.Value = "Children" Then 
RowCount = Worksheets("Data Lists").Range("G7").CurrentRegion.Rows.Count 

With Worksheets("Data Lists").Range("G7") 
    .Offset(RowCount, 0).Value = Me.NameTextBox.Value 
End With 
End If 

If CategoriesComboBox.Value = "Investment Accounts" Then 
RowCount = Worksheets("Data Lists").Range("G7").CurrentRegion.Rows.Count 

With Worksheets("Data Lists").Range("G7") 
    .Offset(RowCount, 0).Value = Me.NameTextBox.Value 
End With 
End If 

If CategoriesComboBox.Value = "Medical" Then 
RowCount = Worksheets("Data Lists").Range("G7").CurrentRegion.Rows.Count 

With Worksheets("Data Lists").Range("G7") 
    .Offset(RowCount, 0).Value = Me.NameTextBox.Value 
End With 
End If 

If CategoriesComboBox.Value = "Other" Then 
RowCount = Worksheets("Data Lists").Range("G7").CurrentRegion.Rows.Count 

With Worksheets("Data Lists").Range("G7") 
    .Offset(RowCount, 0).Value = Me.NameTextBox.Value 
End With 
End If 

If CategoriesComboBox.Value = "Personal" Then 
RowCount = Worksheets("Data Lists").Range("G7").CurrentRegion.Rows.Count 

With Worksheets("Data Lists").Range("G7") 
    .Offset(RowCount, 0).Value = Me.NameTextBox.Value 
End With 
End If 

If CategoriesComboBox.Value = "Pets" Then 
RowCount = Worksheets("Data Lists").Range("G7").CurrentRegion.Rows.Count 

With Worksheets("Data Lists").Range("G7") 
    .Offset(RowCount, 0).Value = Me.NameTextBox.Value 
End With 
End If 

If CategoriesComboBox.Value = "Taxes/Legal" Then 
RowCount = Worksheets("Data Lists").Range("G7").CurrentRegion.Rows.Count 

With Worksheets("Data Lists").Range("G7") 
    .Offset(RowCount, 0).Value = Me.NameTextBox.Value 
End With 
End If 

If CategoriesComboBox.Value = "Transportation" Then 
RowCount = Worksheets("Data Lists").Range("G7").CurrentRegion.Rows.Count 

With Worksheets("Data Lists").Range("G7") 
    .Offset(RowCount, 0).Value = Me.NameTextBox.Value 
End With 
End If 
End Sub 
Смежные вопросы