как закодировать форму пользователя, чтобы вводить данные только в определенную строку

#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