Добавить строку в начало таблицы после заголовков - PullRequest
0 голосов
/ 14 февраля 2020

Я хочу добавить новые данные в таблицу с формой. У меня он добавляет данные внизу листа.

Я хочу новую информацию вверху.

С моим кодом он отправляет данные на два листа, «домашний» лист и лист, выбранный в первом поле со списком.

Private Sub CommandButton1_Click()
TargetSheet = ComboBox1.Value
If TargetSheet = "" Then
    Exit Sub
End If
Worksheets(TargetSheet).Activate
lastrow = ActiveSheet.Cells(Rows.Count, 1).End(xlUp).Row
ActiveSheet.Cells(lastrow + 1, 1).Value = TextBox1.Value
ActiveSheet.Cells(lastrow + 1, 2).Value = TextBox2.Value
ActiveSheet.Cells(lastrow + 1, 3).Value = TextBox3.Value
ActiveSheet.Cells(lastrow + 1, 4).Value = TextBox4.Value
ActiveSheet.Cells(lastrow + 1, 5).Value = TextBox5.Value
ActiveSheet.Cells(lastrow + 1, 6).Value = TextBox6.Value
ActiveSheet.Cells(lastrow + 1, 7).Value = TextBox7.Value
ActiveSheet.Cells(lastrow + 1, 8).Value = TextBox8.Value

Worksheets("Home").Activate
lastrow = ActiveSheet.Cells(Rows.Count, 1).End(xlUp).Row
ActiveSheet.Cells(lastrow + 1, 1).Value = ComboBox1.Value
ActiveSheet.Cells(lastrow + 1, 2).Value = TextBox1.Value
ActiveSheet.Cells(lastrow + 1, 3).Value = TextBox2.Value
ActiveSheet.Cells(lastrow + 1, 4).Value = TextBox3.Value
ActiveSheet.Cells(lastrow + 1, 5).Value = TextBox4.Value
ActiveSheet.Cells(lastrow + 1, 6).Value = TextBox5.Value
ActiveSheet.Cells(lastrow + 1, 7).Value = TextBox6.Value
ActiveSheet.Cells(lastrow + 1, 8).Value = TextBox7.Value
ActiveSheet.Cells(lastrow + 1, 9).Value = TextBox8.Value
ActiveSheet.Cells(lastrow + 1, 10).Value = Date
ActiveSheet.Cells(lastrow + 1, 11).Value = TimeValue(Now)
ActiveSheet.Cells(lastrow + 1, 12).Value = TextBox9.Value

MsgBox ("Item Added Successfully.")
TextBox1.Value = ""
TextBox2.Value = ""
TextBox3.Value = ""
TextBox4.Value = ""
Worksheets("Home").Activate
Worksheets("Home").Cells(1, 1).Select
End Sub

Как поместить новые данные во второй ряд, поскольку у меня есть заголовки на листе?

1 Ответ

1 голос
/ 14 февраля 2020

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

Некоторые вещи для начала:

  1. Использование опция явная , чтобы у вас не было неожиданного поведения с неопределенными переменными
  2. Всегда делайте отступ в своем коде (см. www.rubberduckvba.com бесплатный инструмент, который поможет вам в этом)
  3. Попробуйте разделить логику c определяющих переменных и повторное их использование
  4. Имя элементы управления ваших форм
  5. Проверьте замечательную статью о пользовательских формах (когда вы чувствуете, что готовы продвигаться вперед)

Проверьте комментарии кода и адаптируйте его под свои нужды

РЕДАКТИРОВАТЬ: Нет нужен квалификатор FullRow, так как мы уже выбираем всю строку, и добавил формат копирования ниже

Код:

Private Sub CommandButton1_Click()

    ' Define object variables
    Dim targetSheet As Worksheet
    Dim homeSheet As Worksheet

    Dim targetSheetName As String
    Dim homeSheetName As String

    Dim targetSheetTopRow As Long
    Dim homeSheetTopRow As Long

    Dim textBox1Value As Variant
    Dim textBox2Value As Variant
    Dim textBox3Value As Variant
    Dim textBox4Value As Variant
    Dim textBox5Value As Variant
    Dim textBox6Value As Variant
    Dim textBox7Value As Variant
    Dim textBox8Value As Variant
    Dim textBox9Value As Variant

    ' Define parameters
    targetSheetTopRow = 2
    homeSheetTopRow = 2
    homeSheetName = "Home"

    ' Validate if combobox has any value
    If Me.ComboBox1.Value = vbNullString Then Exit Sub

    ' Get target sheet name
    targetSheetName = Me.ComboBox1.Value

    ' Add a reference to sheets
    Set targetSheet = ThisWorkbook.Worksheets(targetSheetName)
    Set homeSheet = ThisWorkbook.Worksheets(homeSheetName)

    ' Store current controls values
    textBox1Value = Me.TextBox1.Value
    textBox2Value = Me.TextBox2.Value
    textBox3Value = Me.TextBox3.Value
    textBox4Value = Me.TextBox4.Value
    textBox5Value = Me.TextBox5.Value
    textBox6Value = Me.TextBox6.Value
    textBox7Value = Me.TextBox7.Value
    textBox8Value = Me.TextBox8.Value

    ' No need to activate stuff
    With targetSheet
        ' Insert a row after row 2
        .Range(targetSheetTopRow & ":" & targetSheetTopRow).Insert Shift:=xlDown, CopyOrigin:=xlFormatFromRightOrBelow

        ' Add cells values
        .Cells(targetSheetTopRow, 1).Value = textBox1Value
        .Cells(targetSheetTopRow, 2).Value = textBox2Value
        .Cells(targetSheetTopRow, 3).Value = textBox3Value
        .Cells(targetSheetTopRow, 4).Value = textBox4Value
        .Cells(targetSheetTopRow, 5).Value = textBox5Value
        .Cells(targetSheetTopRow, 6).Value = textBox6Value
        .Cells(targetSheetTopRow, 7).Value = textBox7Value
        .Cells(targetSheetTopRow, 8).Value = textBox8Value
    End With

    With homeSheet
        ' Insert a row after row 2
        .Range(homeSheetTopRow & ":" & homeSheetTopRow).Insert Shift:=xlDown, CopyOrigin:=xlFormatFromRightOrBelow

        ' Add cells values
        .Cells(homeSheetTopRow, 1).Value = textBox1Value
        .Cells(homeSheetTopRow, 2).Value = textBox2Value
        .Cells(homeSheetTopRow, 3).Value = textBox3Value
        .Cells(homeSheetTopRow, 4).Value = textBox4Value
        .Cells(homeSheetTopRow, 5).Value = textBox5Value
        .Cells(homeSheetTopRow, 6).Value = textBox6Value
        .Cells(homeSheetTopRow, 7).Value = textBox7Value
        .Cells(homeSheetTopRow, 8).Value = textBox8Value
        .Cells(homeSheetTopRow, 9).Value = Date
        .Cells(homeSheetTopRow, 10).Value = TimeValue(Now)
        .Cells(homeSheetTopRow, 11).Value = textBox9Value
    End With

    ' Clear control's values
    Me.TextBox1.Value = vbNullString
    Me.TextBox2.Value = vbNullString
    Me.TextBox3.Value = vbNullString
    Me.TextBox4.Value = vbNullString

    ' Alert user
    MsgBox ("Item Added Successfully.")

    ' Goto...
    homeSheet.Activate
    homeSheet.Cells(1, 1).Select

End Sub

Дайте мне знать, если это работает или вам нужна дополнительная помощь

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...