Уважаемые специалисты-форумчане! есть рабочий макрос. который добавляет новую строку по введенным в юзерформу данным. Необходимо, чтобы после введения строки, была выделена первая ячейка именно из этой введенной строки. Причем, даже после проведения сортировки, указанной в макросе. СПАСИБО. Это нужно для того, чтобы после введения новой строки не искать ее с помощью поисковика. [vba]
Код
Private Sub CommandButton1_Click() Application.Worksheets("Лист2").Activate If номер.Text = "" Then MsgBox ("Поле данных необходимо заполнить") Exit Sub End If Nom = 0 While Worksheets("Лист2").Cells(Nom + 2, 3).Value <> "" Wend For i = 1 To Nom If CStr(Worksheets("Лист2").Cells(i + 1, 4).Value) = _ CStr(номер.Text) Then MsgBox ("Такой номер уже встречался") Exit Sub End If Next Worksheets("Лист2").Cells(i + 1, 4).Value = номер.Text Worksheets("Лист2").Cells(i + 1, 1).Value = TextBox1.Text Worksheets("Лист2").Cells(i + 1, 2).Value = TextBox2.Text Worksheets("Лист2").Cells(i + 1, 3).Value = TextBox3.Text MsgBox ("Информация внесена") Unload Me Nom = Nom + 1 UserForm3.Hide Range("A1:D19").Select 'сортировка ActiveWorkbook.Worksheets("Лист2").Sort.SortFields.Clear ActiveWorkbook.Worksheets("Лист2").Sort.SortFields.Add Key:=Range("D1:D13"), _ SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal With ActiveWorkbook.Worksheets("Лист2").Sort .SetRange Range("A1:D13") .Header = xlGuess .MatchCase = False .Orientation = xlTopToBottom .SortMethod = xlPinYin .Apply End With Range("D1:D10000").Find(номер.Text).Selectt End Sub
[/vba]
Уважаемые специалисты-форумчане! есть рабочий макрос. который добавляет новую строку по введенным в юзерформу данным. Необходимо, чтобы после введения строки, была выделена первая ячейка именно из этой введенной строки. Причем, даже после проведения сортировки, указанной в макросе. СПАСИБО. Это нужно для того, чтобы после введения новой строки не искать ее с помощью поисковика. [vba]
Код
Private Sub CommandButton1_Click() Application.Worksheets("Лист2").Activate If номер.Text = "" Then MsgBox ("Поле данных необходимо заполнить") Exit Sub End If Nom = 0 While Worksheets("Лист2").Cells(Nom + 2, 3).Value <> "" Wend For i = 1 To Nom If CStr(Worksheets("Лист2").Cells(i + 1, 4).Value) = _ CStr(номер.Text) Then MsgBox ("Такой номер уже встречался") Exit Sub End If Next Worksheets("Лист2").Cells(i + 1, 4).Value = номер.Text Worksheets("Лист2").Cells(i + 1, 1).Value = TextBox1.Text Worksheets("Лист2").Cells(i + 1, 2).Value = TextBox2.Text Worksheets("Лист2").Cells(i + 1, 3).Value = TextBox3.Text MsgBox ("Информация внесена") Unload Me Nom = Nom + 1 UserForm3.Hide Range("A1:D19").Select 'сортировка ActiveWorkbook.Worksheets("Лист2").Sort.SortFields.Clear ActiveWorkbook.Worksheets("Лист2").Sort.SortFields.Add Key:=Range("D1:D13"), _ SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal With ActiveWorkbook.Worksheets("Лист2").Sort .SetRange Range("A1:D13") .Header = xlGuess .MatchCase = False .Orientation = xlTopToBottom .SortMethod = xlPinYin .Apply End With Range("D1:D10000").Find(номер.Text).Selectt End Sub
Добрый вечер. Что то не очень похоже на рабочий макрос. Что вызывает вопросы: 1. В теле цикла While - Wend ничего не происходит, и если ячейка C2 не пустая, то цикл будет бесконечный. 2. Цикл For - Next не выполняется ни разу, т.к. переменная Nom = 0. После цикла переменная i = 1 и значения из текстбоксов всегда будут вставляться в строку 2. Это нужно исправлять. А что касается сути вопроса, то можно сделать например так - перенести закрытие формы в конец макроса, а после сортировки вставить строку [vba]
Код
Range("D1:D10000").Find(номер.Text).Select
[/vba] . Если в таблице очень много строк, то можно так [vba]
Добрый вечер. Что то не очень похоже на рабочий макрос. Что вызывает вопросы: 1. В теле цикла While - Wend ничего не происходит, и если ячейка C2 не пустая, то цикл будет бесконечный. 2. Цикл For - Next не выполняется ни разу, т.к. переменная Nom = 0. После цикла переменная i = 1 и значения из текстбоксов всегда будут вставляться в строку 2. Это нужно исправлять. А что касается сути вопроса, то можно сделать например так - перенести закрытие формы в конец макроса, а после сортировки вставить строку [vba]
Код
Range("D1:D10000").Find(номер.Text).Select
[/vba] . Если в таблице очень много строк, то можно так [vba]
Большое спасибо за подсказку уважаемый i691198, первая и вторая строки работают. Однако, есть проблема в которой не могу решить как ее преодолеть. После добавления строки открывается нужная страница, но она не активна. Невозможно ее прокрутить или сделать еще что либо. Она становится активной только после переключения на другую страницу и затем обратно. Что происходит? СПАСИБО.
Большое спасибо за подсказку уважаемый i691198, первая и вторая строки работают. Однако, есть проблема в которой не могу решить как ее преодолеть. После добавления строки открывается нужная страница, но она не активна. Невозможно ее прокрутить или сделать еще что либо. Она становится активной только после переключения на другую страницу и затем обратно. Что происходит? СПАСИБО.Egider
Пенсионер
Сообщение отредактировал Egider - Пятница, 04.07.2025, 16:49
Спасибо MikeVol, на Excel 2013 работает. На Excel 2016 активация не работала в первых двух вариантах. Вашу версию испробую только в понедельник. Еще раз спасибо за внимание ВСЕМ!!!
Спасибо MikeVol, на Excel 2013 работает. На Excel 2016 активация не работала в первых двух вариантах. Вашу версию испробую только в понедельник. Еще раз спасибо за внимание ВСЕМ!!!Egider