Введите данные из 10 текстовых полей, но НЕ отправляйте значения пустых текстовых полей в ячейки (используя пользовательскую форму excel vba) - PullRequest
0 голосов
/ 05 августа 2020

Я хотел бы ввести данные из пользовательской формы текстового поля ~ 10 в лист Excel только для заполненных текстовых полей.

В настоящее время у меня есть код для заполнения ячеек из пользовательской формы, и он работает, но если Пользователь не заполняет остальные текстовые поля, он по-прежнему вводит эти пустые данные.

Текущее состояние:

Partial Textbox All Data Entered

Future State: Only 2 ROWS FILLED...

Введены только частичные данные

Как я могу указать коду, что если какое-либо из полей в текстовых полях 1-10 пусто, не вводить ... введите только текстовые поля, заполненные под этим номером RMA и именем клиента? ?

Спасибо!

Это текущий код (благодаря помощи предыдущих вопросов):


                Private Sub EnterButton_Click()
                
                
                
                           
                If TB1.Value = "" Then
               
                Else
                
                        Worksheets("RMA Tracker").Activate
                        Dim i As Long
                    
                    
                    For i = 1 To 10
                        
                        Dim lastrow As Long ' should put a data type with dim statements
                             
                        lastrow = ActiveSheet.Cells(Rows.Count, 1).End(xlUp).Row
                        lastrow = lastrow + 1
                        
                      
                       
                        Cells(lastrow, 1) = RecForm.Controls("RMATB").Value 
                        Cells(lastrow, 2) = RecForm.Controls("CustCB").Value
                        Cells(lastrow, 3) = RecForm.Controls("TB" & i).Value
                        Cells(lastrow, 4) = RecForm.Controls("SNTB" & i).Value
                        Cells(lastrow, 5) = RecForm.Controls("ReceiveTB").Value
                             
                Next i
                        
                 
                 
                 
                 
                
                End If
                            
                ActiveWorkbook.Save
                
                 
                Call resetform
                
                End Sub



        Sub resetform()
                
                
                RMATB.Value = ""
                CustCB.Value = ""
                TB1.Value = ""
                SNTB1.Value = ""
                TB2.Value = ""
                SNTB2.Value = ""
                TB3.Value = ""
                SNTB3.Value = ""
                TB4.Value = ""
                SNTB4.Value = ""
                TB5.Value = ""
                SNTB5.Value = ""
                TB6.Value = ""
                SNTB6.Value = ""
                TB7.Value = ""
                SNTB7.Value = ""
                TB8.Value = ""
                SNTB8.Value = ""
                TB9.Value = ""
                SNTB9.Value = ""
                TB10.Value = ""
                SNTB10.Value = ""
                
                ReceiveTB = ""
                
                'sets focus on that first textbox again
                RecForm.RMATB.SetFocus
                
                
        End Sub

Ответы [ 2 ]

0 голосов
/ 05 августа 2020

Второй вариант - выйти из For, когда вы найдете первое пустое текстовое поле, примерно так:

   For i = 1 To 10
       If Trim(RecForm.Controls("TB" & i).Value) = "" And Trim(ecForm.Controls("SNTB" & i).Value) = "" Then 
            GoTo MyNextCode 
        End If
        Dim lastrow As Long ' should put a data type with dim statements
                 
        lastrow = ActiveSheet.Cells(Rows.Count, 1).End(xlUp).Row
        lastrow = lastrow + 1
            
        Cells(lastrow, 1) = RecForm.Controls("RMATB").Value
        Cells(lastrow, 2) = RecForm.Controls("CustCB").Value
        Cells(lastrow, 3) = RecForm.Controls("TB" & i).Value
        Cells(lastrow, 4) = RecForm.Controls("SNTB" & i).Value
        Cells(lastrow, 5) = RecForm.Controls("ReceiveTB").Value
    Next i
MyNextCode:
...

Это не будет большой разницей для такого количества элементов управления, но если вы Если бы было больше элементов управления, этот метод завершился бы после первого пустого, тем самым предотвращая необходимость go кода через все (в данном случае) элементы управления .... Еще одним преимуществом этого решения является то, что вы предотвращаете, например, PN1, PN2, а затем внезапно PN5 (не знаю, уместно ли это здесь, конечно ...). По опыту я знаю, что если у вас есть много данных до go, вы будете более счастливы, используя этот второй вариант, вариант 1 отлично подходит для того объема данных, который у вас есть, и будет отлично работать для большого количества данных или элементов управления. так же хоть и медленнее ...

0 голосов
/ 05 августа 2020

Внутри l oop добавьте проверку, чтобы проверить, не являются ли записи пустыми. Примерно так:

   For i = 1 To 10
       If Trim(RecForm.Controls("TB" & i).Value) <> "" And Trim(ecForm.Controls("SNTB" & i).Value) <> "" Then
            Dim lastrow As Long ' should put a data type with dim statements
                 
            lastrow = ActiveSheet.Cells(Rows.Count, 1).End(xlUp).Row
            lastrow = lastrow + 1
            
            Cells(lastrow, 1) = RecForm.Controls("RMATB").Value
            Cells(lastrow, 2) = RecForm.Controls("CustCB").Value
            Cells(lastrow, 3) = RecForm.Controls("TB" & i).Value
            Cells(lastrow, 4) = RecForm.Controls("SNTB" & i).Value
            Cells(lastrow, 5) = RecForm.Controls("ReceiveTB").Value
       End If
   Next i
...