Home |
Search |
Today's Posts |
|
#1
![]()
Posted to microsoft.public.excel.programming
|
|||
|
|||
![]()
Morning,
I have a code that reads three columns, colour (black, blue, green, brown and two numbers, start hours and finish hours, (1, 2, 3 etc). The code then plots a series of coloured boxes, one colour per row to produce a gant chart. It works fine if I enter the three input columns manually, but if I drive the hour columns through formulas the coloured lines do not update with changes. So for example I want to plot blue from 0 to 3 hours on row 4 and black from 5 to 7 hours on row 5. Enter the data hit return and it works, I get a blue bar four boxes long starting in L4 and a black one 3 boxes long starting in P5. Then I change the row 5 inputs to be; start time = finish time of row 4 + 1 end time = start time + 3 Any changes to the row 4 inputs will not update the gantt, although the values in cells driving the gantt will change. Can anyone help me know why this happens or how to fix it? The code I'm using is below if it helps. Thanks LiAD Private Sub Worksheet_Change(ByVal Target As Range) MyBlue = 5 MyGreen = 4 MyBrown = 18 MyBlack = 1 MyGrey = 15 MyWhite = 2 Set i = Range("I4:K20") Set t = Target If Intersect(t, i) Is Nothing Then Exit Sub Application.EnableEvents = False Select Case UCase(Cells(t.Row, "I")) Case "BLUE": MyBack = MyBlue MyWhite = MyBlack Case "GREEN": MyBack = MyGreen MyFont = MyBlack Case "BROWN": MyBack = MyBrown MyFont = MyBlack Case "BLACK": MyBack = MyBlack MyFont = MyWhite Case "GREY": MyBack = MyGrey MyFont = MyBlack Case Else Exit Sub ' color is no good End Select 'clear old colors Range(Cells(t.Row, "k"), Cells(t.Row, "k").Offset(0, 23)) _ ..Interior.ColorIndex = xlColorIndexNone 'make font black Range(Cells(t.Row, "k"), Cells(t.Row, "k").Offset(0, 23)) _ ..Font.ColorIndex = MyBlack StartTime = Cells(t.Row, "J") EndTime = Cells(t.Row, "K") If StartTime < "" And _ IsNumeric(StartTime) Then 'Start time is valid If EndTime < "" And _ IsNumeric(EndTime) Then 'both starttime and end time are good Range(Cells(t.Row, "L").Offset(0, StartTime), _ Cells(t.Row, "L").Offset(0, EndTime)).Interior.ColorIndex = MyBack Range(Cells(t.Row, "L").Offset(0, StartTime), _ Cells(t.Row, "L").Offset(0, EndTime)).Font.ColorIndex = MyFont Else 'Start Time good end time not good Cells(t.Row, "L").Offset(0, StartTime).Interior.ColorIndex = MyBack Cells(t.Row, "L").Offset(0, StartTime).Font.ColorIndex = MyFont End If Else If EndTime < "" And _ IsNumeric(EndTime) Then 'Start time no good, end time good Cells(t.Row, "L").Offset(0, EndTime).Interior.ColorIndex = MyBack Cells(t.Row, "L").Offset(0, EndTime).Font.ColorIndex = MyFont Else 'start time and end time no good End If End If Application.EnableEvents = True End Sub |
#2
![]()
Posted to microsoft.public.excel.programming
|
|||
|
|||
![]()
I think I figured out the problem. 1 hour is not 1 but 1/24. Time in excel
is one day = 1. Try this fix from StartTime = Cells(t.Row, "J") EndTime = Cells(t.Row, "K") to: StartTime = Hour(Cells(t.Row, "J")) EndTime = Hour(Cells(t.Row, "K")) "LiAD" wrote: Morning, I have a code that reads three columns, colour (black, blue, green, brown and two numbers, start hours and finish hours, (1, 2, 3 etc). The code then plots a series of coloured boxes, one colour per row to produce a gant chart. It works fine if I enter the three input columns manually, but if I drive the hour columns through formulas the coloured lines do not update with changes. So for example I want to plot blue from 0 to 3 hours on row 4 and black from 5 to 7 hours on row 5. Enter the data hit return and it works, I get a blue bar four boxes long starting in L4 and a black one 3 boxes long starting in P5. Then I change the row 5 inputs to be; start time = finish time of row 4 + 1 end time = start time + 3 Any changes to the row 4 inputs will not update the gantt, although the values in cells driving the gantt will change. Can anyone help me know why this happens or how to fix it? The code I'm using is below if it helps. Thanks LiAD Private Sub Worksheet_Change(ByVal Target As Range) MyBlue = 5 MyGreen = 4 MyBrown = 18 MyBlack = 1 MyGrey = 15 MyWhite = 2 Set i = Range("I4:K20") Set t = Target If Intersect(t, i) Is Nothing Then Exit Sub Application.EnableEvents = False Select Case UCase(Cells(t.Row, "I")) Case "BLUE": MyBack = MyBlue MyWhite = MyBlack Case "GREEN": MyBack = MyGreen MyFont = MyBlack Case "BROWN": MyBack = MyBrown MyFont = MyBlack Case "BLACK": MyBack = MyBlack MyFont = MyWhite Case "GREY": MyBack = MyGrey MyFont = MyBlack Case Else Exit Sub ' color is no good End Select 'clear old colors Range(Cells(t.Row, "k"), Cells(t.Row, "k").Offset(0, 23)) _ .Interior.ColorIndex = xlColorIndexNone 'make font black Range(Cells(t.Row, "k"), Cells(t.Row, "k").Offset(0, 23)) _ .Font.ColorIndex = MyBlack StartTime = Cells(t.Row, "J") EndTime = Cells(t.Row, "K") If StartTime < "" And _ IsNumeric(StartTime) Then 'Start time is valid If EndTime < "" And _ IsNumeric(EndTime) Then 'both starttime and end time are good Range(Cells(t.Row, "L").Offset(0, StartTime), _ Cells(t.Row, "L").Offset(0, EndTime)).Interior.ColorIndex = MyBack Range(Cells(t.Row, "L").Offset(0, StartTime), _ Cells(t.Row, "L").Offset(0, EndTime)).Font.ColorIndex = MyFont Else 'Start Time good end time not good Cells(t.Row, "L").Offset(0, StartTime).Interior.ColorIndex = MyBack Cells(t.Row, "L").Offset(0, StartTime).Font.ColorIndex = MyFont End If Else If EndTime < "" And _ IsNumeric(EndTime) Then 'Start time no good, end time good Cells(t.Row, "L").Offset(0, EndTime).Interior.ColorIndex = MyBack Cells(t.Row, "L").Offset(0, EndTime).Font.ColorIndex = MyFont Else 'start time and end time no good End If End If Application.EnableEvents = True End Sub |
#3
![]()
Posted to microsoft.public.excel.programming
|
|||
|
|||
![]()
Thanks a lot for trying.
Unfortunately I cant get that to drive it either. Again formulas update but not the gantt. "joel" wrote: I think I figured out the problem. 1 hour is not 1 but 1/24. Time in excel is one day = 1. Try this fix from StartTime = Cells(t.Row, "J") EndTime = Cells(t.Row, "K") to: StartTime = Hour(Cells(t.Row, "J")) EndTime = Hour(Cells(t.Row, "K")) "LiAD" wrote: Morning, I have a code that reads three columns, colour (black, blue, green, brown and two numbers, start hours and finish hours, (1, 2, 3 etc). The code then plots a series of coloured boxes, one colour per row to produce a gant chart. It works fine if I enter the three input columns manually, but if I drive the hour columns through formulas the coloured lines do not update with changes. So for example I want to plot blue from 0 to 3 hours on row 4 and black from 5 to 7 hours on row 5. Enter the data hit return and it works, I get a blue bar four boxes long starting in L4 and a black one 3 boxes long starting in P5. Then I change the row 5 inputs to be; start time = finish time of row 4 + 1 end time = start time + 3 Any changes to the row 4 inputs will not update the gantt, although the values in cells driving the gantt will change. Can anyone help me know why this happens or how to fix it? The code I'm using is below if it helps. Thanks LiAD Private Sub Worksheet_Change(ByVal Target As Range) MyBlue = 5 MyGreen = 4 MyBrown = 18 MyBlack = 1 MyGrey = 15 MyWhite = 2 Set i = Range("I4:K20") Set t = Target If Intersect(t, i) Is Nothing Then Exit Sub Application.EnableEvents = False Select Case UCase(Cells(t.Row, "I")) Case "BLUE": MyBack = MyBlue MyWhite = MyBlack Case "GREEN": MyBack = MyGreen MyFont = MyBlack Case "BROWN": MyBack = MyBrown MyFont = MyBlack Case "BLACK": MyBack = MyBlack MyFont = MyWhite Case "GREY": MyBack = MyGrey MyFont = MyBlack Case Else Exit Sub ' color is no good End Select 'clear old colors Range(Cells(t.Row, "k"), Cells(t.Row, "k").Offset(0, 23)) _ .Interior.ColorIndex = xlColorIndexNone 'make font black Range(Cells(t.Row, "k"), Cells(t.Row, "k").Offset(0, 23)) _ .Font.ColorIndex = MyBlack StartTime = Cells(t.Row, "J") EndTime = Cells(t.Row, "K") If StartTime < "" And _ IsNumeric(StartTime) Then 'Start time is valid If EndTime < "" And _ IsNumeric(EndTime) Then 'both starttime and end time are good Range(Cells(t.Row, "L").Offset(0, StartTime), _ Cells(t.Row, "L").Offset(0, EndTime)).Interior.ColorIndex = MyBack Range(Cells(t.Row, "L").Offset(0, StartTime), _ Cells(t.Row, "L").Offset(0, EndTime)).Font.ColorIndex = MyFont Else 'Start Time good end time not good Cells(t.Row, "L").Offset(0, StartTime).Interior.ColorIndex = MyBack Cells(t.Row, "L").Offset(0, StartTime).Font.ColorIndex = MyFont End If Else If EndTime < "" And _ IsNumeric(EndTime) Then 'Start time no good, end time good Cells(t.Row, "L").Offset(0, EndTime).Interior.ColorIndex = MyBack Cells(t.Row, "L").Offset(0, EndTime).Font.ColorIndex = MyFont Else 'start time and end time no good End If End If Application.EnableEvents = True End Sub |
#4
![]()
Posted to microsoft.public.excel.programming
|
|||
|
|||
![]()
Is the problem with formulas or the data. Put a message box a the beginning
of the worksheet change to see if yo are getting into the function. Also, are you formulas referecing other worksheets? worksheet change only apply to the sheet where they are located. Private Sub Worksheet_Change(ByVal Target As Range) msgbox("Data : " & target &"; Addr : " & Target.address) MyBlue = 5 "LiAD" wrote: Thanks a lot for trying. Unfortunately I cant get that to drive it either. Again formulas update but not the gantt. "joel" wrote: I think I figured out the problem. 1 hour is not 1 but 1/24. Time in excel is one day = 1. Try this fix from StartTime = Cells(t.Row, "J") EndTime = Cells(t.Row, "K") to: StartTime = Hour(Cells(t.Row, "J")) EndTime = Hour(Cells(t.Row, "K")) "LiAD" wrote: Morning, I have a code that reads three columns, colour (black, blue, green, brown and two numbers, start hours and finish hours, (1, 2, 3 etc). The code then plots a series of coloured boxes, one colour per row to produce a gant chart. It works fine if I enter the three input columns manually, but if I drive the hour columns through formulas the coloured lines do not update with changes. So for example I want to plot blue from 0 to 3 hours on row 4 and black from 5 to 7 hours on row 5. Enter the data hit return and it works, I get a blue bar four boxes long starting in L4 and a black one 3 boxes long starting in P5. Then I change the row 5 inputs to be; start time = finish time of row 4 + 1 end time = start time + 3 Any changes to the row 4 inputs will not update the gantt, although the values in cells driving the gantt will change. Can anyone help me know why this happens or how to fix it? The code I'm using is below if it helps. Thanks LiAD Private Sub Worksheet_Change(ByVal Target As Range) MyBlue = 5 MyGreen = 4 MyBrown = 18 MyBlack = 1 MyGrey = 15 MyWhite = 2 Set i = Range("I4:K20") Set t = Target If Intersect(t, i) Is Nothing Then Exit Sub Application.EnableEvents = False Select Case UCase(Cells(t.Row, "I")) Case "BLUE": MyBack = MyBlue MyWhite = MyBlack Case "GREEN": MyBack = MyGreen MyFont = MyBlack Case "BROWN": MyBack = MyBrown MyFont = MyBlack Case "BLACK": MyBack = MyBlack MyFont = MyWhite Case "GREY": MyBack = MyGrey MyFont = MyBlack Case Else Exit Sub ' color is no good End Select 'clear old colors Range(Cells(t.Row, "k"), Cells(t.Row, "k").Offset(0, 23)) _ .Interior.ColorIndex = xlColorIndexNone 'make font black Range(Cells(t.Row, "k"), Cells(t.Row, "k").Offset(0, 23)) _ .Font.ColorIndex = MyBlack StartTime = Cells(t.Row, "J") EndTime = Cells(t.Row, "K") If StartTime < "" And _ IsNumeric(StartTime) Then 'Start time is valid If EndTime < "" And _ IsNumeric(EndTime) Then 'both starttime and end time are good Range(Cells(t.Row, "L").Offset(0, StartTime), _ Cells(t.Row, "L").Offset(0, EndTime)).Interior.ColorIndex = MyBack Range(Cells(t.Row, "L").Offset(0, StartTime), _ Cells(t.Row, "L").Offset(0, EndTime)).Font.ColorIndex = MyFont Else 'Start Time good end time not good Cells(t.Row, "L").Offset(0, StartTime).Interior.ColorIndex = MyBack Cells(t.Row, "L").Offset(0, StartTime).Font.ColorIndex = MyFont End If Else If EndTime < "" And _ IsNumeric(EndTime) Then 'Start time no good, end time good Cells(t.Row, "L").Offset(0, EndTime).Interior.ColorIndex = MyBack Cells(t.Row, "L").Offset(0, EndTime).Font.ColorIndex = MyFont Else 'start time and end time no good End If End If Application.EnableEvents = True End Sub |
#5
![]()
Posted to microsoft.public.excel.programming
|
|||
|
|||
![]()
All the data is on one worksheet.
There is no problem with data entered as numbers. The problem is only with data generated by formulas, for example if in cell K4 I put = J4 + G4 then I change the value in G4 the gantt will not update to the new value in K4. The function is working fine if I dont use formulas in the worksheet. "joel" wrote: Is the problem with formulas or the data. Put a message box a the beginning of the worksheet change to see if yo are getting into the function. Also, are you formulas referecing other worksheets? worksheet change only apply to the sheet where they are located. Private Sub Worksheet_Change(ByVal Target As Range) msgbox("Data : " & target &"; Addr : " & Target.address) MyBlue = 5 "LiAD" wrote: Thanks a lot for trying. Unfortunately I cant get that to drive it either. Again formulas update but not the gantt. "joel" wrote: I think I figured out the problem. 1 hour is not 1 but 1/24. Time in excel is one day = 1. Try this fix from StartTime = Cells(t.Row, "J") EndTime = Cells(t.Row, "K") to: StartTime = Hour(Cells(t.Row, "J")) EndTime = Hour(Cells(t.Row, "K")) "LiAD" wrote: Morning, I have a code that reads three columns, colour (black, blue, green, brown and two numbers, start hours and finish hours, (1, 2, 3 etc). The code then plots a series of coloured boxes, one colour per row to produce a gant chart. It works fine if I enter the three input columns manually, but if I drive the hour columns through formulas the coloured lines do not update with changes. So for example I want to plot blue from 0 to 3 hours on row 4 and black from 5 to 7 hours on row 5. Enter the data hit return and it works, I get a blue bar four boxes long starting in L4 and a black one 3 boxes long starting in P5. Then I change the row 5 inputs to be; start time = finish time of row 4 + 1 end time = start time + 3 Any changes to the row 4 inputs will not update the gantt, although the values in cells driving the gantt will change. Can anyone help me know why this happens or how to fix it? The code I'm using is below if it helps. Thanks LiAD Private Sub Worksheet_Change(ByVal Target As Range) MyBlue = 5 MyGreen = 4 MyBrown = 18 MyBlack = 1 MyGrey = 15 MyWhite = 2 Set i = Range("I4:K20") Set t = Target If Intersect(t, i) Is Nothing Then Exit Sub Application.EnableEvents = False Select Case UCase(Cells(t.Row, "I")) Case "BLUE": MyBack = MyBlue MyWhite = MyBlack Case "GREEN": MyBack = MyGreen MyFont = MyBlack Case "BROWN": MyBack = MyBrown MyFont = MyBlack Case "BLACK": MyBack = MyBlack MyFont = MyWhite Case "GREY": MyBack = MyGrey MyFont = MyBlack Case Else Exit Sub ' color is no good End Select 'clear old colors Range(Cells(t.Row, "k"), Cells(t.Row, "k").Offset(0, 23)) _ .Interior.ColorIndex = xlColorIndexNone 'make font black Range(Cells(t.Row, "k"), Cells(t.Row, "k").Offset(0, 23)) _ .Font.ColorIndex = MyBlack StartTime = Cells(t.Row, "J") EndTime = Cells(t.Row, "K") If StartTime < "" And _ IsNumeric(StartTime) Then 'Start time is valid If EndTime < "" And _ IsNumeric(EndTime) Then 'both starttime and end time are good Range(Cells(t.Row, "L").Offset(0, StartTime), _ Cells(t.Row, "L").Offset(0, EndTime)).Interior.ColorIndex = MyBack Range(Cells(t.Row, "L").Offset(0, StartTime), _ Cells(t.Row, "L").Offset(0, EndTime)).Font.ColorIndex = MyFont Else 'Start Time good end time not good Cells(t.Row, "L").Offset(0, StartTime).Interior.ColorIndex = MyBack Cells(t.Row, "L").Offset(0, StartTime).Font.ColorIndex = MyFont End If Else If EndTime < "" And _ IsNumeric(EndTime) Then 'Start time no good, end time good Cells(t.Row, "L").Offset(0, EndTime).Interior.ColorIndex = MyBack Cells(t.Row, "L").Offset(0, EndTime).Font.ColorIndex = MyFont Else 'start time and end time no good End If End If Application.EnableEvents = True End Sub |
#6
![]()
Posted to microsoft.public.excel.programming
|
|||
|
|||
![]()
I assume yo are NOT getting the messagebox. Is this correct?
The worksheet function shold always work unless you are getting an error in antoerh macro. You said the only thing you changed was the number to a formula. this means you worksheet options are working correctly. Does the macro start working again if yo only change the formulas back to a number? I want to make sure that events weren't disabled. Try changing your error trapping in the VBA menu Tools - OPtions - General - Stop on all errors This will give additional diagnostics to help solve the problem. Post the data in cells J4, G4, and K4. "LiAD" wrote: All the data is on one worksheet. There is no problem with data entered as numbers. The problem is only with data generated by formulas, for example if in cell K4 I put = J4 + G4 then I change the value in G4 the gantt will not update to the new value in K4. The function is working fine if I dont use formulas in the worksheet. "joel" wrote: Is the problem with formulas or the data. Put a message box a the beginning of the worksheet change to see if yo are getting into the function. Also, are you formulas referecing other worksheets? worksheet change only apply to the sheet where they are located. Private Sub Worksheet_Change(ByVal Target As Range) msgbox("Data : " & target &"; Addr : " & Target.address) MyBlue = 5 "LiAD" wrote: Thanks a lot for trying. Unfortunately I cant get that to drive it either. Again formulas update but not the gantt. "joel" wrote: I think I figured out the problem. 1 hour is not 1 but 1/24. Time in excel is one day = 1. Try this fix from StartTime = Cells(t.Row, "J") EndTime = Cells(t.Row, "K") to: StartTime = Hour(Cells(t.Row, "J")) EndTime = Hour(Cells(t.Row, "K")) "LiAD" wrote: Morning, I have a code that reads three columns, colour (black, blue, green, brown and two numbers, start hours and finish hours, (1, 2, 3 etc). The code then plots a series of coloured boxes, one colour per row to produce a gant chart. It works fine if I enter the three input columns manually, but if I drive the hour columns through formulas the coloured lines do not update with changes. So for example I want to plot blue from 0 to 3 hours on row 4 and black from 5 to 7 hours on row 5. Enter the data hit return and it works, I get a blue bar four boxes long starting in L4 and a black one 3 boxes long starting in P5. Then I change the row 5 inputs to be; start time = finish time of row 4 + 1 end time = start time + 3 Any changes to the row 4 inputs will not update the gantt, although the values in cells driving the gantt will change. Can anyone help me know why this happens or how to fix it? The code I'm using is below if it helps. Thanks LiAD Private Sub Worksheet_Change(ByVal Target As Range) MyBlue = 5 MyGreen = 4 MyBrown = 18 MyBlack = 1 MyGrey = 15 MyWhite = 2 Set i = Range("I4:K20") Set t = Target If Intersect(t, i) Is Nothing Then Exit Sub Application.EnableEvents = False Select Case UCase(Cells(t.Row, "I")) Case "BLUE": MyBack = MyBlue MyWhite = MyBlack Case "GREEN": MyBack = MyGreen MyFont = MyBlack Case "BROWN": MyBack = MyBrown MyFont = MyBlack Case "BLACK": MyBack = MyBlack MyFont = MyWhite Case "GREY": MyBack = MyGrey MyFont = MyBlack Case Else Exit Sub ' color is no good End Select 'clear old colors Range(Cells(t.Row, "k"), Cells(t.Row, "k").Offset(0, 23)) _ .Interior.ColorIndex = xlColorIndexNone 'make font black Range(Cells(t.Row, "k"), Cells(t.Row, "k").Offset(0, 23)) _ .Font.ColorIndex = MyBlack StartTime = Cells(t.Row, "J") EndTime = Cells(t.Row, "K") If StartTime < "" And _ IsNumeric(StartTime) Then 'Start time is valid If EndTime < "" And _ IsNumeric(EndTime) Then 'both starttime and end time are good Range(Cells(t.Row, "L").Offset(0, StartTime), _ Cells(t.Row, "L").Offset(0, EndTime)).Interior.ColorIndex = MyBack Range(Cells(t.Row, "L").Offset(0, StartTime), _ Cells(t.Row, "L").Offset(0, EndTime)).Font.ColorIndex = MyFont Else 'Start Time good end time not good Cells(t.Row, "L").Offset(0, StartTime).Interior.ColorIndex = MyBack Cells(t.Row, "L").Offset(0, StartTime).Font.ColorIndex = MyFont End If Else If EndTime < "" And _ IsNumeric(EndTime) Then 'Start time no good, end time good Cells(t.Row, "L").Offset(0, EndTime).Interior.ColorIndex = MyBack Cells(t.Row, "L").Offset(0, EndTime).Font.ColorIndex = MyFont Else 'start time and end time no good End If End If Application.EnableEvents = True End Sub |
Reply |
Thread Tools | Search this Thread |
Display Modes | |
|
|
![]() |
||||
Thread | Forum | |||
I am stuck | Excel Worksheet Functions | |||
Stuck and need help | Excel Programming | |||
Help, please, I'm stuck | Excel Discussion (Misc queries) | |||
Ok now im stuck | Excel Programming | |||
Stuck! | Excel Programming |