Unexpected behaviour in a Lotus Notes programmable table - lotus-notes

I'm designing a workflow database in Lotus Notes 6.0.3 (soon upgrading to 8.5), and my OS is Windows XP.
I have recently tried converting a tabbed table into a programmable one. This was so that I could control which tab was displayed to the user when it was opened, so that they were presented with the most appropriate one for that document's progress through the workflow. That part of it works!
One of the tabs features a radio button that controls visibility of the next tab, and a pair of cascading dialogue boxes. One contains the static list "Person":"Team", and the other has a formula based on the first:
view:=#If(PeerReview = "Team"; "GroupNames"; "GroupMembers");
#Unique(#DbColumn(""; ""; view; 1))
The dialogue boxes have the property "Refresh fields on keyword change" selected.
The behaviour that I wasn't expecting is this. If the radio button is set to "Yes" and a value is selected in one of the dialogue boxes, the table opens the next tab. If the radio button is set to "No" and a value is selected in one of the dialogue boxes, the entire table is hidden.
I can duplicate the latter by switching off the "Refresh fields on keyword change" property on the dialogue boxes and instead pressing F9 after selecting a value. I have no idea why the former occurs, though. The table is called "RFCInfo", and I have a field on the form called "$RFCInfo" which is editable, hidden from all users who aren't me and initially set by a Postopen script, which I can post if necessary - it's essentially a Select Case statement that looks at a particular item value and returns the name of the table row relating to that value.
Can anyone offer any pointers?

Hide-when formulas in table cells in Notes R5 and R6 were notorious for breaking in unpredictable ways when you edited the table cells. Even in R7, I think they were still a little bit funky, but by R8 they were finally really solid. You haven't shown the hide-when's but my first guess is that you are simply a victim of the bad behavior.
Please don't shoot the messenger, but the usual way we addressed this sort of problem was to painstakingly re-create the entire table from scratch, and hope we never have to edit it again. I.e., make a copy of the table in a scratch form and clear all the hide-whens -- one by one. Then create a brand new empty table in a second scratch form and get all the cells set up exactly like the original table, including nested tables, merged cells, and other settings -- but skip the hide-whens for now. Then copy each cell's content from the first scratch form to the corresponding cell of the second scratch form. Then, referring to the hide-whens in the original form, re-create each hide-when on the paragraphs in the cells on the second scratch form. Finally, delete the original table from your original form and then copy/paste the table from the second scratch from back into your original form.

Once you have R8.5, move to XPages in Notes, it's almost a no-brainer to implement your tabs. And in return, you get many other interesting issues to solve!

Related

Generate comboboxes depending on number inserted in first combobox

I'm doing an userform where in one of the fields (lets say its combobox1) the user is asked for the number of failures, and for each failure he has to put the type of failure, number of part and in another field the type of rework (3 fields to fill for each failure). And what I would like to know if that if it's possible to generate comboboxes depending on the number of failures made. For example: if the user puts 3 in the field of failures, 9 comboboxes should appear and so on.
I also think that maybe another way would be to have the standards 3 comboboxes and clear the fields each time the user press a button and a counter appears indicating which failure description he is filling, but I would also like to know how this could integrate into the whole userform, which already has a "submit" button.
Maybe there could be another reasoning for this, and I would greatly appreciate any help.
I don't really have much experience using dynamically created tabstrips, but they may be helpful with creating the layout you're describing. I would recommended in the base userform, include a tabstrip with a single tab and the 3 comboboxes/textboxes that are needed for a single failure. (You could keep it invisible until after "combobox1" has a value, if desired) Then use the number from the combobox to dynamically create the additional tabs on the tabstrip:
Private Sub ComboBox_Change()
'To remove previous tabs if combobox changed
For i = 1 To TabStrip1.Tabs.Count - 1
TabStrip1.Tabs.Remove(i)
Next i
'Adding additional tabs to tabstrip
For i = 1 To ComboBox.Value - 1
TabStrip1.Tabs.Add
Next i
End Sub
The tab currently selected can be identified by using the TabStrip1.Value property. I think the change event is queued by the TabStrip1.Value changing.
You will have to manually clear out any values when the tab strip changes (or fill back in values they previously filled out but want to view again).
However, since you'd be determining which tab you're on by "index" (the .value property) you could create a 2d array (redim it to correct rows/columns based off combobox1's value) and use the tab "index" to store combobox values and retrieve existing values for when the user switches back to an existing tab.
And maybe consider "locking" the combobox1 so the value can't be changed by accident. This could be accomplished by having a variable initialized to, maybe -1, which gets set to the combobox value after they've started adding infor to the incidents. Or don't remove any tabstrip tabs, only add if the number is greater than the existing count. (If you want them to put in whatever value they'd like, maybe consider using a textbox?)

Is it possible to show the text of a textbox in anotherone referencing by ID? (QlikView)

I have a QlikView TextBox with some text like "This is a test and it is not working".
Now I want to show the same text on another Sheet in another TextBox and it should always be the same.
So I want to reference the first TextBox, so that the text will be displayed in the second one.
Is it possible to refernce the TextBox by their ID? And if so, how can I realise this?
Create your text box, right click on it, select "Copy to Clipboard -> Object", then go to whatever sheet you want the mirrored text box on (or same sheet if you want it on same), right click and select "Paste Sheet Object As Link". I believe that will do what you want. You could always use a variable to accomplish this if you have a use for the text elsewhere.
You can create a linked object, which will mean that the content of one is mirrored on the other.
Set up a text box on one tab, then drag it onto a new tab whilst holding CTRL+SHIFT, you'll see a little chain link appear as you drag the object.
Now a change in one of these objects will reflected in all of the others.
One component (Windows terminology) or widget (UNIX/X11 terminology) has precisely ONE physical manifestation; that's just a fundamental tenet of geometry management.
In order to have a textbox that "mirrors" another one, so to speak, you must retrieve the contents of the original and post it into the copy. Make certain that you do this every time there's an event that either (a) modifies the text in the original textbox or (b) exposes--that is, renders visible when 'twas previously (partially) invisible--the secondary textbox.

