ExcelBanter

ExcelBanter (https://www.excelbanter.com/)
-   Excel Programming (https://www.excelbanter.com/excel-programming/)
-   -   Excel 2003 VBA question (https://www.excelbanter.com/excel-programming/322340-excel-2003-vba-question.html)

Hogan's Goat

Excel 2003 VBA question
 
Hi, sorry if I appear totally lame but I know just enough VBA to be
highly dangerous. I am trying to make a small dialog that will do many
things, including email the active workbook to user's choice of email
addresses.

I have checkboxes by each name which will correspond to a specific email
address, plus one with a text box that will allow a user to supply an
email address, like this:

cbCustomer
|-tbCustomerEmail
cbSales
cbAdmin
cbMfg
cbSupport
cbMgmt

What I want to do is first check to see if all of the checkboxes are not
selected, and throw up a msgbox, then build an array based out of the
selected checkboxes and add them into this line of code:

ActiveWorkbook.SendMail Recipients:=arrayEmail, Subject:="Please
process this order immediately"
Application.Dialogs(xlDialogSendMail).Show

My questions:
1 - How can I build the arrayEmail depending on which checkboxes are
selected?
2 - Is that the best way to email the active workbook? It pops up
the dialog about "Something is trying to send email from this app - OK?"
which I would rather not have.

Best regards,
Me


Bill Linker

Excel 2003 VBA question
 
Well, looking at the events available to checkboxes...there isn't much that
intrinsically gives you much help. Un-needed mouse and keyboard events and
the "default" event "Change". This event only tells you that the value
changed...so you still have to check the value to determine the current
value....not very useful to bother checking because you do not know if the
user is even done making changes yet.

I made something similar to this to allow batch processing of multiple
reports. I just have a "Done" and "Cancel" button and do not bother checking
the state of checkboxes until the user clicks "Ok". I just use a series of
If statements, here are the first two from my program:

Private Sub ButtonOK_Click()

If (CheckBoxPSOS.Value = True) Then
Call formatPSOS(TextBoxPSOS.Value, useDefault)
End If
If (CheckBoxInventory.Value = True) Then
Call formatDailyInv(TextBoxInventory.Value, useDefault)
End If

....

In your case you have 6 possible recipients. Make a temp array of 6
elements. Add the beginning of the Click() event initialize a counter
(recipientCount) to zero. Then check each of your checkboxes and add email
addresses as needed and increment the recipientCount (also your array index)
before examining the next checkbox. When you are done, check your counter,
if still 0, use the built-in MsgBox(strMsg as string) function to popup a
warning message. Otherwise create a new array of the correct size (using
Redim) and copy your email list over to the new object.

The warning message "Something is trying to send email from this app - OK?"
is to allow you to stop a potentially malicious macro from sending email. I
am not sure if this can be turned off, but if so, it would probably be by
setting Macro Security to Low (Tools-Macros-Macro Security). You may also
be able to set yourself up as a trusted publisher (I am not familiar with
that process).


If the sendMail function will work with a recipient string like
; ; " (i.e. semi-colon
or comma separated list) you could avoid arrays and just append addresses to
your string.

"Hogan's Goat" wrote:

Hi, sorry if I appear totally lame but I know just enough VBA to be
highly dangerous. I am trying to make a small dialog that will do many
things, including email the active workbook to user's choice of email
addresses.

I have checkboxes by each name which will correspond to a specific email
address, plus one with a text box that will allow a user to supply an
email address, like this:

cbCustomer
|-tbCustomerEmail
cbSales
cbAdmin
cbMfg
cbSupport
cbMgmt

What I want to do is first check to see if all of the checkboxes are not
selected, and throw up a msgbox, then build an array based out of the
selected checkboxes and add them into this line of code:

ActiveWorkbook.SendMail Recipients:=arrayEmail, Subject:="Please
process this order immediately"
Application.Dialogs(xlDialogSendMail).Show

My questions:
1 - How can I build the arrayEmail depending on which checkboxes are
selected?
2 - Is that the best way to email the active workbook? It pops up
the dialog about "Something is trying to send email from this app - OK?"
which I would rather not have.

Best regards,
Me



Hogan's Goat

Excel 2003 VBA question
 
OK, let me simplify my question a little:

I have five checkboxes within a frame on a form I am building. They are
linked to a button. If you click the button when none of the checkboxes
are checked, I want to throw up a MsgBox sanying, "Woopsy! Check a box
first."

Must I build an array of the checkboxes and, when clicking on the button,
check for the .Enabled value of each? How would you do it?

Thanks!

Here's a cheerful little earful from ?B?QmlsbCBMaW5rZXI=?=:

Well, looking at the events available to checkboxes...there isn't much
that intrinsically gives you much help. Un-needed mouse and keyboard
events and the "default" event "Change". This event only tells you
that the value changed...so you still have to check the value to
determine the current value....not very useful to bother checking
because you do not know if the user is even done making changes yet.

I made something similar to this to allow batch processing of multiple
reports. I just have a "Done" and "Cancel" button and do not bother
checking the state of checkboxes until the user clicks "Ok". I just
use a series of If statements, here are the first two from my program:

Private Sub ButtonOK_Click()

If (CheckBoxPSOS.Value = True) Then
Call formatPSOS(TextBoxPSOS.Value, useDefault)
End If
If (CheckBoxInventory.Value = True) Then
Call formatDailyInv(TextBoxInventory.Value, useDefault)
End If

...

In your case you have 6 possible recipients. Make a temp array of 6
elements. Add the beginning of the Click() event initialize a counter
(recipientCount) to zero. Then check each of your checkboxes and add
email addresses as needed and increment the recipientCount (also your
array index) before examining the next checkbox. When you are done,
check your counter, if still 0, use the built-in MsgBox(strMsg as
string) function to popup a warning message. Otherwise create a new
array of the correct size (using Redim) and copy your email list over
to the new object.

The warning message "Something is trying to send email from this app -
OK?" is to allow you to stop a potentially malicious macro from
sending email. I am not sure if this can be turned off, but if so, it
would probably be by setting Macro Security to Low
(Tools-Macros-Macro Security). You may also be able to set yourself
up as a trusted publisher (I am not familiar with that process).


If the sendMail function will work with a recipient string like
; ; " (i.e.
semi-colon or comma separated list) you could avoid arrays and just
append addresses to your string.

"Hogan's Goat" wrote:

Hi, sorry if I appear totally lame but I know just enough VBA to be
highly dangerous. I am trying to make a small dialog that will do
many things, including email the active workbook to user's choice of
email addresses.

I have checkboxes by each name which will correspond to a specific
email address, plus one with a text box that will allow a user to
supply an email address, like this:

cbCustomer
|-tbCustomerEmail
cbSales
cbAdmin
cbMfg
cbSupport
cbMgmt

What I want to do is first check to see if all of the checkboxes are
not selected, and throw up a msgbox, then build an array based out of
the selected checkboxes and add them into this line of code:

ActiveWorkbook.SendMail Recipients:=arrayEmail,
Subject:="Please
process this order immediately"
Application.Dialogs(xlDialogSendMail).Show

My questions:
1 - How can I build the arrayEmail depending on which
checkboxes are
selected?
2 - Is that the best way to email the active workbook? It
pops up
the dialog about "Something is trying to send email from this app -
OK?" which I would rather not have.

Best regards,
Me







All times are GMT +1. The time now is 12:32 PM.

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
ExcelBanter.com