 |
BOOK: Professional Outlook 2007 Programming ISBN: 978-0-470-04994-5
 | This is the forum to discuss the Wrox book Professional Outlook 2007 Programming by Ken Slovak; ISBN: 9780470049945 |
|
Welcome to the p2p.wrox.com Forums.
You are currently viewing the BOOK: Professional Outlook 2007 Programming ISBN: 978-0-470-04994-5 section of the Wrox Programmer to Programmer discussions. This is a community of software programmers and website developers including Wrox book authors and readers. New member registration was closed in 2019. New posts were shut off and the site was archived into this static format as of October 1, 2020. If you require technical support for a Wrox book please contact http://hub.wiley.com
|
|
|

November 14th, 2007, 07:38 PM
|
Authorized User
|
|
Join Date: Aug 2004
Posts: 95
Thanks: 0
Thanked 0 Times in 0 Posts
|
|
Outlook 2007 Forms Programming ComboBox
Hello,
I need to make a combobox within a custom message form populate based on another combobox within the same form. I don't even know where to begin. It is the first time I've ever tried to write code for Outlook forms. If you can point me in the right direction, I'd appreciate it.
Thanks, 
Arsi
*******(*)*******
__________________
*******(*)*******
|

November 15th, 2007, 10:19 AM
|
Wrox Author
|
|
Join Date: Sep 2007
Posts: 24
Thanks: 0
Thanked 0 Times in 0 Posts
|
|
Hi,
Where is the data for the combobox coming from and how do you want to base the contents of one on the other?
Do you need to store the resulting selections from the comboboxes in the form data so it's available at a later time?
Probably the best places to begin are at http://www.outlookcode.com/article.aspx?ID=35 for information about custom forms in general, http://www.outlookcode.com/article.aspx?id=32 for information on placing custom controls on Outlook forms, and the List and Combo Boxes section at the second URL for specific information and links about comboboxes.
Ken Slovak
|

November 15th, 2007, 12:45 PM
|
Authorized User
|
|
Join Date: Aug 2004
Posts: 95
Thanks: 0
Thanked 0 Times in 0 Posts
|
|
Hi Ken,
Thank you for the quick response. I'll look into the links you gave me. The data from the first combo box is static (hard coded). Actually, initially, I setup the entire form with the user interface (drag drop), but later the business logic was requested. The data for the second combo box may also be hard coded. Basically, when a user selects one value from the first combo box, the second combo box must be populated according to the selection.
Thank you for your help.
Arsi
*******(*)*******
|

November 15th, 2007, 01:30 PM
|
Authorized User
|
|
Join Date: Aug 2004
Posts: 95
Thanks: 0
Thanked 0 Times in 0 Posts
|
|
Hi Ken,
Thank you for the links, they've been very helpful. This is what I have right now:
Sub Item_CustomPropertyChange(ByVal Name)
Dim SiteValue
Set TheInspector = Item.GetInspector
Set oPage = TheInspector.ModifiedFormPages("Message")
Set oCtrl = oPage.Controls("cboSites")
Set mCtrl = oPage.Controls("cboRoomReserved1")
Select Case Name
Case "cboSites"
SiteValue = oCtrl.Value
MsgBox "The Value is: " & SiteValue
Select Case SiteValue
Case "Bur"
mCtrl.PossibleValues = "Board Room; Operations; Finance;"
End Select
End Select
End Sub
After Publishing the form and Running it, I get an error that says "Could not find the specified object: Line No. 5".
I have the control in the 3rd frame control of a set of 3 frame controls. Do I need to set these controls as well?
Thank you again,
Arsi
*******(*)*******
|

November 15th, 2007, 02:27 PM
|
Wrox Author
|
|
Join Date: Sep 2007
Posts: 24
Thanks: 0
Thanked 0 Times in 0 Posts
|
|
Hi,
If the controls are all on the "Message" tab then to get cboSites you would use something like this if cboSites was in frame control fra1:
Set oCtrl = oPage.Controls("fra1").Controls("cboSites")
A couple of tips:
1. I'd move the Set lines inside the Case block so they are executed only if the user property is relevant.
2. CustomPropertyChange fires for your controls only if they are bound controls (bound to an Outlook.UserProperty). You must bind each combobox to a UserProperty so the event will fire.
3. The Name passed to CustomPropertyChange is the name of the UserProeprty the control is bound to, not the name of the user control. So if cboSites is bound to "userSites" then Name would be "userSites" in the Case tests. Same for the other combo.
4. Never use PossibleValues in code to set a combo. That is guaranteed to one-off the form, which is not good. Outlookcode.com has interesting information on the bad effects of one-offing, one of which is that your code will no longer run.
Ken Slovak
|