VBA Listbox not updating to reflect new source list when called from itself

Edit:
Playing around further, it seems that you can't assign a new array to a listbox via the .list=somelist approach when the assignment happens in response to a click on the listbox itself. Or rather, you can assign the list, but it simply won't visually populate the listbox...although Excel seems to think it's there.
The .additem or .removeitem methods do however result in a visual change when called from a listbox click, which means you have to build your new array up that way I guess. How tedious.
You can however feed a listbox an entirely new array using the .list=somelist approach via a CommandButton-initiated action. But the user has to obviously click a button to do this. Which in my case below defeats the purpose.
Edit Over.
I'm designing a UserForm to help filter PivotTables. It's a cross between the existing Pivot Filter functionality and a Slicer. Here's what you see if you double-click on a PivotField header:
Note the Search field at the top, and the three buttons immediately below that search field. If you type something into that field, then instead of displaying everything that's currently filtered, you instead get a list of any matches, and you can then apply those search results to the underlying PivotTable via those three CommandButtons. The first cb simply filters the PivotTable to reflect the search, and the other two let you add or remove any search result from an existing filter.
I want to do away with those three command buttons, and instead (in the event that a search is performed) simply list those three options at the top of the ListBox above any search results returned. Clicking on those three options will then trigger the exact same code as currently triggered by the Command Button.
Here's how that looks currently if I actually type something in that Search box (Note I haven't yet removed the three command buttons this does away with from that Search frame):
I've added a simple bit of code to the lbResults_Change() event handler that checks if a user clicks any of those first three options. All that code does is trigger the exact same routines as would be triggered if they'd simply clicked on the actual command buttons themselves:
For i = 0 To 4
If Me.lbResults.Selected(i) Then Exit For
Next i
Select Case i
Case 0: cmdApplySearch_Click
Case 1: cmdAddToFilter_Click
Case 2: cmdSubtractFromFilter_Click
Case 3: Me.lbResults.Selected(3) = False
End Select
Here' the problem: The listbox gets updated just fine if I click on those command buttons, as you can see from the below. The Pivot has been filtered accordingly, and those contextual search options have been removed from the top of the listbox (and the search field cleared):
But the listbox does NOT get updated if the exact same routine is triggered from a click on one of those top three options in listbox itself:
As you can see from the above screenshot, it still shows those three options at the top, even though they are NOT in the array that I assigned to the listbox, as evidenced by the screenshot below:
But as you could see from the earlier screenshot, it shows 7 items in the ListBox instead of the three there actually are. But there are indeed just three items that should be showing in that list box:
? .ListCount
3
? .List(0)
263213: ICT Systems Test Engineer
? .List(1)
263299: ICT Support and Test Engineers nec
? .List(2)
839313: Product Tester
Basically, as soon as I try to update what's in the listbox via a click on the listbox itself, I can't update it.
It doesn't seem to matter if I set focus to something other than the listbox before the filtering code executes, and I've even tried completely clearing the Listbox with .clear. It just doesn't clear, until I manually click on one of those command buttons again.
Anyone have any pointers?
Ah, what an idiot I am for overlooking the painfully obvious solution. The ListBox list happily redraws in response to any event other than the ListBox_Click event, right? So all I needed to do was to use the ListBox_Click event to determine what got clicked (as I currently do), and then use the ListBox_MouseUp event to trigger the actual updating of the ListBox list. Works a treat.
Hopefully this post will save someone else two days of pain in the future. Probably me.

To make entire row mandatory to fill if one cell of that row is filled

For ms Excel 2007.
I want the user to fill all cells in a row IF any one cell of that row is filled.
I am using ms-Excel 2007.
The only way I can think of to do this is by using a form. The form would have to be the only way that the user can enter data (you protect the worksheet and the form code "unprotects" it), then when the user fills out the form you check the fields for errors (not just omissions, but things like "that is not a valid date", etc).
To see what I mean, you can see a form at work for data entry in this tutorial. Maybe that's all you need, although there's not really solid data validation built in. But it will get you started.
Once you see how that works, you can try to design your own form that replicates the functionality of this one, but that includes error trapping. This involves opening the VBA editor (<Alt-F11>), inserting a user form, adding fields and buttons, and writing some code that is run when the "OK" button is clicked.
Not saying this is an easy thing to implement (I am guessing from the question that you may be new at this), but give it a shot. When you get stuck - post an update to your question or leave a comment.

Excel User Form, Previous Button

I have an excel user form for data entry, at the moment the form functions so that users can add data. I would like to add a previous,next, first and last case button so that users can make edits via the form. The code I used for the form was derived from this website: http://www.contextures.com/xluserform02.html
If someone could describe how to add those command buttons to that form I would be very appreciative!
Thanks!
I have a tutorial on my site that almost does what you want.
http://www.dailydoseofexcel.com/archives/2004/09/09/linking-userforms-and-worksheets-part-v/
It uses a scrollbar instead of buttons, but you may be able to adapt it. The basic steps are
Load the current row data into the form
Store the current row
When a button is pushed, change the stored row (to +1, -1, the first row, or the last row)
Load the new row's data
Then you have to have code that determines if the current record has been changed. If it has, you have to write the changes or give the user the option to write or discard.
Also, you may want to disable the First and Previous buttons if the user is on the first record. Similar for Last and Next and the last row.
The tutorial on my site has all that code and a downloadable workbook that you can follow along with. Good luck.

Resources