在用户表单中有产品名称(组合框)、价格、数量(文本框)。对于产品名称控件,我使用组合框。当我选择产品名称时,我将产品数量作为手册写入文本框,我想这样做,下一个单元格将写入此产品的价格,之后当我将此产品的数量写入数量单元格时,Excel 将计算总价并在总价单元格中显示总价。我从特定的 Excel 表中获取价格,并为此创建了一个公式。当我在工作表中更改产品名称时(产品名称单元格固定为列表) 一切正常,但是当我使用脚本并且从组合框中选择产品名称并通过用户表单价格单元格写入工作表时,当产品名称改变时价格单元格不会改变,也不会计算总价格。
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
从您的问题描述来看,当您在用户表单中单击“确定”时,事情似乎按您希望的方式进行,但当您从用户表单控件更改产品时则不然。这是因为您的事件函数“Sub cboProduct_Change()”为空。如果您希望更改它的事件具有与“确定”相同的效果,您可以调用 cmdOK_click() 或创建第三个更通用的更新函数,更改和确定事件都会调用该函数。
您没有提到如何填充 D 列。电子表格似乎已预先填充了公式。在此 OK 事件期间重新添加 D 列公式可能更可靠。
另外,您可以简化一些代码而无需移动活动单元格。例如,而不是:
Range("C20").Select
ActiveCell.Offset(1, 0) = txtAmount.Value
你可以这样做:
Range("C20").Offset(1, 0) = txtAmount.Value