VBA MSHTML TextInput Click Failed - vba

I've worked on multiple web-scraping projects using Excel VBA before, but I haven't encountered this problem before. I've been googling the issue for the past few hours, but I haven't found a solution yet.
Scenario:
My webpage consists of a list-box and a text box that acts as a filter/search. Unfortunately, I can't disclose the webpage information, but somewhere in the list box elements I saw the word "JQuery". After creating an HTMLInputElement, I set it to text box object and changed its value to "TEXT". I expected the list to get update, but nothing happened. I tried to use different approaches, but they all failed.
Text_Field.Focus
Text_Field.FireEvent "onclick"
Text_Field.Value = "TEXT"
Text_Field.Click
I managed to put the text in the text box, but the clicking part does not work. When I do it manually, as soon as I type the phrase into the text box, the list gets updated immediately. Any thoughts or suggestions?
I tried to simulate the "enter key" press, but it didn't work either.
Your help will be appreciated.
Best,
Arman

Event won't fire when you operate elements programmatically. you have to simulate the events too, using document.createEventObject/inputElement.fireEvent (IE8 or lower) or document.createEvent/inputElement.dispatchEvent (IE9+).
What event you need to fire depends on what the script is interested in (onkeypress, onblur, onpaste, etc).

Related

in Access, Bound Combo Boxes do not update unless the form is already Dirty

I'm working on a fairly complex Access Database, trying to build forms with custom buttons for working with records. I'm using list boxes to display and navigate through records and all fields for existing records are disabled unless the user presses an edit button. The problem I'm having is that if I press the Edit or Add New button, enabling all of the fields, and then try to change the selection in a combo box, it does not update on the first try.
If I edit a text box first then the combo boxes work fine.
I've determined that the control's beforeUpdate and afterUpdate events are not firing on the first try but the action triggers the form_Dirty event and then it works as expected. I tried setting Me.Dirty = True with the Edit button and that solved the problem but it causes problems with some of my other code and it seems like an unnecessary workaround if only I understood the actual cause of the problem. It also works as expected if I leave the Combo Box unbound, but I am trying to build a template that doesn't require too much work to build new forms off of and I would rather not go that route.
It must have something to do with some bit of code I'm using because I can start a basic form and the combo boxes work fine.
I've started a basic test form and am adding code from my template form bit by bit until the problem arises, but it's a tedious process. Any help would be appreciated.
What am I missing? Is there some way of getting the Combo Box events to fire before the form is dirty?
UPDATE:
I have templates for a basic form, a form with a single subform, and a form with multiple subs in a tab control.
After some more testing I discovered that this problem does not apply to the basic form which has no subforms. This template uses similar code to the others for new, edit, cancel, save and delete buttons and for preventing accidental changes, preventing Form_unload during an edit and so on. The main difference I can think of off the top of my head is that the templates with subforms use class modules and collections to hold various data and pass it between the main form and subforms. Not sure if or how this might relate to combo box functionality.
I built most of this last winter then got too busy over the summer to work on it. Just now picking it up again and I'm having to re-learn a lot of the details of how my code works.
you can try to use Me.CboName.Requery in your After Update event.
I figured it out. I was calling a procedure with a form refresh in it from the Form_Dirty event and for whatever reason the refresh at exactly the wrong time was causing the combo box Before_Update and After_Update events to be skipped and the combo box value to not change. It was also causing text entered into a textbox to overwrite existing text on the first keystroke.

On Click Error: "occurred while Microsoft Access was communicating with the OLE Server or ActiveX Control"

Seems like this is has been asked a few times before.
After working on a form for a few weeks, I suddenly get the error when I click on a button: "The expression On Click you entered as the event property produced the following error: A problem occurred while Microsoft Access was communicating with the OLE Server or Active X Control."
This also happens with any control's event on the form (e.g. After Update on other text fields)
I tried re-installing Access to no avail.
Not sure if this is relevant, but I have a subform on the form as well. I have an "on-click" event that works on the subform, but when the code breaks at the following line (which worked before):
Me.Parent.orderID = Null
The error I get is: "Method 'Parent' of object '_Form_frmOrderQuery' failed
(frmOrderQuery is the name of the subform)
Anyway, this all worked before until I changed the query for the subform by adding a few more fields.
Finally: All of the event handlers (button click, after-update, etc) work on my other forms in the database.
Any help/suggestions would be greatly appreciated.
Thanks,
jeff
Figured it out, this was stupid easy. Whatever Form is having issues, just copy it and delete the old form. Rename the new form to the same as the last (so all your vba and stuff works). Done!
I've just run into a similar problem using the Access runtime environment. It seems that the problem might be with... non-Unicode lanuage settings.
Maybe the names of the columns you added to the query contain some problematic characters?
See this article for reference: https://support.microsoft.com/en-us/kb/907337. It contains a resolution, which helped me.
All the best!
As other users mentioned the problem is in use of non-English symbols in element (form control, etc.) names.
My way to solve it:
(may be unnecessary) Create an event procedure for any element on a form.
Switch to Code Editor.
Place cursor inside any procedure.
Open drop-down list with element names (the left one above the code window).
Check if you see some names with "?????" in them.
If 5 is true, then figure out what the elements are, find them on the form and rename using only basic latin alphabet.
In my case this issue occured because of accented characters.
I was running the VBA code on a computer that uses different non-Unicode language settings than the computer on which i created the event handler, the function, or the subroutine. Note This issue may also occur if the VBA code contains accented characters or special characters. Additionally, this issue may occur if an object name in the Access database contains accented characters or special characters.
The Solution that worked for me:
"If you are running the VBA code on a Microsoft Windows XP-based computer or on a Windows 2000-based computer, you may be able to resolve this issue by changing the non-Unicode language setting on the computer where you are running the VBA code. To verify and to change the non-Unicode language setting, follow these steps.
Note Because there are several versions of Microsoft Windows, the following steps may be different on your computer. If they are, see your product documentation to complete these steps.
Click Start,
click Run,
type Intl.cpl, and then click OK.
Under Language for non-Unicode programs on the Advanced tab, verify that the language matches the language on the computer on which you created the event handler, the function, or the subroutine. If the language differs, click the language that you want, and then click OK.
Restart the computer.
More here https://support.microsoft.com/en-us/help/907337/you-receive-an-error-message-when-you-start-visual-basic-for-applicati

