Як керувати осередками Excel разом із vba script?


0

У формі користувача є назви продуктів ( комбо ), ціни, кількість ( текстове поле ). Для контролю назви продуктів я використовую комбобокс. Я записую кількість продукту в моє текстове поле як мануель, коли я вибираю назву продукту, я хочу зробити, щоб наступна комірка записувала вартість цієї продукції після цього. Коли я напишу кількість цього продукту в клітинку, 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

введіть тут опис зображення

Відповіді:


0

З опису вашої проблеми, здається, що все працює так, як вам потрібно, коли ви натискаєте кнопку "ОК" у формі користувача, але не тоді, коли ви змінюєте продукт із елемента управління користувачем. Це тому, що функція події "Sub cboProduct_Change ()" порожня. Якщо ви хочете, щоб подія його зміни мала той самий ефект, що і "добре", ви можете або зателефонувати на cmdOK_click (), або створити третю більш загальну функцію оновлення, яка змінює і нормально викликає події.

Ви не згадуєте про заповнення стовпця D. Здається, що в електронній таблиці формули були попередньо заселеними. Під час цього OK події може бути надійніше повторно додати формулу стовпця D.

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

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

Ви можете просто зробити це:

Range("C20").Offset(1, 0) = txtAmount.Value
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.