Как вставить на конкретный лист на основе значения текстового поля? - PullRequest
0 голосов
/ 22 декабря 2019

У меня проблемы с получением кнопки для вставки определенных строк в определенный лист, если строка вводится в текстовое поле.

У меня есть пользовательская форма, в которую я хотел бы вставить записи в месяцконкретные листы, основанные на текстовом поле даты. Я могу заставить его скопировать на один конкретный лист без проблем, но я бы хотел, чтобы он автоматически сортировался в соответствующий лист месяца на основе значения, введенного в DT.value

Private Sub Submit_Click()
Dim ws As Worksheet
Dim LastRow As Long

If DT.Value = "nov" Then
Set ws = ThisWorkbook.Worksheets("NOV")
Else
If DT.Value = "dec" Then
Set ws = ThisWorkbook.Worksheets("DEC")
Else
If DT.Value = "Jan" Then
Set ws = ThisWorkbook.Worksheets("JAN")
Else
If DT.Value = "Feb" Then
Set ws = ThisWorkbook.Worksheets("FEB")
Else
If DT.Value = "mar" Then
Set ws = ThisWorkbook.Worksheets("MAR")
Else
If DT.Value = "Apr" Then
Set ws = ThisWorkbook.Worksheets("APR")


LastRow = ws.Range("A" & Rows.Count).End(xlUp).Row + 1
'other code that works just fine below.

С этим кодом я сохраняюзаканчивая несоответствием типов, или просто ничего не копируется.

Я бы хотел, чтобы пользователь мог ввести дату в поле dt.value и вставить все данные в соответствующий лист на основеэто значение.

1 Ответ

1 голос
/ 22 декабря 2019

Это зависит от того, как вы назвали свои вкладки и как ваша дата вменяется в текстовое поле. Но если вы используете mar и MAR, вот простой код для назначения переменной рабочего листа с использованием текста в текстовом поле пользовательской формы.

Dim ws As Worksheet
Set ws = ThisWorkbook.Worksheets(Me.DT.Text)

Обновление базового кода:

Private Sub CommandButton1_Click()
    'Check if the textbox has a valid date
    If IsDate(Me.DT.Text) Then

        Me.DT.Text = Format(CDate(Me.DT.Text), "mmm") 'Format as abrivated month

        'Define and Assign worksheet and newRow variables
        Dim ws As Worksheet, newRow As Long
        Set ws = ThisWorkbook.Worksheets(Me.DT.Text)
        newRow = ws.Range("A" & Rows.Count).End(xlUp).Row + 1

        With ws 'When writing other textbox values to the worksheet; change TextBox# as required
            .Cells(newRow, 1).Value = Me.TextBox1.Text
            .Cells(newRow, 2).Value = Me.TextBox2.Text
            .Cells(newRow, 3).Value = Me.TextBox3.Text
            .Cells(newRow, 4).Value = Me.TextBox4.Text
        End With

        Application.Goto ws.Range("A1"), Scroll:=True 'Set the focus to the first cell on the worksheet

    Else 'If a valid date is not entered display a message box
        MsgBox "Please enter a valid date"
        Cancel = True
    End If
End Sub
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...