AfterUpdate Event not Running

  • Thread starter Thread starter Craig
  • Start date Start date
C

Craig

Hi There,
I have a userform called frmThree which has a bunch of textboxes on it, when
I run the userform the AfterUpdate Event runs fine when I hit enter on each
textbox when I run it as a stand alone userform (from the Visual Basic
Editor). When I try to run the program as it is mean't... the AfterUpdate
Event doesn't Fire.
My program first opens frmOne, from this I click on a button to sign in,
this brings up frmPassword,I enter the code the frmPassword userform
hides... and shows frmTwo... on frmTwo is a commandbutton that shows
frmThree.
Now when I enter a number in the textbox on frmThree the AfterUpdate doesn't
fire thus not formatting my number in the textbox. At this point frmOne,
frmTwo and frmThree would all be in the .show mode.

Anyone no why, this is happening?


Craig
 
'This code is all within the frmThree Userform
Private Sub TextBox2_AfterUpdate()
Call Update_Inventory(2)
End Sub
Private Sub TextBox3_AfterUpdate()
Call Update_Inventory(3)
End Sub

Public Sub Update_Inventory(TBox As Integer)
Dim iPass as Integer
If TBox <= 20 Then iPass = TBox + 171
If TBox >= 20 Then iPass = TBox + 151
frmThree.Controls("TextBox" & TBox).Text =
Format(frmThree.Controls("TextBox" & TBox).Text, "Currency")
If TBox <= 20 Then SpecialCount.Cells(iPass, 14).Value =
Format(frmThree.Controls("TextBox" & TBox).Text, "Currency")
If TBox >= 21 Then SpecialCount.Cells(iPass, 26).Value =
Format(frmThree.Controls("TextBox" & TBox).Text, "Currency")
frmThree.TextBox116.Text = Format(SpecialCount.Range("Z190").Value,
"Currency")
End Sub

This code runs fine if I only run the frmThree Userfrom, it doesn't when
opened through other Userforms.
Thanks Craig
 
Hello Craig,

I suspect you may have ambigious text box names. It isn't clear from
your post if you are calling Update_Inventory from the other forms.

I have cleaned your code up and added a restriction to it. If the text
box isn't on frmThree then exit the routine. Look this over and let men
know if I have understood you correctly or not.

CALLING THE SUB:
Update_Inventory (TextBox3)

UPDATED CODE:

Code:
--------------------

Sub Update_Inventory(ByRef TB As MSForms.TextBox)

Dim frmName As String
Dim tbName As String
Dim tbNumber As Integer

'Get the Name of the Form the TextBox is on
frmName = TB.Parent.Name

'Is TextBox on frmThree?
If frmName <> "frmThree" Then Exit Sub

'Get the TextBox Name
tbName = TB.Name

'Extract the TextBox Number
tbNumber = Val(Mid(tbName, 8, Len(tbName) - 7))

If tbNumber <= 20 Then iPass = tbNumber + 171
If tbNumber >= 21 Then iPass = tbNumber + 151

'Format the TextBox Text as Currency
TB.Text = Format(TB.Text, "Currency")

If tbNumber <= 20 Then SpecialCount.Cells(iPass, 14).Value = TB.Text
If tbNumber >= 21 Then SpecialCount.Cells(iPass, 26).Value = TB.Text

TextBox116.Text = Format(SpecialCount.Range("Z190").Value, "Currency")

End Sub
 
Leith, thanks for the code;
notices the use of

'Get the Name of the Form the TextBox is on
frmName = TB.Parent.Name

Is this sort of line available generically to any Userform.?

I went into a Userform (VBE) and selected a textbox
txtVenName and in the immediate window did:

? txtVenName.Parent.Name << expexting to get frmTest
but instead get r/t error 424 - Object required.

Can you clarify
Thanks,
Jim
 
txtVenName isn't an object until the userform is loaded.

You can do that by refering to it. so in the immediate window:

? userform1.TextBox1.Parent.Name
UserForm1

In Leith's code, the userform was already loaded.
 
Thanks Tom;
Thanks to your help yesterday, I'm off now
trying to better understand code via the use of the
immediate window, as you suggested.
.....them poor hokies,,,,, wow,,,,
Jim
 
I understand the code Leith shared... but I'm still not getting the required
results!

Private Sub TextBox2_AfterUpdate()
Call Update_Inventory(TextBox2)
End Sub

The procedure Update_Inventory is located within the same Userform
I've put break points in the code to see where the error is.

the code is not getting past the:
If frmName <> "frmPhysical" Then Exit Sub

The frmName that appears is "Frame1" which is the frame holding 20 textboxes
on the frmPhysical UserForm.


Craig
 
Hello Craig,

Since you are not calling Update_Inventory from any of the other Forms
you can remove "If frmName <> ""frmPhysical Then Exit Sub" from th
code. I added this as a troubleshooting aid iin case Update_Inventor
were being called from other Forms.

I had asssumed the TextBoxes were directly on the Form. The Paren
property returns the object that holds the TextBox. Since it is
Frame, the code returns the Frame name, not the Form name. Remove th
If statement and it should work.

The *After_Update* event fires once the user presses enter, or clcik
on another control. If your code is still returning the correct result
there is a problem somewhere else in the program.

Sincerely,
Leith Ros
 
Thanks... I did remove "If frmName <> ""frmPhysical Then Exit Sub", now
everything works fine.
Thanks again!
Craig
 
Back
Top