#excel #vba #userform
Вопрос:
Я пытаюсь закодировать форму пользователя, которая заполнит таблицу, содержащую 13 строк. Каждая строка представляет собой слот в станке для инструмента, я хочу, чтобы пользователь выбрал слот, и форма заполнит эту строку информацией или остановит пользователя, поскольку в этой строке уже есть данные. что я закодировал до сих пор, так это то, что он будет генерировать только новую строку для каждой записи. Кто-нибудь может мне здесь помочь, пожалуйста?
Спасибо, Шейн.
Private Sub CommandButton1_Click() Dim wks As Worksheet Dim addnew As Range Set wksDMG = Sheet4 Set wksHURCO = Sheet3 Set wksREC1 = Sheet2 Set wksREC2 = Sheet5 'if DMG is selected input data into DMG files NEED HELP HERE If OptionButton1.Value = True Then Set addnew = wksDMG.Range("A65356").End(xlUp).Offset(1, 0) addnew.Offset(0, 0).Value = ComboBox7.Text addnew.Offset(0, 1).Value = ComboBox2.Text addnew.Offset(0, 2).Value = ComboBox3.Text addnew.Offset(0, 3).Value = ComboBox4.Text addnew.Offset(0, 4).Value = ComboBox5.Text addnew.Offset(0, 5).Value = ComboBox6.Text 'Data to go to DMG record log Set addnew = wksREC1.Range("A65356").End(xlUp).Offset(1, 0) addnew.Offset(0, 0).Value = ComboBox1.Text addnew.Offset(0, 1).Value = TextBox1.Text addnew.Offset(0, 2).Value = ComboBox7.Text addnew.Offset(0, 3).Value = ComboBox2.Text addnew.Offset(0, 4).Value = ComboBox3.Text addnew.Offset(0, 5).Value = ComboBox4.Text addnew.Offset(0, 6).Value = ComboBox5.Text addnew.Offset(0, 7).Value = ComboBox6.Text End If 'if Hurco is selected input data into Hurco files NEED HELP HERE If OptionButton2.Value = True Then Set addnew = wksHURCO.Range("A65356").End(xlUp).Offset(1, 0) addnew.Offset(0, 0).Value = ComboBox7.Text addnew.Offset(0, 1).Value = ComboBox2.Text addnew.Offset(0, 2).Value = ComboBox3.Text addnew.Offset(0, 3).Value = ComboBox4.Text addnew.Offset(0, 4).Value = ComboBox5.Text addnew.Offset(0, 5).Value = ComboBox6.Text 'Data to go to HURCO record log Set addnew = wksREC2.Range("A65356").End(xlUp).Offset(1, 0) addnew.Offset(0, 0).Value = ComboBox1.Text addnew.Offset(0, 1).Value = TextBox1.Text addnew.Offset(0, 2).Value = ComboBox7.Text addnew.Offset(0, 3).Value = ComboBox2.Text addnew.Offset(0, 4).Value = ComboBox3.Text addnew.Offset(0, 5).Value = ComboBox4.Text addnew.Offset(0, 6).Value = ComboBox5.Text addnew.Offset(0, 7).Value = ComboBox6.Text End If End Sub
Комментарии:
1. Когда ячейка выбрана, откроется ли при этом заполняемая форма пользователя, или вы планируете, чтобы форма пользователя уже была заполнена, затем ячейка будет выбрана (а не кнопка cmd) для переноса данных на рабочий лист?
2. Привет, Сэмюэль, я прикрепил изображение формы пользователя выше для справки. последняя строка в пользовательской форме «Слот для инструментов» относится к строке, в которой будет находиться запись, т. е. 1-13.
Ответ №1:
Ваше решение должно фиксировать значение выбранного слота инструмента, а затем вычислять номер строки на основе выбранного. Вы не предоставили достаточно информации, чтобы предоставить более подробную информацию, но вот пример:
Option Explicit Private toolSlotRow As Long Private Sub AddButton_Click() If toolSlotRow = -99 Then MsgBox "You must select a tool slot before adding your stuff!" Exit Sub End If Dim wksDMG As Worksheet Set wksDMG = sheet4 Dim tools As Range Set tools = wksDMG.Range("A1:Z100") '--- check the tool slot row for data If IsEmpty(tools.Offset(toolSlotRow, 0)) Then '--- empty row, add the tool info With tools .Offset(0, 0).Value = ComboBox7.Text .Offset(0, 1).Value = ComboBox2.Text .Offset(0, 2).Value = ComboBox3.Text .Offset(0, 3).Value = ComboBox4.Text .Offset(0, 4).Value = ComboBox5.Text .Offset(0, 5).Value = ComboBox6.Text End With Else MsgBox "The tool slot selected already has data, do something else!" End If End Sub Private Sub ToolSlotComboBox_Change() '--- also check here for "no selection" and set an appropriate value If ToolSlotComboBox.ListIndex = 0 Then '--- this might be the "default - unselected" value toolSlotRow = -99 Else toolSlotRow = ToolSlotComboBox.ListIndex End If End Sub