Changing form name causes error message "Error accessing the system registry"

I am programming the On_Click method for the button labeled "View" in the first printscreen below. The method will load a form with data corresponding with the specific address id in the row containing the "View" button. This code worked perfectly when pointing to a target form called "Addresses". However, when I decided to rename the form "Address", I started receiving the following error message when clicking on the view button:
I did some research on the web about this error message, which lead me to try to delete any outdated references in the VBA editor. But when I clicked on Tools-->References in the VBA editor, I got the following error message:
It seems that MS Access' entries in the system registry might have been corrupted. But I am not certain of this because the documentation of this on the web is sparse and inconsistent.
Here is a link to the database on a file sharing site: http://jmp.sh/b/9Uyx6J2YzWbs8zPq2h6g
If the problem is in the database, you can recreate the problem by opening the form "Main" and clicking on the button "View" for the record shown in the printscreen above, or for other records.
Can anyone show me how to get past this error message?
my advices?
You could rename your Forms!....SourceObject to "Address" instead of "Addresses"
You could copy/paste the form, delete the original, and retry
You could install a decent debugging tool like MZ-Tools for VBA, that will help you manage your errors. Check the details here
EDIT: I used to get similar bugs years ago, when I was writing specific form event procedures. As we decided to switch to a model where forms did not need to be debbuged anymore (check this here), we stopped getting this kind of message. And I think I forgot the trick we used to solve this kind of error. If I were you:
I'd try to open another access database and import all objects ...
I'd put aside/cancel the faulty onClick procedure
And I'd install MZ Tools because otherwise VBA debugging is a nightmare ...
Since access was not liking the command button in each record of the continuous form, I choose to put the view button's logic in the on click event of a text box in each row, which I configured as enabled but locked. This produces a separate link from each record of the continuous form to a unique detail page with more of the chosen record's data.
This solution works perfectly, and is enabling me to move on with my other coding.
However, it would be nice if someone else were able to show how to get the command button solution to work.

How to use Mouseout Function in VBA with a condition Check?

Hi I have a VBA application with a combobox selection option.One of the combobox option is Other which when user select that option an invisibled label will pops up and prompt the user to fill the txtOther control.now my question is how I can get rid of the prompted label and make it to invisible after user fill the txtOther and move(focused)in other control?
here is a shot of my app:
Thanks for your time and help
It depends on how often or when you want the check to be done. I couldn't find a good reference to show you all of this, but you can view your VBE.
Within the code behind your userform you can use events for the text box.
If you want the check done every time you leave the text box:
Use the TextBox_Exit event.
If you want it to fire whenever the contents are changed, used TextBox_Change. There's lots of options, but based on your explanation I'd probably use Exit.
This answer shows some syntax examples for using the Textbox_Exit event.

Using VSTO to perform an action via selected e-mail text in Outlook

This should be pretty a pretty common scenario, but I have not found a solution yet.
I would like to highlight some text within the body of an e-mail and then click on something (context menu, toolbar button, etc) to perform a URL navigation using the selected text. For example, highlight the Fex Ex tracking number and then navigate to their web site using it as a query parameter (like "ww.fedextracking.com?packageid=12345").
How can you capture the selected text within an e-mail and then perform an action? I would greatly appreciate any suggestions or examples.
Thank you!
For Outlook 2007-2010 (or previous versions using WordMail), you can retrieve a Word object from the Inspector.WordEditor property. Then you can work with Word.Selection to access the selected text.
However, for Plain Text or Rich Text scenarios with Outlook 2000-2003, you have to use the SafeInspector object with Redemption (http://www.dimastr.com/redemption/) to access the selected text. I can't remember, but for HTML format messages with Outlook 2003-2003 you may be able to access the selected text with the IHTMLDocument object retrieved from SafeInspector.
I appreciate it's 588 days since you asked your question Loki70, but if somebody else Googles up this page (like I did, looking for how to create a selected text right-click context menu entry) then this may be an answer for you.
I have been using AutoHotKey, which works not just in Outlook, but everywhere in Windows, and have been writing utilities to Google the selected text, open an SSH session in PuTTY to the selected hostname, and similar.
If you don't mind running an extra application on your PC to capture the hotkey combination that you send, then this would do exactly what you're asking.
Here is my post on the AutoHotKey forum with a link to my code:
http://www.autohotkey.com/community/viewtopic.php?t=86402
It would be trivial to adapt this to do the FedEx query you've mentioned.
I hope this helps.