Update on Change - ms-access

I have a textbox(1) wich automaticly calculates and displays the input after a textbox(2) is updated.
Textbox(1) is set to enabled = false so the user can not input any values as it updates automatically.
I want to display the number in Textbox(1) after it has changed/updated.
I have tried using the AfterUpdate property for Textbox(1) but does not work because the user is not physically updating the value.
Is there any way to detect a change when the number changes in the textbox and store the number in another textbox?

As already said by others, if the user enters stuff into Textbox2 and you want to display that in Textbox1, then you have to use the events of Textbox2, not Textbox1!
The easiest way would be to use the AfterUpdate event of Textbox2.
Example:
Private Sub Textbox2_AfterUpdate()
Me.Textbox1 = "Text from second textbox: " & Me.Textbox2
End Sub

You can either use the OnLostFocus (http://msdn.microsoft.com/en-us/library/system.windows.forms.control.onlostfocus.aspx) to tell when the user's focus leaves the textbox.
Otherwise you can use OnKeyPress (http://msdn.microsoft.com/en-us/library/system.windows.forms.control.onkeypress.aspx) and a timer to tell how long since the last keystroke.

Related

How to pass value from subform to mainform ms access

I have a form with a subform (Datasheet view form). When i click a row in subform, i want pass that row value to text box in main form . In subform even wrote this
Private Sub Form_Click()
MsgBox (Noloan)
End Sub
But i don't know how to pass that subform form_click no_loan to mainform.textbox. Thanks for your help.
Additional data:In my db , i have a table which consist field No,NoLoan,Name. NoLoan Field value as i wanna clicked .From that table i create a subform/datasheet view ,subform name is T_Loan1. Then I create Main Form, name is FindLoan2. In that main/parent form i create text box, called Text7, and put T_Loan1 in subform object at footer.
I put this
=[Forms]![FindLoan2]![subformTLOAN].[Form]![Noloan]
in my Text7 Control and It's work.
Thank's for all attention.
Goto to the subform and click on the field which has the row value
Select Field property - click on events tab --> On Click --> Code Builder
Put below code in the Click event where Form_frmMain is your form name and Me.ID is the field.
Private Sub ID_Click()
Forms!FindLoan2.Text7 = Me.ID
End Sub
The best way is to write code that ignores the forms!names. If you copy the form, or change the sub form, or even drop the sub form into a different form, then all your code breaks.
To reference the textbox in the parent form from code, use:
me.Parent!Text7 = me!id
I am not sure which version of MS Access you are using, but it is also possible to use Tempvars to store values for use elsewhere if you have a complicated application which makes referencing another form/field/control difficult.
To create:
Tempvars.Add "TempVarName", TempvarValue
To use:
Tempvars!TempVarName
To remove:
Tempvars.Remove "TempVarName
I try to limit my use of them, as it becomes hard to manage. I am always careful about when I set the values and I ensure that they are removed after I am finished with them to avoid confusion or issues with values persisting when they shouldn't.

Update result of formula in text box

I'm trying to update an unbound text box in a form I'm building.
The text box has a default value which is: =DLookUp("[Metadata]![Username]";"[Metadata]").
When the value in the field username is changed;
how do I update this change in the text box without closing the whole form and then opening it again?
--
I've tried to to do this by adding a button in the form and then on mouse up event try and either by vba or the macro editor find a solution.
It would supposedly be possible to create a macro that will close and then open the form again but it's not really what I'm looking for.
VBA: I found lots of suggestions for requery but I couldn't get this to work:
Set UserName = Forms![Update test]!Text10
UserName.Requery
A general solution that could work with multiple such text boxes is preferable
(but not required, anything that tries to point me in the right direction is welcome).
Go to the design view and select the textbox which represents your table value username, then go to events and select the On Change() event:
Private Sub username_Change()
YourTextbox.Value =DLookUp("[Metadata]![Username]";"[Metadata]")
End Sub

MS-Access 2010: setting focus without selecting / highlighting field contents

What I'm looking for is deselecting / dehighlighting a field's contents by using vba, just as if the user would click with the mouse in that field. Maybe the solution is too easy to have found its way to forums ? Simple goal, but it seems difficult to be achieved. SendKeys always got errors. The .OnClick property does not simulate a click, just tells what to do on click.
My form (main- with subform) has many fields between which the focus is moved depending on the fields values. For this I'm using xyz**.SetFocus**
Works fine so far, but in many fields the user should be able to immediately edit the contents by keyboard, without first clicking into that field with the mouse. The keyboard arrows should move the cursor, not highlight the next or previous field. Combobox fields should not be highlighted at all.
There is a database option (File/Options/Client Settings/) which should enable this by selecting "Go to start of field" or "Go to end of field". However, this does not work on combobox fields (optically bad). Moreover, this option should not be set for the whole database but depend on which form has focus, and even better on the field getting focus and its contents.
You can use the .SelStart and .SelLength properties.
With Me.myCombobox
.SetFocus
.SelStart = 0
.SelLength = 0 ' Nothing selected
End With
With Me.myCombobox
.SetFocus
.SelLength = Len(.Text) ' Content selected
End With

Preventing a user from entering anything but integers into a textbox

I am constructing a form in Access and I have several textboxes that require an integer value. Right now you can enter characters instead of number and a debugging window pops up when the submit button is pressed. How can I prevent users from being able to press the submit button when an invalid entry is made in the interger textbox.
Thank you!
First, make the field a Number type in the table design. Then go down to the "Field properties" and make sure "Field size" is set to Integer. This takes care of decimal numbers because it will round them to the nearest integer when the textbox loses focus.
Next, go into the submit button properties and set Enabled = False. This will gray it out and won't allow the user to click it. You may want to add this code to the form's On Current property so that whenever a record is loaded, it will enable or disable the submit button based on the value that is already there. You will need to "AND" in more integer textbox objects to the same if statement if you have more than one integer textbox on your form:
Private Sub Form_Current()
If Not IsNumeric(Me.IntegerTextBox.Value) Then
Me.SubmitButton.Enabled = False
Else
Me.SubmitButton.Enabled = True
End If
End Sub
Finally, add this code to the On Change event for the textbox. This will enable the button whenever an appropriate a numeric value has been entered and will update the button every time a key is pressed.
Private Sub IntegerTextBox_Change()
If Not IsNumeric(Me.IntegerTextBox.Text) Then
Me.SubmitButton.Enabled = False
Else
Me.SubmitButton.Enabled = True
End If
End Sub
Do this for each integer field on your form.
In table Design make the data Type Number (Integer).

MS Access de-select listbox after running macro/query

So I have a form (frmBookingForm) in Access, and a listbox (lstMyBookings) that displays the results of a query.
Below this, I have a button (cmdDeleteBooking) which runs a delete query using the lstMyBookings selection as input. The button then runs a macro that firstly checks whether a record in the listbox is selected, and if one is, runs the delete query and requeries the data, so the deleted record is no longer shown in the listbox. If not, an error message is displayed.
However, if I then click the button again, it again runs the delete query, even though there is apparently nothing selected in the list box.
Essentially, how can I 'clear' the listbox selection?
I'd prefer a solution that can be done in a macro format, as I have little to no understanding of VBA. However, if providing a VBA solution, I'd greatly appreciate a short explanation of it.
Thanks :)
Looks like this website has a nice little function to do it. Essentially, you need to test if it's a multiselect, and then do one of two things. I suppose if you know ahead of time that it is/isn't a multiselect, you wouldn't even need the "if" statement:
If List0.MultiSelect = 0 Then
List0 = Null
Else
For Each varItem In List0.ItemsSelected
List0.Selected(varItem) = False
Next
End If
If the control's MultiSelect property is set to None, this code just sets List0 to Null. If the control's MultiSelect property is set to anything else, the code loops through all items that are currently selected, and sets the Selected property of that item to False. My example assumes your control is called List0.
EDIT
To use this code, use an event instead of a macro. Here's how you do this:
Right click on the button, select properties
In the Property Sheet window, click on the "Event" tab
Click inside of the "On Click" blank area, and click the dropdown arrow, then select "[Event Procedure]"
Click the ellipsis ("...") to go into the code editor.
In the code editor, your should already have your event for the button (let's assume the button is called Command1:
Private Sub Command1_Click()
End Sub
Add your code in between (assuming the listbox is called List0):
Private Sub Command1_Click()
If List0.MultiSelect = 0 Then
List0 = Null
Else
For Each varItem In List0.ItemsSelected
List0.Selected(varItem) = False
Next
End If
End Sub