Reply
 
LinkBack Thread Tools Search this Thread Display Modes
  #1   Report Post  
Posted to microsoft.public.excel.programming
external usenet poster
 
Posts: 195
Default Print array based on menu choice

I know how to add a custom menu and populate it with items from an array
list and perform an .OnAction based on menu item clicked. Right now I
have this in Personal.xls:

Private Sub OpenTheFile()
With Application.CommandBars.ActionControl
Workbooks.Open "C:\DATA\EXCEL\" & .Caption
End With
End Sub

This one doesn't get run until I want a different list.
Private Sub AddMenu()
Dim vFile, vFiles
vFiles = Array("MyCheckBook", "DT Biweekly Timesheet", "Foodcost",
"Who_Ate", "GFS Inventory", "Attendance Stats", "TimeSheet", "Class
Utilization", "Class Signups", "Unit Signups")
With Application.CommandBars("Worksheet Menu Bar")
With .Controls.Add(msoControlPopup, befo=2, temporary:=False)
..Caption = "D&aily Files"
For Each vFile In vFiles
With .Controls.Add(msoControlButton)
..Caption = vFile
..OnAction = "OpenTheFile"
End With
Next
End With
End With
End Sub

I plan to populate my new workbook's custom menu with
vDay = array("Monday","Tuesday","Wednesday","Thursday")

What I want to do is print sheets where A1's value will call a sub() and
loop through an array of 6 classes based on the day I choose from that
custom menu. Example:

MonArr = Array("Class1","Class2","Class3","Class4","Class5" ,"Class6")
TueArr = Array("Class1","Class2","Class3","Class4","Class5" ,"Class6")
WedArr = Array("Class1","Class2","Class3","Class4","Class5" ,"Class6")
ThuArr = Array("Class1","Class2","Class3","Class4","Class5" ,"Class6")

I will, of course, replace ClassX with actual class names

Here's what I do now, with sheet code:

Private Sub Worksheet_Change(ByVal Target As Range)
' Here's where I want the day's array of 6 classes to go
If Target.Address = "$A$1" Then
Select Case Target.Value
Case "Beginning Computer", "Intermediate Computer", "Adult Basic
Education", "Creative Writing"
Range("A14:A20").EntireRow.Hidden = True
Range("E11").Value = 4
Case Else
ActiveSheet.Rows.Hidden = False
Range("E11").Value = 11
End Select
Range("H2").Value = Date
ActiveSheet.UsedRange
ActiveSheet.PrintOut
End If
End Sub

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If Target.Address = "$A$1" Then
ActiveWindow.Zoom = 100
Else
ActiveWindow.Zoom = 55
End If
End Sub

User selects a class from data valadation list in A1 and a sheet for that
class is printed. User repeats for each desired class

What I want to do is print sheets where A1's value will loop through an
array of 6 classes based on the day I choose from my custom menu Example:

MonArr = Array("Class1","Class2","Class3","Class4","Class5" ,"Class6")
TueArr = Array("Class1","Class2","Class3","Class4","Class5" ,"Class6")
WedArr = Array("Class1","Class2","Class3","Class4","Class5" ,"Class6")
ThuArr = Array("Class1","Class2","Class3","Class4","Class5" ,"Class6")

I will, of course, replace ClassX with actual class names
Class names vary each day, but are static for that day

I hope I haven't provided too much or too little info to describe my
needs.

--
David
  #2   Report Post  
Posted to microsoft.public.excel.programming
external usenet poster
 
Posts: 27,285
Default Print array based on menu choice

Private Sub Worksheet_Change(ByVal Target As Range)
' Here's where I want the day's array of 6 classes to go
Dim MonArr, TueArr, WedArr, ThuArr, v
MonArr = Array("Class1","Class2","Class3","Class4","Class5" ,"Class6")
TueArr = Array("Class1","Class2","Class3","Class4","Class5" ,"Class6")
WedArr = Array("Class1","Class2","Class3","Class4","Class5" ,"Class6")
ThuArr = Array("Class1","Class2","Class3","Class4","Class5" ,"Class6")

If Target.Address = "$A$1" Then
Select Case Target.Value
Case "Monday"
v = MonArr
Case "Tuesday"
v = TueArr
Case "Wednesday"
v = WedArr
Case "Thursday"
v = ThuArray
End select
for i = lbound(v) to ubound(v)
Worksheets(v(i)).Activate
Select Case v(i)
Case "Beginning Computer", "Intermediate Computer", "Adult Basic
Education", "Creative Writing"
Range("A14:A20").EntireRow.Hidden = True
Range("E11").Value = 4
Case Else
ActiveSheet.Rows.Hidden = False
Range("E11").Value = 11
End Select
Range("H2").Value = Date
ActiveSheet.UsedRange
ActiveSheet.PrintOut
Next i
"End Sub

--
Regards,
Tom Ogilvy

"David" wrote in message
...
I know how to add a custom menu and populate it with items from an array
list and perform an .OnAction based on menu item clicked. Right now I
have this in Personal.xls:

Private Sub OpenTheFile()
With Application.CommandBars.ActionControl
Workbooks.Open "C:\DATA\EXCEL\" & .Caption
End With
End Sub

This one doesn't get run until I want a different list.
Private Sub AddMenu()
Dim vFile, vFiles
vFiles = Array("MyCheckBook", "DT Biweekly Timesheet", "Foodcost",
"Who_Ate", "GFS Inventory", "Attendance Stats", "TimeSheet", "Class
Utilization", "Class Signups", "Unit Signups")
With Application.CommandBars("Worksheet Menu Bar")
With .Controls.Add(msoControlPopup, befo=2, temporary:=False)
.Caption = "D&aily Files"
For Each vFile In vFiles
With .Controls.Add(msoControlButton)
.Caption = vFile
.OnAction = "OpenTheFile"
End With
Next
End With
End With
End Sub

I plan to populate my new workbook's custom menu with
vDay = array("Monday","Tuesday","Wednesday","Thursday")

What I want to do is print sheets where A1's value will call a sub() and
loop through an array of 6 classes based on the day I choose from that
custom menu. Example:

MonArr = Array("Class1","Class2","Class3","Class4","Class5" ,"Class6")
TueArr = Array("Class1","Class2","Class3","Class4","Class5" ,"Class6")
WedArr = Array("Class1","Class2","Class3","Class4","Class5" ,"Class6")
ThuArr = Array("Class1","Class2","Class3","Class4","Class5" ,"Class6")

I will, of course, replace ClassX with actual class names

Here's what I do now, with sheet code:

Private Sub Worksheet_Change(ByVal Target As Range)Select Case

Target.Value
Case "Beginning Computer", "Intermediate Computer", "Adult Basic
Education", "Creative Writing"
Range("A14:A20").EntireRow.Hidden = True
Range("E11").Value = 4
Case Else
ActiveSheet.Rows.Hidden = False
Range("E11").Value = 11
End Select
Range("H2").Value = Date
ActiveSheet.UsedRange
ActiveSheet.PrintOut


' Here's where I want the day's array of 6 classes to go
If Target.Address = "$A$1" Then
End If

End Sub

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If Target.Address = "$A$1" Then
ActiveWindow.Zoom = 100
Else
ActiveWindow.Zoom = 55
End If
End Sub

User selects a class from data valadation list in A1 and a sheet for that
class is printed. User repeats for each desired class

What I want to do is print sheets where A1's value will loop through an
array of 6 classes based on the day I choose from my custom menu Example:

MonArr = Array("Class1","Class2","Class3","Class4","Class5" ,"Class6")
TueArr = Array("Class1","Class2","Class3","Class4","Class5" ,"Class6")
WedArr = Array("Class1","Class2","Class3","Class4","Class5" ,"Class6")
ThuArr = Array("Class1","Class2","Class3","Class4","Class5" ,"Class6")

I will, of course, replace ClassX with actual class names
Class names vary each day, but are static for that day

I hope I haven't provided too much or too little info to describe my
needs.

--
David



  #3   Report Post  
Posted to microsoft.public.excel.programming
external usenet poster
 
Posts: 195
Default Print array based on menu choice

Tom Ogilvy wrote

Private Sub Worksheet_Change(ByVal Target As Range)
' Here's where I want the day's array of 6 classes to go
Dim MonArr, TueArr, WedArr, ThuArr, v
MonArr = Array("Class1","Class2","Class3","Class4","Class5" ,"Class6")
TueArr = Array("Class1","Class2","Class3","Class4","Class5" ,"Class6")
WedArr = Array("Class1","Class2","Class3","Class4","Class5" ,"Class6")
ThuArr = Array("Class1","Class2","Class3","Class4","Class5" ,"Class6")

If Target.Address = "$A$1" Then
Select Case Target.Value
Case "Monday"
v = MonArr
Case "Tuesday"
v = TueArr
Case "Wednesday"
v = WedArr
Case "Thursday"
v = ThuArray
End select
for i = lbound(v) to ubound(v)
Worksheets(v(i)).Activate
Select Case v(i)
Case "Beginning Computer", "Intermediate Computer", "Adult Basic
Education", "Creative Writing"
Range("A14:A20").EntireRow.Hidden = True
Range("E11").Value = 4
Case Else
ActiveSheet.Rows.Hidden = False
Range("E11").Value = 11
End Select
Range("H2").Value = Date
ActiveSheet.UsedRange
ActiveSheet.PrintOut
Next i
"End Sub


Tom, thanks for your effort, but...

Guess I didn't explain clearly enough. I want Workbook_Activate to build
my menu with Monday, Tuesday, Wednesday, Thursday. I can do that. Then
when I click on a day, execute the Change event after my choice ends up
in A1, then looping then through the class names in the relevant array,
triggering the printout of a sheet for each class in that array.

BTW, there is only one sheet to the workbook and $A$1 is where the class
name ends up (presently via Data Validation dropdown)

I did try to adapt your code anyway, but it always bombed at line 1 or 2
of the Lbound(v) to Ubound(v) loop
Instead of Worksheets(v(i)).Activate, I substituted
Range("A1").Text = (v(i)) -- also tried v(i) -- same result as below
Then I typed Monday in A1 (that's where the day from the menu choice
would go, I'm guessing) just to see what would happen, and I got
"Runtime error '424': Object required" with that line highlighted when I
clicked Debug
At first I used .Value, but it bombed with 'Type Mismatch' when it hit
For i = LBound(v) To UBound(v)

I can sense we're close, but no cigar yet

--
David
  #4   Report Post  
Posted to microsoft.public.excel.programming
external usenet poster
 
Posts: 195
Default Print array based on menu choice

Tom Ogilvy wrote

Private Sub Worksheet_Change(ByVal Target As Range)


Further test:
Changed
For i = LBound(v) To UBound(v)
Range("A1") = (v(i)).Text
Select Case v(i)

to

For i = LBound(v) To UBound(v)
Range("A1") = (v(i))
Select Case v(i)

And at least got the first class name in the array to show in A1

--
David
  #5   Report Post  
Posted to microsoft.public.excel.programming
external usenet poster
 
Posts: 195
Default Print array based on menu choice

David wrote

Range("A1") = (v(i)).Text


oops, meant to be Range("A1").Text = (v(i))

--
David


  #6   Report Post  
Posted to microsoft.public.excel.programming
external usenet poster
 
Posts: 195
Default Print array based on menu choice

Tom Ogilvy wrote

Private Sub Worksheet_Change(ByVal Target As Range)


Ok, how 'bout this for now:
User types desired day name in A1, will play with Menu later

Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Address < "$A$1" Then Exit Sub
test
End Sub

Sub test()
Dim MonArr, TueArr, WedArr, ThuArr, v, i As Long
On Error GoTo Quit '<-- Resume Next loops endlessly at 6th class
'If left out, Type Mismatch same place as before
MonArr = Array("Intermediate Computer", "Wellness", "Supported
Employment", "Understanding Your Medications", "Creative Writing",
"Picking Up The Pieces")
TueArr = Array("LIFTT", "Wellness", "WRAP", "Sign Language", "Beginning
Computer", "Anger Management")
WedArr = Array("Intermediate Computer", "Wellness", "Supported
Employment", "Understanding Your Symptoms", "WRAP", "Anger Management")
ThuArr = Array("Picking Up The Pieces", "Wellness", "LIFTT", "Adult Basic
Education", "Beginning Computer", "Creative Writing")
Range("H2").Value = Date
Select Case Range("A1").Value '<-- Changed from Select Case v(i)
Case "Monday"
v = MonArr
Case "Tuesday"
v = TueArr
Case "Wednesday"
v = WedArr
Case "Thursday"
v = ThuArr
End Select
For i = LBound(v) To UBound(v)
Range("A1") = (v(i))
Select Case v(i)
Case "Beginning Computer", "Intermediate Computer", "Adult Basic
Education", "Creative Writing"
Range("A14:A20").EntireRow.Hidden = True
Range("E11").Value = 4
Case Else
ActiveSheet.Rows.Hidden = False
Range("E11").Value = 11
End Select
ActiveSheet.UsedRange
ActiveSheet.PrintPreview '<-- will change to .PrintOut
Next i
Quit:
End Sub

Worked in my limited tests anyway

--
David
  #7   Report Post  
Posted to microsoft.public.excel.programming
external usenet poster
 
Posts: 195
Default Print array based on menu choice

David wrote

Select Case Range("A1").Value '<-- Changed from Select Case v(i)


oops, meant Target.Value

--
David
  #8   Report Post  
Posted to microsoft.public.excel.programming
external usenet poster
 
Posts: 195
Default Print array based on menu choice

David wrote

Ok, how 'bout this for now


Works if I put code from test() in Worksheet_Change, too, eliminating need
for Module.

Then I can change Select Case Range("A1").Value back to
Select Case Target.Value

--
David
  #9   Report Post  
Posted to microsoft.public.excel.programming
external usenet poster
 
Posts: 195
Default Print array based on menu choice

In case anyone's interested, here's the final product

Private Sub Workbook_Activate()
On Error Resume Next
Application.CommandBars(1).Controls("Signups").Del ete
Dim vDay, vDays
vDays = Array("Monday", "Tuesday", "Wednesday", "Thursday")
With Application.CommandBars("Worksheet Menu Bar")
With .Controls.Add(msoControlPopup)
..Caption = "Signups"
..BeginGroup = True
For Each vDay In vDays
With .Controls.Add(msoControlButton)
..Caption = vDay
..OnAction = "PrintToday"
End With
Next
End With
End With
End Sub

Private Sub Workbook_Deactivate()
On Error Resume Next
Application.CommandBars(1).Controls("Signups").Del ete
End Sub

Private Sub PrintToday()
With Application.CommandBars.ActionControl
Range("A1") = .Caption
End With
End Sub

Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Address < "$A$1" Then Exit Sub
On Error GoTo Quit
Dim MonArr, TueArr, WedArr, ThuArr, v, i As Long
MonArr = Array("Intermediate Computer", "Wellness", "Supported
Employment", "Understanding Your Medications", "Creative Writing",
"Picking Up The Pieces")
TueArr = Array("LIFTT", "Wellness", "WRAP", "Sign Language", "Beginning
Computer", "Anger Management")
WedArr = Array("Intermediate Computer", "Wellness", "Supported
Employment", "Understanding Your Symptoms", "WRAP", "Anger Management")
ThuArr = Array("Picking Up The Pieces", "Wellness", "LIFTT", "Adult Basic
Education", "Beginning Computer", "Creative Writing")
Select Case Target.Value
Case "Monday"
v = MonArr
Case "Tuesday"
v = TueArr
Case "Wednesday"
v = WedArr
Case "Thursday"
v = ThuArr
End Select
For i = LBound(v) To UBound(v)
Range("A1") = (v(i))
Select Case v(i)
Case "Beginning Computer", "Intermediate Computer", "Adult Basic
Education", "Creative Writing", "Sign Language"
Range("A14:A20").EntireRow.Hidden = True
Range("E11").Value = 4
Case Else
ActiveSheet.Rows.Hidden = False
Range("E11").Value = 11
End Select
ActiveSheet.UsedRange
ActiveSheet.PrintOut
Next i
Quit:
End Sub

Thanks again, Tom Ogilvy, for leading the way

--
David
Reply
Thread Tools Search this Thread
Search this Thread:

Advanced Search
Display Modes

Posting Rules

Smilies are On
[IMG] code is On
HTML code is Off
Trackbacks are On
Pingbacks are On
Refbacks are On


Similar Threads
Thread Thread Starter Forum Replies Last Post
Updating graphs based on choice in drop-down menu: tim_maciejewski Charts and Charting in Excel 1 March 2nd 09 04:45 AM
Updating graphs based on choice in drop-down menu: tim.maciejewski[_2_] Charts and Charting in Excel 0 March 2nd 09 12:41 AM
Updating graphs based on choice in drop-down menu: tim.maciejewski Charts and Charting in Excel 0 March 2nd 09 12:24 AM
Use dd menu choice to filter input for next ddm, etc. William DeLeo Excel Discussion (Misc queries) 6 June 12th 06 09:59 PM
Applying a formula to a drop menu choice Andrew Hill Excel Discussion (Misc queries) 1 January 4th 05 11:05 AM


All times are GMT +1. The time now is 02:21 PM.

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Copyright ©2004-2025 ExcelBanter.
The comments are property of their posters.
 

About Us

"It's about Microsoft Excel"