I've been looking for this problem, but cannot find a solution that works for me.
I've made option buttons through the UI of word 2013 , and gave them a specified name in their properties ( "knop11" )
ThisDocument.Shapes("knop11").Visible = False
The above line is what I try to use to hide my option button when pressing a command button.
After making a new option button ( with default name "OptionButton1 ) it still doesn't work if I apply it to that button.
It depends on the type of control you are inserting, if you are using a ActiveX option button, it is not included within the shapes, but it will be created as an independent object. In such case you just have to use its functions directly.
However there is no 'visibility' property within option buttons, you might use a harsh work around like changing the buttons size or its forecolor. Something like:
If knop11.Height > 1 Then
knop11.Height = 1
Else
knop11.Height = 20
End If
Just as a quick tip, when you make the UI, the controls that are included within the shapes of the document are the ContentControls, and normally you fill the TAG property to look for them later. You might as well use the check box content control, and programming the option behaviour within your macros.
Related
I have some very (very) basic MS Access knowledge. I'm trying to expand a bit into either VBA or macros as I'd like to put in some conditional visibility for my form. Basically, I have a checkbox. If it's checked, I want three or four more fields to pop up. Someone was able to point me to a basic VBA formula of if (this checkbox) = true then, (fieldx).visible = true, else, (fieldx).visibility = false, end if.
But I'm so new to this that I need more help and explanation. I tried putting it in but couldn't get it to work (no error message, just nothing changed at all).
Specific questions:
-Does this formula seem right?
-If I want multiple fields to be visible, can I combine them into one formula or should I create a new "if" statement for all?
-Where do I enter this code? I'm running the Office 365 version. For all I know, I'm not even putting it in the right place.
-How do I determine the field names to replace the (this checkbox) and (fieldx) in the formula? I tried entering the name I title the fields as, but with the spaces in the name I got an error message, and without the spaces nothing happened. Is there a specific naming convention to turn the field names into formula-appropriate titles? Is the name listed somewhere?
-Once I get the formula entered, is there something I have to do to get it to run/take effect? I tried saving, closing and reopening with no changes.
-Is this the best way to go about this?
If there's anything else you think I should know, I would love to hear it - but please keep in mind I'm very new to this so if you could keep it at "dummy" or ELI5 levels of explanation, I'd appreciate it!
after creating a form with 4 textboxes and a checkbox put the form in design mode (lower right corner has design mode selected, select a textbox and hit property sheet on the ribbon (or f4).
On the property sheet note the visible property. set the visible property to false. Now the textbox will be invisible when the form starts.
Tip you can select all the textboxes at the same time and set their properties all at once.
Every control on the form and even the various parts of the form have properties you can set and play with. For instance you can give any name you want to any control. On the property sheet go to the other tab and set the name property.
Tip: choose a name you you will remember without having to look it up and describes the controls function.
Next select the checkbox (not the checkbox's label). On the property sheet go to the event tab and select the on click event. hit the ellipsis and choose code builder. Access is Event Driven. We want the textboxes to appear when the checkbox is selected so we put that code in the checkbox click event.
after choosing code builder we get the code window where we can browse among all the events for all our forms. for now all you should see is something like:
Private Sub mycheckbox_Click()
End Sub
So insert some code to handle the checkboxes like:
Private Sub mycheckbox_Click()
If mycheckbox = True Then
txtbox1.Visible = True
txtbox2.Visible = True
txtbox3.Visible = True
txtbox4.Visible = True
Else
txtbox1.Visible = False
txtbox2.Visible = False
txtbox3.Visible = False
txtbox4.Visible = False
End If
End Sub
now when the checkbox is not checked no textboxes are visible.
but when the checkbox is checked they appear
I am trying to build a template that has ActiveX buttons for calling Sub procedures. At some point, I have to select the text and convert it to a table.
So, I have to find a way to select the text, without selecting the ActiveX controls.
I've figured there would be two approaches:
write a code that selects the text without objects (I only have
ActiveX objects);
change the objects property in a way that they don't get
selected using Selection.WholeStory or similar code.
I've tried the following methods, without success:
using Selection.WholeStory - it selects all text, including the ActiveX controls
wraping the objects Square, not in line with the text, and positioning them outside the printing area - the objects still get selected
putting the objects in the header - in this way, the buttons cannot be used/clicked
putting the controls in a textbox - they still get selected
Do you know a way of achieving my purpose?
The easiest way was to put a section marker after the buttons (that are configured as "in line") and protect first section from editing.
Click on Developer -> Restrict Editing -> Check Allow only this type of editing in the document and Select Filling in forms. Then, click on Select Sections and Select the first section.
Next, in the VBA code, to select all the text, I use this code:
Dim rngText As Range
Set rngText = ActiveDocument.Sections(2).Range
rngText.Select
Nutshell:
What is the equivalent to Me.ListBox1.Selected(2) = True but for highlighting instead of Selecting?? (Highlight might be the wrong word but I'm sure I've seen that before in this context - the outline box around an option instead of actually selecting it)
** Tried **
Me.ListBox1.ListIndex = 2
doesn't do anything either.
With Me.ListBox1
saveVal = .List(0)
.Value = ""
.Value = saveVal
End With
Gives me an error saying "Invalid Property Value"
Background:
Why do I need to click twice on some items/boxes?
I have a userform with several ListBox which are populated by adding items one by one, which works fine.
The ListBox settings have been changed to MultiSelect = 1 - fmMultiSelectMulti and ListStyle = 1 - fmListStyleOption
The issue is when trying to select an option on some boxes for the first time, it just highlights it without selecting it, while on other boxes and other tries it may or may not select an option straight away. It doesn't seem to be the same culprits and is a bit random - does it have something to do with where I'm clicking on the option? On the item text instead of the item box? Why does it work on some and not others?
After I've selected one option in a box, it then allows me to select any other with a single click which is the desired behaviour.
I found a link where someone had suggested this behaviour was because of a corrupted workbook, but I don't think it's that. I just created a new book with 1 listbox in a userform, changed to desired settings, copied the listbox 6 times, put the listsource as rand() in columns A:G and I'm still getting the same issue.
Edit: My plan is to "highlight" the top option on each box so that the first click on a box has no option other than to select (because something is already highlighted)...
The trick to tackling my INITIAL problem seems to have been after populating each list to set .ListIndex = 0 but this only worked after using .SetFocus
Solved! (For now, I think)
Even though this doesn't highlight anything it allows me to select something first time without fail.
I have 4 checkboxes but we need to restrict selection to just a single one, meaning if you check the first, the other 3 will go unchecked. I know we could use ActiveX radio buttons but we'd prefer to avoid ActiveX if possible, plus with check boxes we have more control over the layout.
I've set the name of the checkbox appropriately to Check1:
And then I've put this very basic script into the Visual Basic section:
Private Sub Check1_Click()
Check1.Enabled = True
Check2.Enabled = False
Check3.Enabled = False
Check4.Enabled = False
End Sub
But unfortunately checking the first box doesn't uncheck the next 3.
Any ideas please? Thank you!
If these are Content Controls, as you indicate, then they do not have a CLICK event. Nor can they be identified by VBA by their Title property. The code you show us is for ActiveX controls, which you say you don't want to use...
Working with content control events is not as simple and intuitive as with ActiveX controls. Similar to form fields, Content Controls only have "editing" events that trigger on the user entering and exiting the content control. These events are available in the ThisDocument module, in the Document category.
The same ContentControlOnExit event triggers for ALL content controls in the document, so you need a Select Case or If conditional to query the ContentControl argument in order to know which content control was exited.
In order to address the other checkboxes you need to use the Document.SelectContentControlsByTitle (or ...ByTag) method which returns an array of all content controls with that title (or tag).
If you really want to emulate a "click" event then you need to insert a Custom XML Part in the document with nodes linked to the content controls. When the user changes the state of the control the ContentControlBeforeStoreUpdate event will trigger, letting you take action.
The property you need is Value, not Enabled.
The purpose of property Enabled is to prevent a control from being changed by user.
Additionaly, you need to prevent it from the events cascade. It means that when you change programatically the value of Check2, this will trigger Private Sub Check2_Click() and so on.
In order to make it work you should change your code like that:
Private Sub Check1_Click()
If Check1.Value Then
Check1.Value = True
Check2.Value = False
Check3.Value = False
Check4.Value = False
End If
End Sub
and similarly for the other check boxes.
For your purpose radio buttons will be better choice. Radio buttons have built-in functionality to uncheck currently selected button if other one is checked.
How to set an Infragistics ribbon group visiblity to false in code?
I am trying to hide an Infragistics group box depending on the users Dpi on form load.
There is a button inside the group area that I have managed to hide using:
utmApplicant.Tools("Match").SharedProps.Visible = False
I assumed I could use the same code to hide the group box but it keeps saying that the key has not been found but I am using the right key. Any suggestions?
I'm using VB.NET
It is not clear to what kind of object you are referring to.
In an Infragistics UltraToolbarsManager there is a Ribbon object that contains a Tabs collection. Each Tab contains a Groups collection and each Group contains one or more Tools.
So, to hide the first tab (I have used an integer to index, but the key string works as well)
utmApplicant.Ribbon.Tabs(0).Visible = False
To hide a specific group inside the first tab
utmApplicant.Ribbon.Tabs(0).Groups(0).Visible = False
To hide a particular tool assigned to a specific Group (a label, a button, a textbox or other kind of UI widgets) you could use this syntax
utmApplicant.Ribbon.Tabs(0)
.Groups(0)
.Tools("Match")
.InstanceProps.Visible = DefaultableBoolean.False
Tools are kept in the global collection under the UltraToolbarsManager hierarchy root but when assigned to a specific Group could be referenced with the syntax above.