EXCEL VBA用户界面 – 如果select某个combobox,则为负值

我正在创build一个带有用户窗体的简单电子表格,以允许pipe理员助理将事务input预算。 我唯一遇到的一个问题是如果combobox中的值为:entrytype为“Revenue”,那么找出一个值为负的方法(自动)

任何帮助将不胜感激,甚至在其他地方看一个类似的例子…

Private Sub CommandButton1_Click() Dim lRow As Long Dim ws As Worksheet Set ws = Worksheets("Entry") lRow = ws.Cells(Rows.Count, 1).End(xlUp).Offset(1, 0).Row With ws .Cells(lRow, 1).value = Me.entrytype.value .Cells(lRow, 2).value = Me.expense1.value .Cells(lRow, 3).value = Me.expense2.value .Cells(lRow, 4).value = Me.eventcategory.value .Cells(lRow, 5).value = Me.state.value .Cells(lRow, 6).value = Me.dateVariable.value .Cells(lRow, 7).value = Me.invoice.value .Cells(lRow, 8).value = Me.description.value .Cells(lRow, 9).value = Me.memo.value .Cells(lRow, 11).value = Me.TextBox1.value End With 'Clear input controls. Me.entrytype.value = "" Me.expense1.value = "" Me.expense2.value = "" Me.eventcategory.value = "" Me.state.value = "" Me.dateVariable.value = "" Me.invoice.value = "" Me.description.value = "" Me.memo.value = "" Me.TextBox1.value = "" End Sub Private Sub expense1_Change() expense2.Clear Dim index As Integer index = expense1.ListIndex Select Case index Case Is = 0 With expense2 .AddItem "N/A" End With Case Is = 1 With expense2 .AddItem "Campus Tour Program" .AddItem "Events Off-Campus" .AddItem "Events On-Campus" .AddItem "Alumni Association" End With Case Is = 2 With expense2 .AddItem "Advertising" .AddItem "Promotional Giveaways" .AddItem "Publications-Marketing" End With Case Is = 3 With expense2 .AddItem "Recruitment Travel" .AddItem "Search Names" .AddItem "Travel" End With Case Is = 4 With expense2 .AddItem "Oper. Maint. & Upgrade Agreements" .AddItem "Furnishings & Renovations" .AddItem "Office Supplies" .AddItem "Postage" .AddItem "Telephone & Cable" .AddItem "Equipment Purchase & Repair" .AddItem "Training & Prof Develop" End With Case Is = 5 With expense2 .AddItem "Miscellaneous" End With If expense1 <> -1 Then expense2 = expense1 expense2 = -1 End If End Select End Sub Private Sub Image1_Click() dateVariable = CalendarForm.GetDate( _ SelectedDate:=Date, _ FirstDayOfWeek:=Monday, _ DateFontSize:=12, _ OkayButton:=True, _ ShowWeekNumbers:=True, _ BackgroundColor:=RGB(243, 249, 251), _ HeaderColor:=RGB(147, 205, 2221), _ HeaderFontColor:=RGB(255, 255, 255), _ SubHeaderColor:=RGB(223, 240, 245), _ SubHeaderFontColor:=RGB(31, 78, 120), _ DateColor:=RGB(243, 249, 251), _ DateFontColor:=RGB(31, 78, 120), _ TrailingMonthFontColor:=RGB(155, 194, 230), _ DateHoverColor:=RGB(223, 240, 245), _ DateSelectedColor:=RGB(202, 223, 242), _ SaturdayFontColor:=RGB(0, 176, 240), _ SundayFontColor:=RGB(0, 176, 240), _ TodayFontColor:=RGB(0, 176, 80)) If dateVariable <> 0 Then dateVariable = dateVariable End Sub Dim TextBox1oldValue As String Private Sub TextBox1_AfterUpdate() If IsNumeric(TextBox1) Then TextBox1 = Format(TextBox1, "$#,##0.00") Else TextBox1 = TextBox1oldValue End If End Sub Private Sub TextBox1_BeforeUpdate(ByVal Cancel As MSForms.ReturnBoolean) If IsNumeric(TextBox1) Then TextBox1oldValue = Format(TextBox1, "$#,##0.00") End If End Sub Private Sub UserForm_Initialize() TextBox1oldValue = "$0.00" TextBox1 = "$0.00" With entrytype .AddItem "Revenue" .AddItem "Expense" End With With expense1 .AddItem "Application Fee Expense" .AddItem "Campus Tour Events" .AddItem "Marketing Communication" .AddItem "Recruitment Outreach" .AddItem "General Operating" .AddItem "Miscellaneous" End With With eventcategory .AddItem "Application Workshop" .AddItem "Up Close" .AddItem "Scholars Day" .AddItem "Senior Day" .AddItem "Junior Day" .AddItem "Financial Aid Night" .AddItem "Academic Talent Event" .AddItem "PC Conference" .AddItem "Orange Friday" .AddItem "Gear UP" End With With state .AddItem "Oklahoma" .AddItem "Arkansas" .AddItem "Arizona" .AddItem "California" .AddItem "Colorado" .AddItem "Florida" .AddItem "Illinois" .AddItem "Kansas" .AddItem "Missouri" .AddItem "Nebraska" .AddItem "New Mexico" .AddItem "Texas" End With End Sub 

有多种方法来处理inputvalidation,但是,像这样的东西可能是有用的:

 If Me.ComboBox1.Value = "Revenue" And Left(TextBox1.Text, 1) <> "-" Then TextBox1.Text = "-" & TextBox1.Text 

ComboBox1是包含“Revenue”下拉列表的对象,TextBox1是您要input的任何对象(如果select“Revenue”,则希望更改为“minus”的所有值字段)。

你也可以稍后做一些事情,但是,在提交之前,它会显示在表单上。

只需为您的ComboBox添加一个Change事件处理程序,并进行一个简单的testing:

 Private Sub entrytype_Change() If entrytype.Value = "Revenue" Then yourvaluehere = -yourvaluehere End If End Sub