![]() |
Date & Time Picker Properties Question
I am building a production schedule UserForm, which has 15 departments, and
by each department label I included a DTPicker Control. This way my users can select the due of each department for a particular product. My question is this, is there a way to clear the out the date in the drop down box so no date shows? I have cleared the date under the Value Property box, but when I intialize the UserForm the DTPicker Control displays todays date, I guess by default? If you have any other ways around this I would greatly appreciate it, because I think the UserForm looks to busy, with all the dates displayed even though the CheckBox = False. Note: I'm using Excel 2003, Microsoft Date & Time Picker Control 6.0 (SP4) Additonally, I set the DTPicker Control CheckBox Property to True (so a checkbox is displayed next to the date in the drop down box). I also have two textboxes next to each DTPicker Control. I would like to know if there is a way set the Visible Property of the two textboxes to False next to the Picker Control if the Picker Controls Checkbox is not checked. For example: Private Sub dtpEngineer_Click() dtpEngineer.CheckBox.Value = TextBox1.Visible dtpEngineer.CheckBox.Value = TextBox2.Visible End Sub |
Date & Time Picker Properties Question
That means you have 15 DTPicker Controls, right? Okay, you will have to set some event procedures up individually for each of the 15 DTPicker Controls you have. First, here is the common routines (that is, you only need one of each of these)...
' ***** Start Common Procedures ***** Private Sub FormatDTPicker(PickerControl As DTPicker) With PickerControl If .Value = vbNull Then .Format = dtpCustom .CustomFormat = "X" Else .Format = dtpShortDate End If End With End Sub Private Sub UserForm_Initialize() Dim Ctrl As Control For Each Ctrl In Me.Controls If TypeName(Ctrl) = "DTPicker" Then Ctrl.Value = vbNull FormatDTPicker Ctrl End If Next End Sub ' ***** End Common Procedures ***** Next, you need one of each of the following procedures for **each** DTPicker Control that you have **AND** you have to change the control name references inside each of these procedures to match the actual control's name. Here are the procedures you need for DTPicker1.... ' ***** Start Procedures For DTPicker1 Control ***** Private Sub DTPicker1_CloseUp() FormatDTPicker DTPicker1 End Sub Private Sub DTPicker1_Format(ByVal CallbackField As String, _ FormattedString As String) If CallbackField = "X" Then FormattedString = "" End If End Sub Private Sub DTPicker1_MouseDown(ByVal Button As Integer, _ ByVal Shift As Integer, _ ByVal X As stdole.OLE_XPOS_PIXELS, _ ByVal Y As stdole.OLE_YPOS_PIXELS) With DTPicker1 If .Value = vbNull Then .Value = Now End If End With End Sub ' ***** End Procedures For DTPicker1 Control ***** Now, you have to duplicate the above 3 sets of event procedures for each DTPicker Control you have. After you have done that, the DTPicker Controls will all be blank when the UserForm is first loaded. Afterwards, if you want to blank any single DTPicker Control, just set the Value property of that DatePicker Control to vbNull and then call the FormatDTPicker subroutine passing in the name (not a text string of the name, but the name itself). So, for example, if you wanted to blank out just the DTPicker5 control, you would execute these two lines of code... DTPicker5.Value = vbNull FormatDTPicker DTPicker5 The above is adapted from code I developed and have posted in the compiled VB newsgroups over the years. This is easier to do in compiled VB because one can bundle controls into something called a Control Array; all control in an Control Array share the same event procedures and, hence, all of the above duplications you have to do for each DTPicker Control above is avoided in compiled VB. However, I did try out what I have posted for you to do on a limited set of DTPicker Controls situated on a UserForm and the code does work. Rick "RyanH" wrote in message ... I am building a production schedule UserForm, which has 15 departments, and by each department label I included a DTPicker Control. This way my users can select the due of each department for a particular product. My question is this, is there a way to clear the out the date in the drop down box so no date shows? I have cleared the date under the Value Property box, but when I intialize the UserForm the DTPicker Control displays todays date, I guess by default? If you have any other ways around this I would greatly appreciate it, because I think the UserForm looks to busy, with all the dates displayed even though the CheckBox = False. Note: I'm using Excel 2003, Microsoft Date & Time Picker Control 6.0 (SP4) Additonally, I set the DTPicker Control CheckBox Property to True (so a checkbox is displayed next to the date in the drop down box). I also have two textboxes next to each DTPicker Control. I would like to know if there is a way set the Visible Property of the two textboxes to False next to the Picker Control if the Picker Controls Checkbox is not checked. For example: Private Sub dtpEngineer_Click() dtpEngineer.CheckBox.Value = TextBox1.Visible dtpEngineer.CheckBox.Value = TextBox2.Visible End Sub |
Date & Time Picker Properties Question
Thanks for your insights. I never knew you could blank out a Date & Time
picker... While I have no immediate need for that little bit of coding genius I will keep it in mind for next time... Very handy for keeping the UI clean... -- HTH... Jim Thomlinson "Rick Rothstein (MVP - VB)" wrote: That means you have 15 DTPicker Controls, right? Okay, you will have to set some event procedures up individually for each of the 15 DTPicker Controls you have. First, here is the common routines (that is, you only need one of each of these)... ' ***** Start Common Procedures ***** Private Sub FormatDTPicker(PickerControl As DTPicker) With PickerControl If .Value = vbNull Then .Format = dtpCustom .CustomFormat = "X" Else .Format = dtpShortDate End If End With End Sub Private Sub UserForm_Initialize() Dim Ctrl As Control For Each Ctrl In Me.Controls If TypeName(Ctrl) = "DTPicker" Then Ctrl.Value = vbNull FormatDTPicker Ctrl End If Next End Sub ' ***** End Common Procedures ***** Next, you need one of each of the following procedures for **each** DTPicker Control that you have **AND** you have to change the control name references inside each of these procedures to match the actual control's name. Here are the procedures you need for DTPicker1.... ' ***** Start Procedures For DTPicker1 Control ***** Private Sub DTPicker1_CloseUp() FormatDTPicker DTPicker1 End Sub Private Sub DTPicker1_Format(ByVal CallbackField As String, _ FormattedString As String) If CallbackField = "X" Then FormattedString = "" End If End Sub Private Sub DTPicker1_MouseDown(ByVal Button As Integer, _ ByVal Shift As Integer, _ ByVal X As stdole.OLE_XPOS_PIXELS, _ ByVal Y As stdole.OLE_YPOS_PIXELS) With DTPicker1 If .Value = vbNull Then .Value = Now End If End With End Sub ' ***** End Procedures For DTPicker1 Control ***** Now, you have to duplicate the above 3 sets of event procedures for each DTPicker Control you have. After you have done that, the DTPicker Controls will all be blank when the UserForm is first loaded. Afterwards, if you want to blank any single DTPicker Control, just set the Value property of that DatePicker Control to vbNull and then call the FormatDTPicker subroutine passing in the name (not a text string of the name, but the name itself). So, for example, if you wanted to blank out just the DTPicker5 control, you would execute these two lines of code... DTPicker5.Value = vbNull FormatDTPicker DTPicker5 The above is adapted from code I developed and have posted in the compiled VB newsgroups over the years. This is easier to do in compiled VB because one can bundle controls into something called a Control Array; all control in an Control Array share the same event procedures and, hence, all of the above duplications you have to do for each DTPicker Control above is avoided in compiled VB. However, I did try out what I have posted for you to do on a limited set of DTPicker Controls situated on a UserForm and the code does work. Rick "RyanH" wrote in message ... I am building a production schedule UserForm, which has 15 departments, and by each department label I included a DTPicker Control. This way my users can select the due of each department for a particular product. My question is this, is there a way to clear the out the date in the drop down box so no date shows? I have cleared the date under the Value Property box, but when I intialize the UserForm the DTPicker Control displays todays date, I guess by default? If you have any other ways around this I would greatly appreciate it, because I think the UserForm looks to busy, with all the dates displayed even though the CheckBox = False. Note: I'm using Excel 2003, Microsoft Date & Time Picker Control 6.0 (SP4) Additonally, I set the DTPicker Control CheckBox Property to True (so a checkbox is displayed next to the date in the drop down box). I also have two textboxes next to each DTPicker Control. I would like to know if there is a way set the Visible Property of the two textboxes to False next to the Picker Control if the Picker Controls Checkbox is not checked. For example: Private Sub dtpEngineer_Click() dtpEngineer.CheckBox.Value = TextBox1.Visible dtpEngineer.CheckBox.Value = TextBox2.Visible End Sub |
Date & Time Picker Properties Question
And thank you for your compliment. I remember well the aggravation and hair pulling (not much of that to spare since I am bald<g) that I went through while trying to figure out how to make that control work the way I wanted it to. The documentation was not as obvious about it as I would have liked.
Rick "Jim Thomlinson" wrote in message ... Thanks for your insights. I never knew you could blank out a Date & Time picker... While I have no immediate need for that little bit of coding genius I will keep it in mind for next time... Very handy for keeping the UI clean... -- HTH... Jim Thomlinson "Rick Rothstein (MVP - VB)" wrote: That means you have 15 DTPicker Controls, right? Okay, you will have to set some event procedures up individually for each of the 15 DTPicker Controls you have. First, here is the common routines (that is, you only need one of each of these)... ' ***** Start Common Procedures ***** Private Sub FormatDTPicker(PickerControl As DTPicker) With PickerControl If .Value = vbNull Then .Format = dtpCustom .CustomFormat = "X" Else .Format = dtpShortDate End If End With End Sub Private Sub UserForm_Initialize() Dim Ctrl As Control For Each Ctrl In Me.Controls If TypeName(Ctrl) = "DTPicker" Then Ctrl.Value = vbNull FormatDTPicker Ctrl End If Next End Sub ' ***** End Common Procedures ***** Next, you need one of each of the following procedures for **each** DTPicker Control that you have **AND** you have to change the control name references inside each of these procedures to match the actual control's name. Here are the procedures you need for DTPicker1.... ' ***** Start Procedures For DTPicker1 Control ***** Private Sub DTPicker1_CloseUp() FormatDTPicker DTPicker1 End Sub Private Sub DTPicker1_Format(ByVal CallbackField As String, _ FormattedString As String) If CallbackField = "X" Then FormattedString = "" End If End Sub Private Sub DTPicker1_MouseDown(ByVal Button As Integer, _ ByVal Shift As Integer, _ ByVal X As stdole.OLE_XPOS_PIXELS, _ ByVal Y As stdole.OLE_YPOS_PIXELS) With DTPicker1 If .Value = vbNull Then .Value = Now End If End With End Sub ' ***** End Procedures For DTPicker1 Control ***** Now, you have to duplicate the above 3 sets of event procedures for each DTPicker Control you have. After you have done that, the DTPicker Controls will all be blank when the UserForm is first loaded. Afterwards, if you want to blank any single DTPicker Control, just set the Value property of that DatePicker Control to vbNull and then call the FormatDTPicker subroutine passing in the name (not a text string of the name, but the name itself). So, for example, if you wanted to blank out just the DTPicker5 control, you would execute these two lines of code... DTPicker5.Value = vbNull FormatDTPicker DTPicker5 The above is adapted from code I developed and have posted in the compiled VB newsgroups over the years. This is easier to do in compiled VB because one can bundle controls into something called a Control Array; all control in an Control Array share the same event procedures and, hence, all of the above duplications you have to do for each DTPicker Control above is avoided in compiled VB. However, I did try out what I have posted for you to do on a limited set of DTPicker Controls situated on a UserForm and the code does work. Rick "RyanH" wrote in message ... I am building a production schedule UserForm, which has 15 departments, and by each department label I included a DTPicker Control. This way my users can select the due of each department for a particular product. My question is this, is there a way to clear the out the date in the drop down box so no date shows? I have cleared the date under the Value Property box, but when I intialize the UserForm the DTPicker Control displays todays date, I guess by default? If you have any other ways around this I would greatly appreciate it, because I think the UserForm looks to busy, with all the dates displayed even though the CheckBox = False. Note: I'm using Excel 2003, Microsoft Date & Time Picker Control 6.0 (SP4) Additonally, I set the DTPicker Control CheckBox Property to True (so a checkbox is displayed next to the date in the drop down box). I also have two textboxes next to each DTPicker Control. I would like to know if there is a way set the Visible Property of the two textboxes to False next to the Picker Control if the Picker Controls Checkbox is not checked. For example: Private Sub dtpEngineer_Click() dtpEngineer.CheckBox.Value = TextBox1.Visible dtpEngineer.CheckBox.Value = TextBox2.Visible End Sub |
Date & Time Picker Properties Question
I'm not bald yet but I know the one time I tried I grew a little more
forehead that day... -- HTH... Jim Thomlinson "Rick Rothstein (MVP - VB)" wrote: And thank you for your compliment. I remember well the aggravation and hair pulling (not much of that to spare since I am bald<g) that I went through while trying to figure out how to make that control work the way I wanted it to. The documentation was not as obvious about it as I would have liked. Rick "Jim Thomlinson" wrote in message ... Thanks for your insights. I never knew you could blank out a Date & Time picker... While I have no immediate need for that little bit of coding genius I will keep it in mind for next time... Very handy for keeping the UI clean... -- HTH... Jim Thomlinson "Rick Rothstein (MVP - VB)" wrote: That means you have 15 DTPicker Controls, right? Okay, you will have to set some event procedures up individually for each of the 15 DTPicker Controls you have. First, here is the common routines (that is, you only need one of each of these)... ' ***** Start Common Procedures ***** Private Sub FormatDTPicker(PickerControl As DTPicker) With PickerControl If .Value = vbNull Then .Format = dtpCustom .CustomFormat = "X" Else .Format = dtpShortDate End If End With End Sub Private Sub UserForm_Initialize() Dim Ctrl As Control For Each Ctrl In Me.Controls If TypeName(Ctrl) = "DTPicker" Then Ctrl.Value = vbNull FormatDTPicker Ctrl End If Next End Sub ' ***** End Common Procedures ***** Next, you need one of each of the following procedures for **each** DTPicker Control that you have **AND** you have to change the control name references inside each of these procedures to match the actual control's name. Here are the procedures you need for DTPicker1.... ' ***** Start Procedures For DTPicker1 Control ***** Private Sub DTPicker1_CloseUp() FormatDTPicker DTPicker1 End Sub Private Sub DTPicker1_Format(ByVal CallbackField As String, _ FormattedString As String) If CallbackField = "X" Then FormattedString = "" End If End Sub Private Sub DTPicker1_MouseDown(ByVal Button As Integer, _ ByVal Shift As Integer, _ ByVal X As stdole.OLE_XPOS_PIXELS, _ ByVal Y As stdole.OLE_YPOS_PIXELS) With DTPicker1 If .Value = vbNull Then .Value = Now End If End With End Sub ' ***** End Procedures For DTPicker1 Control ***** Now, you have to duplicate the above 3 sets of event procedures for each DTPicker Control you have. After you have done that, the DTPicker Controls will all be blank when the UserForm is first loaded. Afterwards, if you want to blank any single DTPicker Control, just set the Value property of that DatePicker Control to vbNull and then call the FormatDTPicker subroutine passing in the name (not a text string of the name, but the name itself). So, for example, if you wanted to blank out just the DTPicker5 control, you would execute these two lines of code... DTPicker5.Value = vbNull FormatDTPicker DTPicker5 The above is adapted from code I developed and have posted in the compiled VB newsgroups over the years. This is easier to do in compiled VB because one can bundle controls into something called a Control Array; all control in an Control Array share the same event procedures and, hence, all of the above duplications you have to do for each DTPicker Control above is avoided in compiled VB. However, I did try out what I have posted for you to do on a limited set of DTPicker Controls situated on a UserForm and the code does work. Rick "RyanH" wrote in message ... I am building a production schedule UserForm, which has 15 departments, and by each department label I included a DTPicker Control. This way my users can select the due of each department for a particular product. My question is this, is there a way to clear the out the date in the drop down box so no date shows? I have cleared the date under the Value Property box, but when I intialize the UserForm the DTPicker Control displays todays date, I guess by default? If you have any other ways around this I would greatly appreciate it, because I think the UserForm looks to busy, with all the dates displayed even though the CheckBox = False. Note: I'm using Excel 2003, Microsoft Date & Time Picker Control 6.0 (SP4) Additonally, I set the DTPicker Control CheckBox Property to True (so a checkbox is displayed next to the date in the drop down box). I also have two textboxes next to each DTPicker Control. I would like to know if there is a way set the Visible Property of the two textboxes to False next to the Picker Control if the Picker Controls Checkbox is not checked. For example: Private Sub dtpEngineer_Click() dtpEngineer.CheckBox.Value = TextBox1.Visible dtpEngineer.CheckBox.Value = TextBox2.Visible End Sub |
Date & Time Picker Properties Question
I had a full head of hair before I started in on that project; look at this picture of me taken shortly after I finished it...
https://mvp.support.microsoft.com/pr...Rick.Rothstein <g Rick "Jim Thomlinson" wrote in message ... I'm not bald yet but I know the one time I tried I grew a little more forehead that day... -- HTH... Jim Thomlinson "Rick Rothstein (MVP - VB)" wrote: And thank you for your compliment. I remember well the aggravation and hair pulling (not much of that to spare since I am bald<g) that I went through while trying to figure out how to make that control work the way I wanted it to. The documentation was not as obvious about it as I would have liked. Rick "Jim Thomlinson" wrote in message ... Thanks for your insights. I never knew you could blank out a Date & Time picker... While I have no immediate need for that little bit of coding genius I will keep it in mind for next time... Very handy for keeping the UI clean... -- HTH... Jim Thomlinson "Rick Rothstein (MVP - VB)" wrote: That means you have 15 DTPicker Controls, right? Okay, you will have to set some event procedures up individually for each of the 15 DTPicker Controls you have. First, here is the common routines (that is, you only need one of each of these)... ' ***** Start Common Procedures ***** Private Sub FormatDTPicker(PickerControl As DTPicker) With PickerControl If .Value = vbNull Then .Format = dtpCustom .CustomFormat = "X" Else .Format = dtpShortDate End If End With End Sub Private Sub UserForm_Initialize() Dim Ctrl As Control For Each Ctrl In Me.Controls If TypeName(Ctrl) = "DTPicker" Then Ctrl.Value = vbNull FormatDTPicker Ctrl End If Next End Sub ' ***** End Common Procedures ***** Next, you need one of each of the following procedures for **each** DTPicker Control that you have **AND** you have to change the control name references inside each of these procedures to match the actual control's name. Here are the procedures you need for DTPicker1.... ' ***** Start Procedures For DTPicker1 Control ***** Private Sub DTPicker1_CloseUp() FormatDTPicker DTPicker1 End Sub Private Sub DTPicker1_Format(ByVal CallbackField As String, _ FormattedString As String) If CallbackField = "X" Then FormattedString = "" End If End Sub Private Sub DTPicker1_MouseDown(ByVal Button As Integer, _ ByVal Shift As Integer, _ ByVal X As stdole.OLE_XPOS_PIXELS, _ ByVal Y As stdole.OLE_YPOS_PIXELS) With DTPicker1 If .Value = vbNull Then .Value = Now End If End With End Sub ' ***** End Procedures For DTPicker1 Control ***** Now, you have to duplicate the above 3 sets of event procedures for each DTPicker Control you have. After you have done that, the DTPicker Controls will all be blank when the UserForm is first loaded. Afterwards, if you want to blank any single DTPicker Control, just set the Value property of that DatePicker Control to vbNull and then call the FormatDTPicker subroutine passing in the name (not a text string of the name, but the name itself). So, for example, if you wanted to blank out just the DTPicker5 control, you would execute these two lines of code... DTPicker5.Value = vbNull FormatDTPicker DTPicker5 The above is adapted from code I developed and have posted in the compiled VB newsgroups over the years. This is easier to do in compiled VB because one can bundle controls into something called a Control Array; all control in an Control Array share the same event procedures and, hence, all of the above duplications you have to do for each DTPicker Control above is avoided in compiled VB. However, I did try out what I have posted for you to do on a limited set of DTPicker Controls situated on a UserForm and the code does work. Rick "RyanH" wrote in message ... I am building a production schedule UserForm, which has 15 departments, and by each department label I included a DTPicker Control. This way my users can select the due of each department for a particular product. My question is this, is there a way to clear the out the date in the drop down box so no date shows? I have cleared the date under the Value Property box, but when I intialize the UserForm the DTPicker Control displays todays date, I guess by default? If you have any other ways around this I would greatly appreciate it, because I think the UserForm looks to busy, with all the dates displayed even though the CheckBox = False. Note: I'm using Excel 2003, Microsoft Date & Time Picker Control 6.0 (SP4) Additonally, I set the DTPicker Control CheckBox Property to True (so a checkbox is displayed next to the date in the drop down box). I also have two textboxes next to each DTPicker Control. I would like to know if there is a way set the Visible Property of the two textboxes to False next to the Picker Control if the Picker Controls Checkbox is not checked. For example: Private Sub dtpEngineer_Click() dtpEngineer.CheckBox.Value = TextBox1.Visible dtpEngineer.CheckBox.Value = TextBox2.Visible End Sub |
Date & Time Picker Properties Question
I think that there was a mistake with the picture. I _think_ that's Steve
Ballmer <vbg. "Rick Rothstein (MVP - VB)" wrote: I had a full head of hair before I started in on that project; look at this picture of me taken shortly after I finished it... https://mvp.support.microsoft.com/pr...Rick.Rothstein <g Rick "Jim Thomlinson" wrote in message ... I'm not bald yet but I know the one time I tried I grew a little more forehead that day... -- HTH... Jim Thomlinson "Rick Rothstein (MVP - VB)" wrote: And thank you for your compliment. I remember well the aggravation and hair pulling (not much of that to spare since I am bald<g) that I went through while trying to figure out how to make that control work the way I wanted it to. The documentation was not as obvious about it as I would have liked. Rick "Jim Thomlinson" wrote in message ... Thanks for your insights. I never knew you could blank out a Date & Time picker... While I have no immediate need for that little bit of coding genius I will keep it in mind for next time... Very handy for keeping the UI clean... -- HTH... Jim Thomlinson "Rick Rothstein (MVP - VB)" wrote: That means you have 15 DTPicker Controls, right? Okay, you will have to set some event procedures up individually for each of the 15 DTPicker Controls you have. First, here is the common routines (that is, you only need one of each of these)... ' ***** Start Common Procedures ***** Private Sub FormatDTPicker(PickerControl As DTPicker) With PickerControl If .Value = vbNull Then .Format = dtpCustom .CustomFormat = "X" Else .Format = dtpShortDate End If End With End Sub Private Sub UserForm_Initialize() Dim Ctrl As Control For Each Ctrl In Me.Controls If TypeName(Ctrl) = "DTPicker" Then Ctrl.Value = vbNull FormatDTPicker Ctrl End If Next End Sub ' ***** End Common Procedures ***** Next, you need one of each of the following procedures for **each** DTPicker Control that you have **AND** you have to change the control name references inside each of these procedures to match the actual control's name. Here are the procedures you need for DTPicker1.... ' ***** Start Procedures For DTPicker1 Control ***** Private Sub DTPicker1_CloseUp() FormatDTPicker DTPicker1 End Sub Private Sub DTPicker1_Format(ByVal CallbackField As String, _ FormattedString As String) If CallbackField = "X" Then FormattedString = "" End If End Sub Private Sub DTPicker1_MouseDown(ByVal Button As Integer, _ ByVal Shift As Integer, _ ByVal X As stdole.OLE_XPOS_PIXELS, _ ByVal Y As stdole.OLE_YPOS_PIXELS) With DTPicker1 If .Value = vbNull Then .Value = Now End If End With End Sub ' ***** End Procedures For DTPicker1 Control ***** Now, you have to duplicate the above 3 sets of event procedures for each DTPicker Control you have. After you have done that, the DTPicker Controls will all be blank when the UserForm is first loaded. Afterwards, if you want to blank any single DTPicker Control, just set the Value property of that DatePicker Control to vbNull and then call the FormatDTPicker subroutine passing in the name (not a text string of the name, but the name itself). So, for example, if you wanted to blank out just the DTPicker5 control, you would execute these two lines of code... DTPicker5.Value = vbNull FormatDTPicker DTPicker5 The above is adapted from code I developed and have posted in the compiled VB newsgroups over the years. This is easier to do in compiled VB because one can bundle controls into something called a Control Array; all control in an Control Array share the same event procedures and, hence, all of the above duplications you have to do for each DTPicker Control above is avoided in compiled VB. However, I did try out what I have posted for you to do on a limited set of DTPicker Controls situated on a UserForm and the code does work. Rick "RyanH" wrote in message ... I am building a production schedule UserForm, which has 15 departments, and by each department label I included a DTPicker Control. This way my users can select the due of each department for a particular product. My question is this, is there a way to clear the out the date in the drop down box so no date shows? I have cleared the date under the Value Property box, but when I intialize the UserForm the DTPicker Control displays todays date, I guess by default? If you have any other ways around this I would greatly appreciate it, because I think the UserForm looks to busy, with all the dates displayed even though the CheckBox = False. Note: I'm using Excel 2003, Microsoft Date & Time Picker Control 6.0 (SP4) Additonally, I set the DTPicker Control CheckBox Property to True (so a checkbox is displayed next to the date in the drop down box). I also have two textboxes next to each DTPicker Control. I would like to know if there is a way set the Visible Property of the two textboxes to False next to the Picker Control if the Picker Controls Checkbox is not checked. For example: Private Sub dtpEngineer_Click() dtpEngineer.CheckBox.Value = TextBox1.Visible dtpEngineer.CheckBox.Value = TextBox2.Visible End Sub -- Dave Peterson |
Date & Time Picker Properties Question
Come on.... I have **way** more hair than he does.
http://www.microsoft.com/Presspass/e...e/default.mspx Rick "Dave Peterson" wrote in message ... I think that there was a mistake with the picture. I _think_ that's Steve Ballmer <vbg. "Rick Rothstein (MVP - VB)" wrote: I had a full head of hair before I started in on that project; look at this picture of me taken shortly after I finished it... https://mvp.support.microsoft.com/pr...Rick.Rothstein <g Rick "Jim Thomlinson" wrote in message ... I'm not bald yet but I know the one time I tried I grew a little more forehead that day... -- HTH... Jim Thomlinson "Rick Rothstein (MVP - VB)" wrote: And thank you for your compliment. I remember well the aggravation and hair pulling (not much of that to spare since I am bald<g) that I went through while trying to figure out how to make that control work the way I wanted it to. The documentation was not as obvious about it as I would have liked. Rick "Jim Thomlinson" wrote in message ... Thanks for your insights. I never knew you could blank out a Date & Time picker... While I have no immediate need for that little bit of coding genius I will keep it in mind for next time... Very handy for keeping the UI clean... -- HTH... Jim Thomlinson "Rick Rothstein (MVP - VB)" wrote: That means you have 15 DTPicker Controls, right? Okay, you will have to set some event procedures up individually for each of the 15 DTPicker Controls you have. First, here is the common routines (that is, you only need one of each of these)... ' ***** Start Common Procedures ***** Private Sub FormatDTPicker(PickerControl As DTPicker) With PickerControl If .Value = vbNull Then .Format = dtpCustom .CustomFormat = "X" Else .Format = dtpShortDate End If End With End Sub Private Sub UserForm_Initialize() Dim Ctrl As Control For Each Ctrl In Me.Controls If TypeName(Ctrl) = "DTPicker" Then Ctrl.Value = vbNull FormatDTPicker Ctrl End If Next End Sub ' ***** End Common Procedures ***** Next, you need one of each of the following procedures for **each** DTPicker Control that you have **AND** you have to change the control name references inside each of these procedures to match the actual control's name. Here are the procedures you need for DTPicker1.... ' ***** Start Procedures For DTPicker1 Control ***** Private Sub DTPicker1_CloseUp() FormatDTPicker DTPicker1 End Sub Private Sub DTPicker1_Format(ByVal CallbackField As String, _ FormattedString As String) If CallbackField = "X" Then FormattedString = "" End If End Sub Private Sub DTPicker1_MouseDown(ByVal Button As Integer, _ ByVal Shift As Integer, _ ByVal X As stdole.OLE_XPOS_PIXELS, _ ByVal Y As stdole.OLE_YPOS_PIXELS) With DTPicker1 If .Value = vbNull Then .Value = Now End If End With End Sub ' ***** End Procedures For DTPicker1 Control ***** Now, you have to duplicate the above 3 sets of event procedures for each DTPicker Control you have. After you have done that, the DTPicker Controls will all be blank when the UserForm is first loaded. Afterwards, if you want to blank any single DTPicker Control, just set the Value property of that DatePicker Control to vbNull and then call the FormatDTPicker subroutine passing in the name (not a text string of the name, but the name itself). So, for example, if you wanted to blank out just the DTPicker5 control, you would execute these two lines of code... DTPicker5.Value = vbNull FormatDTPicker DTPicker5 The above is adapted from code I developed and have posted in the compiled VB newsgroups over the years. This is easier to do in compiled VB because one can bundle controls into something called a Control Array; all control in an Control Array share the same event procedures and, hence, all of the above duplications you have to do for each DTPicker Control above is avoided in compiled VB. However, I did try out what I have posted for you to do on a limited set of DTPicker Controls situated on a UserForm and the code does work. Rick "RyanH" wrote in message ... I am building a production schedule UserForm, which has 15 departments, and by each department label I included a DTPicker Control. This way my users can select the due of each department for a particular product. My question is this, is there a way to clear the out the date in the drop down box so no date shows? I have cleared the date under the Value Property box, but when I intialize the UserForm the DTPicker Control displays todays date, I guess by default? If you have any other ways around this I would greatly appreciate it, because I think the UserForm looks to busy, with all the dates displayed even though the CheckBox = False. Note: I'm using Excel 2003, Microsoft Date & Time Picker Control 6.0 (SP4) Additonally, I set the DTPicker Control CheckBox Property to True (so a checkbox is displayed next to the date in the drop down box). I also have two textboxes next to each DTPicker Control. I would like to know if there is a way set the Visible Property of the two textboxes to False next to the Picker Control if the Picker Controls Checkbox is not checked. For example: Private Sub dtpEngineer_Click() dtpEngineer.CheckBox.Value = TextBox1.Visible dtpEngineer.CheckBox.Value = TextBox2.Visible End Sub -- Dave Peterson |
Date & Time Picker Properties Question
I was confused by the size of his wallet!
"Rick Rothstein (MVP - VB)" wrote: Come on.... I have **way** more hair than he does. http://www.microsoft.com/Presspass/e...e/default.mspx Rick "Dave Peterson" wrote in message ... I think that there was a mistake with the picture. I _think_ that's Steve Ballmer <vbg. "Rick Rothstein (MVP - VB)" wrote: I had a full head of hair before I started in on that project; look at this picture of me taken shortly after I finished it... https://mvp.support.microsoft.com/pr...Rick.Rothstein <g Rick <<snipped |
Date & Time Picker Properties Question
LOL
Yeah, I'll concede that one to you... his wallet is just a **wee** bit larger than mine.<g Rick "Dave Peterson" wrote in message ... I was confused by the size of his wallet! "Rick Rothstein (MVP - VB)" wrote: Come on.... I have **way** more hair than he does. http://www.microsoft.com/Presspass/e...e/default.mspx Rick "Dave Peterson" wrote in message ... I think that there was a mistake with the picture. I _think_ that's Steve Ballmer <vbg. "Rick Rothstein (MVP - VB)" wrote: I had a full head of hair before I started in on that project; look at this picture of me taken shortly after I finished it... https://mvp.support.microsoft.com/pr...Rick.Rothstein <g Rick <<snipped |
Date & Time Picker Properties Question
I hope this replys to all. Thanks for getting back to me with that code.
But I am having an issue with initalizing the UserForm the way I need it too. Let me explain my old setup before your code. My old UserForm had a TextBox next to each department. The user would double click the cell the Sales Order # was contained in and the UserForm would Intialize. When it was Intialized the macro would scan down the row that was double clicked and fill the due dates of each department. If there wasn't a date the textbox was left blank. Is there a way to do this with the DTPicker? In other words, when the UserForm is Initialized if the cell that stores the due date for that department is blank have the DTPicker Control Value display blank and when there is a date have the DTPicker Control Value display that date. Is this possible? Thanks in advanced!! "Dave Peterson" wrote: I was confused by the size of his wallet! "Rick Rothstein (MVP - VB)" wrote: Come on.... I have **way** more hair than he does. http://www.microsoft.com/Presspass/e...e/default.mspx Rick "Dave Peterson" wrote in message ... I think that there was a mistake with the picture. I _think_ that's Steve Ballmer <vbg. "Rick Rothstein (MVP - VB)" wrote: I had a full head of hair before I started in on that project; look at this picture of me taken shortly after I finished it... https://mvp.support.microsoft.com/pr...Rick.Rothstein <g Rick <<snipped |
Date & Time Picker Properties Question
I hope this replys to all. Thanks for getting back to me with that code.
But I am having an issue with initalizing the UserForm the way I need it too. Let me explain my old setup before your code. My old UserForm had a TextBox next to each department. The user would double click the cell the Sales Order # was contained in and the UserForm would Intialize. When it was Intialized the macro would scan down the row that was double clicked and fill the due dates of each department. If there wasn't a date the textbox was left blank. Is there a way to do this with the DTPicker? In other words, when the UserForm is Initialized if the cell that stores the due date for that department is blank have the DTPicker Control Value display blank and when there is a date have the DTPicker Control Value display that date. Is this possible? Thanks in advanced!! "Rick Rothstein (MVP - VB)" wrote: That means you have 15 DTPicker Controls, right? Okay, you will have to set some event procedures up individually for each of the 15 DTPicker Controls you have. First, here is the common routines (that is, you only need one of each of these)... ' ***** Start Common Procedures ***** Private Sub FormatDTPicker(PickerControl As DTPicker) With PickerControl If .Value = vbNull Then .Format = dtpCustom .CustomFormat = "X" Else .Format = dtpShortDate End If End With End Sub Private Sub UserForm_Initialize() Dim Ctrl As Control For Each Ctrl In Me.Controls If TypeName(Ctrl) = "DTPicker" Then Ctrl.Value = vbNull FormatDTPicker Ctrl End If Next End Sub ' ***** End Common Procedures ***** Next, you need one of each of the following procedures for **each** DTPicker Control that you have **AND** you have to change the control name references inside each of these procedures to match the actual control's name. Here are the procedures you need for DTPicker1.... ' ***** Start Procedures For DTPicker1 Control ***** Private Sub DTPicker1_CloseUp() FormatDTPicker DTPicker1 End Sub Private Sub DTPicker1_Format(ByVal CallbackField As String, _ FormattedString As String) If CallbackField = "X" Then FormattedString = "" End If End Sub Private Sub DTPicker1_MouseDown(ByVal Button As Integer, _ ByVal Shift As Integer, _ ByVal X As stdole.OLE_XPOS_PIXELS, _ ByVal Y As stdole.OLE_YPOS_PIXELS) With DTPicker1 If .Value = vbNull Then .Value = Now End If End With End Sub ' ***** End Procedures For DTPicker1 Control ***** Now, you have to duplicate the above 3 sets of event procedures for each DTPicker Control you have. After you have done that, the DTPicker Controls will all be blank when the UserForm is first loaded. Afterwards, if you want to blank any single DTPicker Control, just set the Value property of that DatePicker Control to vbNull and then call the FormatDTPicker subroutine passing in the name (not a text string of the name, but the name itself). So, for example, if you wanted to blank out just the DTPicker5 control, you would execute these two lines of code... DTPicker5.Value = vbNull FormatDTPicker DTPicker5 The above is adapted from code I developed and have posted in the compiled VB newsgroups over the years. This is easier to do in compiled VB because one can bundle controls into something called a Control Array; all control in an Control Array share the same event procedures and, hence, all of the above duplications you have to do for each DTPicker Control above is avoided in compiled VB. However, I did try out what I have posted for you to do on a limited set of DTPicker Controls situated on a UserForm and the code does work. Rick "RyanH" wrote in message ... I am building a production schedule UserForm, which has 15 departments, and by each department label I included a DTPicker Control. This way my users can select the due of each department for a particular product. My question is this, is there a way to clear the out the date in the drop down box so no date shows? I have cleared the date under the Value Property box, but when I intialize the UserForm the DTPicker Control displays todays date, I guess by default? If you have any other ways around this I would greatly appreciate it, because I think the UserForm looks to busy, with all the dates displayed even though the CheckBox = False. Note: I'm using Excel 2003, Microsoft Date & Time Picker Control 6.0 (SP4) Additonally, I set the DTPicker Control CheckBox Property to True (so a checkbox is displayed next to the date in the drop down box). I also have two textboxes next to each DTPicker Control. I would like to know if there is a way set the Visible Property of the two textboxes to False next to the Picker Control if the Picker Controls Checkbox is not checked. For example: Private Sub dtpEngineer_Click() dtpEngineer.CheckBox.Value = TextBox1.Visible dtpEngineer.CheckBox.Value = TextBox2.Visible End Sub |
Date & Time Picker Properties Question
Yes, it is possible to do that. Since you didn't post any code, I can only guess at how to direct you to incorporate my routine into it, but let me try (you should try what I am about to suggest to a copy of your spreadsheet so as not to mess it up in case something goes wrong in how you follow my instructions). First of all, you will need to set up everything I posted earlier **except** for the UserForm Initialize event procedure (we will use what you have as a base for that event). Once you have added the 3 event procedures for each of your 15 TextBoxes and added the FormatDTPicker subroutine, then in your UserForm Initialize event, wherever you now assign the date to a TextBox, you will need to do this instead... if the cell you are retrieving your date from is a date, assign it to the Value property for the DTPicker Control that corresponds to that cell... else, if the cell is blank, execute these two lines
DTPicker5.Value = vbNull FormatDTPicker DTPicker5 where you would be using the name of the DTPicker Control that corresponds to that cell in place of the DTPicker5 name I used in these sample code lines above. Hopefully, that makes sense to you. If you have any trouble, it would be helpful if you posted your existing DoubleClick event code and your UserForm Initialize event code for us to look at. Rick "RyanH" wrote in message ... I hope this replys to all. Thanks for getting back to me with that code. But I am having an issue with initalizing the UserForm the way I need it too. Let me explain my old setup before your code. My old UserForm had a TextBox next to each department. The user would double click the cell the Sales Order # was contained in and the UserForm would Intialize. When it was Intialized the macro would scan down the row that was double clicked and fill the due dates of each department. If there wasn't a date the textbox was left blank. Is there a way to do this with the DTPicker? In other words, when the UserForm is Initialized if the cell that stores the due date for that department is blank have the DTPicker Control Value display blank and when there is a date have the DTPicker Control Value display that date. Is this possible? Thanks in advanced!! "Rick Rothstein (MVP - VB)" wrote: That means you have 15 DTPicker Controls, right? Okay, you will have to set some event procedures up individually for each of the 15 DTPicker Controls you have. First, here is the common routines (that is, you only need one of each of these)... ' ***** Start Common Procedures ***** Private Sub FormatDTPicker(PickerControl As DTPicker) With PickerControl If .Value = vbNull Then .Format = dtpCustom .CustomFormat = "X" Else .Format = dtpShortDate End If End With End Sub Private Sub UserForm_Initialize() Dim Ctrl As Control For Each Ctrl In Me.Controls If TypeName(Ctrl) = "DTPicker" Then Ctrl.Value = vbNull FormatDTPicker Ctrl End If Next End Sub ' ***** End Common Procedures ***** Next, you need one of each of the following procedures for **each** DTPicker Control that you have **AND** you have to change the control name references inside each of these procedures to match the actual control's name. Here are the procedures you need for DTPicker1.... ' ***** Start Procedures For DTPicker1 Control ***** Private Sub DTPicker1_CloseUp() FormatDTPicker DTPicker1 End Sub Private Sub DTPicker1_Format(ByVal CallbackField As String, _ FormattedString As String) If CallbackField = "X" Then FormattedString = "" End If End Sub Private Sub DTPicker1_MouseDown(ByVal Button As Integer, _ ByVal Shift As Integer, _ ByVal X As stdole.OLE_XPOS_PIXELS, _ ByVal Y As stdole.OLE_YPOS_PIXELS) With DTPicker1 If .Value = vbNull Then .Value = Now End If End With End Sub ' ***** End Procedures For DTPicker1 Control ***** Now, you have to duplicate the above 3 sets of event procedures for each DTPicker Control you have. After you have done that, the DTPicker Controls will all be blank when the UserForm is first loaded. Afterwards, if you want to blank any single DTPicker Control, just set the Value property of that DatePicker Control to vbNull and then call the FormatDTPicker subroutine passing in the name (not a text string of the name, but the name itself). So, for example, if you wanted to blank out just the DTPicker5 control, you would execute these two lines of code... DTPicker5.Value = vbNull FormatDTPicker DTPicker5 The above is adapted from code I developed and have posted in the compiled VB newsgroups over the years. This is easier to do in compiled VB because one can bundle controls into something called a Control Array; all control in an Control Array share the same event procedures and, hence, all of the above duplications you have to do for each DTPicker Control above is avoided in compiled VB. However, I did try out what I have posted for you to do on a limited set of DTPicker Controls situated on a UserForm and the code does work. Rick "RyanH" wrote in message ... I am building a production schedule UserForm, which has 15 departments, and by each department label I included a DTPicker Control. This way my users can select the due of each department for a particular product. My question is this, is there a way to clear the out the date in the drop down box so no date shows? I have cleared the date under the Value Property box, but when I intialize the UserForm the DTPicker Control displays todays date, I guess by default? If you have any other ways around this I would greatly appreciate it, because I think the UserForm looks to busy, with all the dates displayed even though the CheckBox = False. Note: I'm using Excel 2003, Microsoft Date & Time Picker Control 6.0 (SP4) Additonally, I set the DTPicker Control CheckBox Property to True (so a checkbox is displayed next to the date in the drop down box). I also have two textboxes next to each DTPicker Control. I would like to know if there is a way set the Visible Property of the two textboxes to False next to the Picker Control if the Picker Controls Checkbox is not checked. For example: Private Sub dtpEngineer_Click() dtpEngineer.CheckBox.Value = TextBox1.Visible dtpEngineer.CheckBox.Value = TextBox2.Visible End Sub |
Date & Time Picker Properties Question
I removed the For Each Loop from the Inialize Event like you said and I am
getting an error Sub or Function not defined. I currently use the BeforeDoubleClick Event to load my UserFrom. There could be a better way of doing this but I'm just not sure how since I am new to VBA. Here is my code and where they are located: Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean) Cancel = True ActiveSheet.Cells(ActiveCell.Row, "A").Select With frmSalesSummary .txbSalesOrder = Cells(ActiveCell.Row, "A") On Error Resume Next .cboSalesPerson = Cells(ActiveCell.Row, "B") On Error Resume Next .cboEngineer = Cells(ActiveCell.Row, "C") .txbCustomer = Cells(ActiveCell.Row, "D") .txbEndUser = Cells(ActiveCell.Row, "E") .txbQty = Cells(ActiveCell.Row, "F") .txbDescription1 = Cells(ActiveCell.Row, "G") .txbDescription2 = Cells(ActiveCell.Row, "H") .txbComments = Cells(ActiveCell.Row, "I") On Error Resume Next .cboShipMethod = Cells(ActiveCell.Row, "J") If Cells(ActiveCell.Row, "K") = "" Then .dtpScheduledShip.Value = "" Else .dtpScheduledShip.Value = Cells(ActiveCell.Row, "K") End If If Cells(ActiveCell.Row, "L") = "" Then .dtpActualShip.Value = "" Else .dtpActualShip.Value = Cells(ActiveCell.Row, "L") End If .txbBOM = Cells(ActiveCell.Row, "M") .txbSalesPrice = Cells(ActiveCell.Row, "N") .txbTotalEstHrs = Cells(ActiveCell.Row, "O").Text .txbTotalActHrs = Cells(ActiveCell.Row, "P").Text 'ENGINEERING: Code recognizes font in grey thus activates associated checkbox, if black font does deactivates. If IsDate(Cells(ActiveCell.Row, "Q")) = True Then .dtpEngineer.Value = Cells(ActiveCell.Row, "Q").Text Else dtpEngineer.Value = vbNull FormatDTPicker dtpEngineer <===ERROR ERROR End If .txbEngEstHrs = Cells(ActiveCell.Row, "R").Text .txbEngActHrs = Cells(ActiveCell.Row, "S").Text If Cells(ActiveCell.Row, "Q").Font.ColorIndex = 15 Then .dtpEngineer.Enabled = False .chkEngineering = True Else .dtpEngineer.Enabled = True .chkEngineering = False End If *****There are fourteen more departments coded the same way as ENGINEERING just with different names. frmSalesSummary.Show End Sub At this point I have probably managed to confuse you. Do you have enough information from me to determine the issue? Thanks agian for your help on this!! "Rick Rothstein (MVP - VB)" wrote: Yes, it is possible to do that. Since you didn't post any code, I can only guess at how to direct you to incorporate my routine into it, but let me try (you should try what I am about to suggest to a copy of your spreadsheet so as not to mess it up in case something goes wrong in how you follow my instructions). First of all, you will need to set up everything I posted earlier **except** for the UserForm Initialize event procedure (we will use what you have as a base for that event). Once you have added the 3 event procedures for each of your 15 TextBoxes and added the FormatDTPicker subroutine, then in your UserForm Initialize event, wherever you now assign the date to a TextBox, you will need to do this instead... if the cell you are retrieving your date from is a date, assign it to the Value property for the DTPicker Control that corresponds to that cell... else, if the cell is blank, execute these two lines DTPicker5.Value = vbNull FormatDTPicker DTPicker5 where you would be using the name of the DTPicker Control that corresponds to that cell in place of the DTPicker5 name I used in these sample code lines above. Hopefully, that makes sense to you. If you have any trouble, it would be helpful if you posted your existing DoubleClick event code and your UserForm Initialize event code for us to look at. Rick "RyanH" wrote in message ... I hope this replys to all. Thanks for getting back to me with that code. But I am having an issue with initalizing the UserForm the way I need it too. Let me explain my old setup before your code. My old UserForm had a TextBox next to each department. The user would double click the cell the Sales Order # was contained in and the UserForm would Intialize. When it was Intialized the macro would scan down the row that was double clicked and fill the due dates of each department. If there wasn't a date the textbox was left blank. Is there a way to do this with the DTPicker? In other words, when the UserForm is Initialized if the cell that stores the due date for that department is blank have the DTPicker Control Value display blank and when there is a date have the DTPicker Control Value display that date. Is this possible? Thanks in advanced!! "Rick Rothstein (MVP - VB)" wrote: That means you have 15 DTPicker Controls, right? Okay, you will have to set some event procedures up individually for each of the 15 DTPicker Controls you have. First, here is the common routines (that is, you only need one of each of these)... ' ***** Start Common Procedures ***** Private Sub FormatDTPicker(PickerControl As DTPicker) With PickerControl If .Value = vbNull Then .Format = dtpCustom .CustomFormat = "X" Else .Format = dtpShortDate End If End With End Sub Private Sub UserForm_Initialize() Dim Ctrl As Control For Each Ctrl In Me.Controls If TypeName(Ctrl) = "DTPicker" Then Ctrl.Value = vbNull FormatDTPicker Ctrl End If Next End Sub ' ***** End Common Procedures ***** Next, you need one of each of the following procedures for **each** DTPicker Control that you have **AND** you have to change the control name references inside each of these procedures to match the actual control's name. Here are the procedures you need for DTPicker1.... ' ***** Start Procedures For DTPicker1 Control ***** Private Sub DTPicker1_CloseUp() FormatDTPicker DTPicker1 End Sub Private Sub DTPicker1_Format(ByVal CallbackField As String, _ FormattedString As String) If CallbackField = "X" Then FormattedString = "" End If End Sub Private Sub DTPicker1_MouseDown(ByVal Button As Integer, _ ByVal Shift As Integer, _ ByVal X As stdole.OLE_XPOS_PIXELS, _ ByVal Y As stdole.OLE_YPOS_PIXELS) With DTPicker1 If .Value = vbNull Then .Value = Now End If End With End Sub ' ***** End Procedures For DTPicker1 Control ***** Now, you have to duplicate the above 3 sets of event procedures for each DTPicker Control you have. After you have done that, the DTPicker Controls will all be blank when the UserForm is first loaded. Afterwards, if you want to blank any single DTPicker Control, just set the Value property of that DatePicker Control to vbNull and then call the FormatDTPicker subroutine passing in the name (not a text string of the name, but the name itself). So, for example, if you wanted to blank out just the DTPicker5 control, you would execute these two lines of code... DTPicker5.Value = vbNull FormatDTPicker DTPicker5 The above is adapted from code I developed and have posted in the compiled VB newsgroups over the years. This is easier to do in compiled VB because one can bundle controls into something called a Control Array; all control in an Control Array share the same event procedures and, hence, all of the above duplications you have to do for each DTPicker Control above is avoided in compiled VB. However, I did try out what I have posted for you to do on a limited set of DTPicker Controls situated on a UserForm and the code does work. Rick "RyanH" wrote in message ... I am building a production schedule UserForm, which has 15 departments, and by each department label I included a DTPicker Control. This way my users can select the due of each department for a particular product. My question is this, is there a way to clear the out the date in the drop down box so no date shows? I have cleared the date under the Value Property box, but when I intialize the UserForm the DTPicker Control displays todays date, I guess by default? If you have any other ways around this I would greatly appreciate it, because I think the UserForm looks to busy, with all the dates displayed even though the CheckBox = False. Note: I'm using Excel 2003, Microsoft Date & Time Picker Control 6.0 (SP4) Additonally, I set the DTPicker Control CheckBox Property to True (so a checkbox is displayed next to the date in the drop down box). I also have two textboxes next to each DTPicker Control. I would like to know if there is a way set the Visible Property of the two textboxes to False next to the Picker Control if the Picker Controls Checkbox is not checked. For example: Private Sub dtpEngineer_Click() dtpEngineer.CheckBox.Value = TextBox1.Visible dtpEngineer.CheckBox.Value = TextBox2.Visible End Sub |
Date & Time Picker Properties Question
Since you are trying to reference the FormatDTPicker subroutine that is
located on the UserForm, you have to do two things. First, change the declaration for the FormatDTPicker subroutine from Private to Public so it can be seen outside of the UserForm (you are executing your code from the Worksheet's BeforeDoubleClick event, so procedures declared Private on the UserForm can't be seen there). Second, you have to use UserForm1.FormatDTPicker instead of just FormatDTPicker in code line where your error is happening at (you need to point to tell VBA where it can find the FormatDTPicker subroutine at). The issues we have been talking about are known as "scope" and deal with where things are located and the access restrictions that apply to them. By the way... one On Error Resume Next statement is all you need in a single procedure... it will remain in effect from the moment the statement is executed until an On Error Goto 0 statement is issued or until you exit the procedure, whichever comes first. Rick "RyanH" wrote in message ... I removed the For Each Loop from the Inialize Event like you said and I am getting an error Sub or Function not defined. I currently use the BeforeDoubleClick Event to load my UserFrom. There could be a better way of doing this but I'm just not sure how since I am new to VBA. Here is my code and where they are located: Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean) Cancel = True ActiveSheet.Cells(ActiveCell.Row, "A").Select With frmSalesSummary .txbSalesOrder = Cells(ActiveCell.Row, "A") On Error Resume Next .cboSalesPerson = Cells(ActiveCell.Row, "B") On Error Resume Next .cboEngineer = Cells(ActiveCell.Row, "C") .txbCustomer = Cells(ActiveCell.Row, "D") .txbEndUser = Cells(ActiveCell.Row, "E") .txbQty = Cells(ActiveCell.Row, "F") .txbDescription1 = Cells(ActiveCell.Row, "G") .txbDescription2 = Cells(ActiveCell.Row, "H") .txbComments = Cells(ActiveCell.Row, "I") On Error Resume Next .cboShipMethod = Cells(ActiveCell.Row, "J") If Cells(ActiveCell.Row, "K") = "" Then .dtpScheduledShip.Value = "" Else .dtpScheduledShip.Value = Cells(ActiveCell.Row, "K") End If If Cells(ActiveCell.Row, "L") = "" Then .dtpActualShip.Value = "" Else .dtpActualShip.Value = Cells(ActiveCell.Row, "L") End If .txbBOM = Cells(ActiveCell.Row, "M") .txbSalesPrice = Cells(ActiveCell.Row, "N") .txbTotalEstHrs = Cells(ActiveCell.Row, "O").Text .txbTotalActHrs = Cells(ActiveCell.Row, "P").Text 'ENGINEERING: Code recognizes font in grey thus activates associated checkbox, if black font does deactivates. If IsDate(Cells(ActiveCell.Row, "Q")) = True Then .dtpEngineer.Value = Cells(ActiveCell.Row, "Q").Text Else dtpEngineer.Value = vbNull FormatDTPicker dtpEngineer <===ERROR ERROR End If .txbEngEstHrs = Cells(ActiveCell.Row, "R").Text .txbEngActHrs = Cells(ActiveCell.Row, "S").Text If Cells(ActiveCell.Row, "Q").Font.ColorIndex = 15 Then .dtpEngineer.Enabled = False .chkEngineering = True Else .dtpEngineer.Enabled = True .chkEngineering = False End If *****There are fourteen more departments coded the same way as ENGINEERING just with different names. frmSalesSummary.Show End Sub At this point I have probably managed to confuse you. Do you have enough information from me to determine the issue? Thanks agian for your help on this!! "Rick Rothstein (MVP - VB)" wrote: Yes, it is possible to do that. Since you didn't post any code, I can only guess at how to direct you to incorporate my routine into it, but let me try (you should try what I am about to suggest to a copy of your spreadsheet so as not to mess it up in case something goes wrong in how you follow my instructions). First of all, you will need to set up everything I posted earlier **except** for the UserForm Initialize event procedure (we will use what you have as a base for that event). Once you have added the 3 event procedures for each of your 15 TextBoxes and added the FormatDTPicker subroutine, then in your UserForm Initialize event, wherever you now assign the date to a TextBox, you will need to do this instead... if the cell you are retrieving your date from is a date, assign it to the Value property for the DTPicker Control that corresponds to that cell... else, if the cell is blank, execute these two lines DTPicker5.Value = vbNull FormatDTPicker DTPicker5 where you would be using the name of the DTPicker Control that corresponds to that cell in place of the DTPicker5 name I used in these sample code lines above. Hopefully, that makes sense to you. If you have any trouble, it would be helpful if you posted your existing DoubleClick event code and your UserForm Initialize event code for us to look at. Rick "RyanH" wrote in message ... I hope this replys to all. Thanks for getting back to me with that code. But I am having an issue with initalizing the UserForm the way I need it too. Let me explain my old setup before your code. My old UserForm had a TextBox next to each department. The user would double click the cell the Sales Order # was contained in and the UserForm would Intialize. When it was Intialized the macro would scan down the row that was double clicked and fill the due dates of each department. If there wasn't a date the textbox was left blank. Is there a way to do this with the DTPicker? In other words, when the UserForm is Initialized if the cell that stores the due date for that department is blank have the DTPicker Control Value display blank and when there is a date have the DTPicker Control Value display that date. Is this possible? Thanks in advanced!! "Rick Rothstein (MVP - VB)" wrote: That means you have 15 DTPicker Controls, right? Okay, you will have to set some event procedures up individually for each of the 15 DTPicker Controls you have. First, here is the common routines (that is, you only need one of each of these)... ' ***** Start Common Procedures ***** Private Sub FormatDTPicker(PickerControl As DTPicker) With PickerControl If .Value = vbNull Then .Format = dtpCustom .CustomFormat = "X" Else .Format = dtpShortDate End If End With End Sub Private Sub UserForm_Initialize() Dim Ctrl As Control For Each Ctrl In Me.Controls If TypeName(Ctrl) = "DTPicker" Then Ctrl.Value = vbNull FormatDTPicker Ctrl End If Next End Sub ' ***** End Common Procedures ***** Next, you need one of each of the following procedures for **each** DTPicker Control that you have **AND** you have to change the control name references inside each of these procedures to match the actual control's name. Here are the procedures you need for DTPicker1.... ' ***** Start Procedures For DTPicker1 Control ***** Private Sub DTPicker1_CloseUp() FormatDTPicker DTPicker1 End Sub Private Sub DTPicker1_Format(ByVal CallbackField As String, _ FormattedString As String) If CallbackField = "X" Then FormattedString = "" End If End Sub Private Sub DTPicker1_MouseDown(ByVal Button As Integer, _ ByVal Shift As Integer, _ ByVal X As stdole.OLE_XPOS_PIXELS, _ ByVal Y As stdole.OLE_YPOS_PIXELS) With DTPicker1 If .Value = vbNull Then .Value = Now End If End With End Sub ' ***** End Procedures For DTPicker1 Control ***** Now, you have to duplicate the above 3 sets of event procedures for each DTPicker Control you have. After you have done that, the DTPicker Controls will all be blank when the UserForm is first loaded. Afterwards, if you want to blank any single DTPicker Control, just set the Value property of that DatePicker Control to vbNull and then call the FormatDTPicker subroutine passing in the name (not a text string of the name, but the name itself). So, for example, if you wanted to blank out just the DTPicker5 control, you would execute these two lines of code... DTPicker5.Value = vbNull FormatDTPicker DTPicker5 The above is adapted from code I developed and have posted in the compiled VB newsgroups over the years. This is easier to do in compiled VB because one can bundle controls into something called a Control Array; all control in an Control Array share the same event procedures and, hence, all of the above duplications you have to do for each DTPicker Control above is avoided in compiled VB. However, I did try out what I have posted for you to do on a limited set of DTPicker Controls situated on a UserForm and the code does work. Rick "RyanH" wrote in message ... I am building a production schedule UserForm, which has 15 departments, and by each department label I included a DTPicker Control. This way my users can select the due of each department for a particular product. My question is this, is there a way to clear the out the date in the drop down box so no date shows? I have cleared the date under the Value Property box, but when I intialize the UserForm the DTPicker Control displays todays date, I guess by default? If you have any other ways around this I would greatly appreciate it, because I think the UserForm looks to busy, with all the dates displayed even though the CheckBox = False. Note: I'm using Excel 2003, Microsoft Date & Time Picker Control 6.0 (SP4) Additonally, I set the DTPicker Control CheckBox Property to True (so a checkbox is displayed next to the date in the drop down box). I also have two textboxes next to each DTPicker Control. I would like to know if there is a way set the Visible Property of the two textboxes to False next to the Picker Control if the Picker Controls Checkbox is not checked. For example: Private Sub dtpEngineer_Click() dtpEngineer.CheckBox.Value = TextBox1.Visible dtpEngineer.CheckBox.Value = TextBox2.Visible End Sub |
Date & Time Picker Properties Question
Don't give up on me, lol. You seem to be the only DTPicker expert around
here. Here is what I have just to verify. Good News, I'm not getting any Errors but the DTPicker is still showing the current date when I double click the sales order cell. I can only test the part of the code dealing directly with the DTPicker control as I don't have anything else from your workbook set up here. I pasted your code UserForm code into my user form and pasted this into my Sheet1 code of a new Workbook.... Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, _ Cancel As Boolean) Cancel = True ActiveSheet.Cells(ActiveCell.Row, "Q").Select With frmSalesSummary 'Engineering: Code If IsDate(Cells(ActiveCell.Row, "Q")) = True Then .dtpEngineer.Value = Cells(ActiveCell.Row, "Q").Text Else .dtpEngineer.Value = vbNull .FormatDTPicker .dtpEngineer End If End With frmSalesSummary.Show End Sub and everything works as it should... if there is no date in Column Q of the row I double-click on, the DTPicker Control comes up blank and, if there is a date, that date is displayed in the control. I am not sure what to tell you about why this isn't working for you as I used your code in my test workbook. If you still can't get it to work, send me your workbook (remove the NOSPAM stuff from my address) so I can see everything you are using. As for the CheckBox question... I have never used it, so I am unsure at the moment how to control it. I'll do some research later today and post back (probably tomorrow) if I turn anything up. However, I personally see no reason to use that CheckBox... it seems like a useless option (even without using my nulling out the date field code), especially in how you are going to use it. Assuming you don't use the CheckBox... if there is a no date in the DTPicker Control, then the blank field should be indication enough that it needs to be filled in; and if there is a date there, a CheckBox showing that seems redundant. Rick |
Date & Time Picker Properties Question
To all following this thread
============================== Ryan sent me the spreadsheet via email and I located the problem. Below is the message I sent back to him via email... it identifies the problem (a condition I had not considered before) and offers a solution for it. If you plan on using my routine in the future, you should make note of the what is written below. Rick Okay, I figured out what the problem was... you set a minimum date via the MinDate property. This was not something I considered when I originally developed the routine. By the way, I had a lot of trouble finding this because of your On Error Resume Next statement. That particular error trapping routine can be very problematic when debugging because it hide **all** errors, not just the one's you think it is handling. Anyway, once I removed its action just before the "Engineering" section, all became clear. Here is what the problem is. In this line... .dtpEngineer.Value = vbNull it **looks** like I am setting the Value property of the DatePicker Control to NULL... that is **not** what it does... it sets the Value property to 1 (which is what the constant is defined as)... you can't set a date to NULL which is why my code routine is necessary, it goes around that particular problem. We could assign any numeric value to the Value property, and look for that value in the FormatDTPicker subroutine, to make the code work, but my reasoning for using vbNull was that it "looked" like what I was trying to do via code (null something out) and it represented a date (one day after date-zero) that was pretty much guaranteed to never be chosen. However, when you imposed the MinDate condition on the control, it would no longer let me assign 1 to the Value property because the date represented by 1 (December 31, 1899) is earlier than your MinDate. As a result, what appears to be happening is that instead of passing the actual control, a NULL was passed instead; and that screwed up the If .Value = vbNull Then test over in the FormatDTPicker subroutine. With this test failing, the Else condition (assigning the short date format) was executed instead. Okay, that is the problem; you probably want to know how to work around it. There are two ways. One way is to remove the MinDate restiction and set it back to 12/30/1899. The second way requires that we add two more event handlers for **each** DatePicker Control you have (15 if I remember the number correctly). Adding these event handlers (changing the control name from my sample name to each control's individual names) will solve the problem... Private Sub dtpEngineer_Enter() dtpEngineer.MinDate = "1/1/2007" End Sub Private Sub dtpEngineer_Exit(ByVal Cancel As MSForms.ReturnBoolean) dtpEngineer.MinDate = "12/30/1899" End Sub |
All times are GMT +1. The time now is 04:15 PM. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
ExcelBanter.com