November 15th, 2007, 02:30 PM
|
Wrox Author
|
|
Join Date: Sep 2007
Posts: 24
Thanks: 0
Thanked 0 Times in 0 Posts
|
|
I forgot to mention that instead of using PossibleValues use the AddItem method of the combo to add items to its list. Call Clear() first to clear it out, then add your entries using AddItem.
Ken Slovak
|

November 15th, 2007, 03:00 PM
|
Authorized User
|
|
Join Date: Aug 2004
Posts: 95
Thanks: 0
Thanked 0 Times in 0 Posts
|
|
Hi Ken,
Thanks again!
This is what I have now:
Sub Item_CustomPropertyChange(ByVal Name)
Set TheInspector = Item.GetInspector
Set oPage = TheInspector.ModifiedFormPages("Message")
Select Case Name
Case "cboSites"
Dim SiteValue
Set Frame1 = oPage.Controls("frmVCRequest")
Set Frame2 = Frame1.Controls("frmVCSiteSelection")
Set Frame3 = Frame2.Controls("frmSite1")
Set oCtrl = Frame3.Controls("ComboBox1")
Set mCtrl = Frame3.Controls("ComboBox7")
SiteValue = oCtrl.Value
Select Case SiteValue
Case "Site 1"
mCtrl.Clear()
mCtrl.AddItem = "Room 7"
mCtrl.AddItem = "Room 8"
mCtrl.AddItem = "Room 9"
mCtrl.AddItem = "Room 10"
mCtrl.AddItem = "Room 11"
Case "Site 2"
mCtrl.Clear()
mCtrl.AddItem = "Room 4"
mCtrl.AddItem = "Room 5"
mCtrl.AddItem = "Room 6"
Case "Site 3"
mCtrl.Clear()
mCtrl.AddItem = "Room 1"
mCtrl.AddItem = "Room 2"
mCtrl.AddItem = "Room 3"
Case Else
mCtrl.AddItem = "N/A"
End Select
End Select
End Sub
At Line 19 I get an object does not support 'AddItem' error message. Both Combo boxes are bound. I got this code to work using 'PossibleValues', but since that's not the best way to do it, I'd like to get it to work with 'AddItem'. What am I doing wrong?
Thanks again,
Arsi
*******(*)*******
|

November 15th, 2007, 03:06 PM
|
Authorized User
|
|
Join Date: Aug 2004
Posts: 95
Thanks: 0
Thanked 0 Times in 0 Posts
|
|
Hi Ken,
I found the problem! I was writing mCtrl.AddItem = "Room 1" where it should have been mCtrl.AddItem "Room 1". Ooops!
Thank you so much!!!! :D
Arsi
*******(*)*******
|

November 15th, 2007, 03:38 PM
|
Wrox Author
|
|
Join Date: Sep 2007
Posts: 24
Thanks: 0
Thanked 0 Times in 0 Posts
|
|
So everything's working now? Good. You have to be careful with the syntax you use.
I've often found that it's far easier to get form code running initially by testing it in the Outlook VBA project. I can use fill object declarations with As clauses, get the benefits of real Help and Intellisense and get various other benefits. Once the code is debugged and running I convert it to VBScript code, which is very easy and port it to my forms.
Ken Slovak
|

December 20th, 2007, 01:39 PM
|
Authorized User
|
|
Join Date: Aug 2004
Posts: 95
Thanks: 0
Thanked 0 Times in 0 Posts
|
|
Hi Ken, :)
Yes. Yes. It's me AGAIN! Well, I got the add-in to work correctly. Now I need to create a batch file to install it and everything that comes with it silently. This is what I have:
@echo off
rem ================================================== ===============
rem Silent Installation of MS Outlook Add-in
setup /qn /l*v \\server\directory 1\directory 2\directory 3\directory 4\install.log /i /a \\server\directory 1\directory 2\directory 3\directory 4\setup.exe
rem ================================================== ===============
I get the error message "Please go to the control panel to install & configure system components" when I double-click on the batch file. What do you think might be causing this?
Thanks!
Arsi
*******(*)*******
|
|
 |