В пользовательской форме есть названия продуктов (выпадающий список), цены, количество ( текстовое поле). Для контроля названия продукта я использую с combobox. Я записываю количество товара в свое текстовое поле в качестве manuel, когда я выбираю название товара, я хочу сделать так, чтобы следующая ячейка записывала стоимость этого товара после этого. Когда я записываю количество этого товара в ячейку количества, Excel вычислит общее количество. Цена и покажи мне общую стоимость на общую стоимость ячейки. Я получаю цены из своего конкретного листа Excel и создаю формулу для этого. Когда я меняю название продукта на листе ( ячейка имени prdocut фиксируется как список), все в порядке, но когда я использую скрипт и когда я выбираю название продукта из Combobox и записываю в лист через ячейку цены пользовательской формы, не меняется при изменении имени продукта и не рассчитывать общие цены.

 Private Sub UserForm_Initialize()

   With cboProduct
    .AddItem "Iron"
    .AddItem "Plank"
    .AddItem "ANOTHER PRODUCT1"
    .AddItem "ANOTHER PRODUCT2"
    .AddItem "ANOTHER PRODUCT3"
    .AddItem "ANOTHER PRODUCT4"

End With
End Sub

     Private Sub cboProduct_Change()

     End Sub

     Private Sub cmdOK_Click()
         ActiveWorkbook.Sheets("list").Activate
         Range("A33").Select
     Do
If IsEmpty(ActiveCell) = False Then
    ActiveCell.Offset(2, 3).Select
End If
Loop Until IsEmpty(ActiveCell) = True


 Range("C20").Select
ActiveCell.Offset(1, 0) = txtAmount.Value

 Range("A20").Select
ActiveCell.Offset(1, 0) = cboProductName.Value

txtAmount.Value = ""
cboProduct.Value = ""
Range("A33").Select
 End Sub

1 ответ1

0

Исходя из описания вашей проблемы, кажется, что все работает так, как вы хотите, когда вы нажимаете "ОК" в пользовательской форме, но не когда вы меняете продукт из элемента управления пользовательской формы. Это потому, что ваша функция события Sub cboProduct_Change() пуста. Если вы хотите, чтобы событие его изменения имело тот же эффект, что и "ok", вы можете либо вызвать cmdOK_click(), либо создать третью более общую функцию обновления, которая вызывает события change и ok.

Вы не упоминаете, как колонка D заполняется. Кажется, что у таблицы есть формулы, предварительно заполненные там. Возможно, будет более надежным повторно добавить формулу столбца D во время этого события OK.

Кроме того, вы можете упростить некоторый код, не перемещая активную ячейку. Например, вместо:

Range("C20").Select
ActiveCell.Offset(1, 0) = txtAmount.Value

Вы можете просто сделать это:

Range("C20").Offset(1, 0) = txtAmount.Value

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .