I'll do my charting function since it is smaller:
Thats essentially what I'm doing...
=IF(H40,ChartObject(),"")
Where
H4=SUBTOTAL(3,B8:B5008)
THIS ONE DOESN'T DO ANYTHING WHEN A FILTER CHANGES
-Function ChartObject()
Dim i As Integer, stringer As String, stringer2 As String
Worksheets("Charts").Activate
Charts.Add
ActiveChart.ChartType = xlColumnClustered
Worksheets("Calculations").Visible = -1
ActiveChart.SetSourceData Source:=Sheets("Charts").Range("H10")
i = 1
While i < 255
stringer = Str(1 + i)
If (i + 1 < 10) Then
stringer = Right(stringer, 1)
Else
If (i + 1 < 100) Then
stringer = Right(stringer, 2)
Else
If (i + 1 < 1000) Then
stringer = Right(stringer, 3)
End If
End If
End If
On Error GoTo done
If Worksheets("Calculations").Range("H" & stringer).Value = "
Then GoTo done
If Worksheets("Calculations").Range("H" & stringer).Value = "
Then GoTo done
stringer2 = "=Calculations!R" & stringer & "C6"
stringer = "=Calculations!R" & stringer & "C8"
ActiveChart.SeriesCollection.NewSeries
ActiveChart.SeriesCollection(i).Values = stringer
ActiveChart.SeriesCollection(i).Name = stringer2
i = i + 1
Wend
done:
ActiveChart.SeriesCollection(1).XValues = "=Charts!R7C3"
ActiveChart.Location Whe=xlLocationAsObject, Name:="Charts"
With ActiveChart
.HasTitle = True
.ChartTitle.Characters.Text = "Hardware Count by Type"
.Axes(xlCategory, xlPrimary).HasTitle = False
' .Axes(xlValue, xlPrimary).AxisTitle.Characters.Text
"Frequency"
End With
ActiveChart.ApplyDataLabels Type:=xlDataLabelsShowValue
LegendKey:=False
ActiveChart.ChartTitle.Font.Name = "Arial"
ActiveChart.ChartTitle.Font.FontStyle = "Bold"
ActiveChart.ChartTitle.Font.Size = 12
ActiveChart.ChartTitle.Font.Strikethrough = False
ActiveChart.ChartTitle.Font.Superscript = False
ActiveChart.ChartTitle.Font.Subscript = False
ActiveChart.ChartTitle.Font.OutlineFont = False
ActiveChart.ChartTitle.Font.Shadow = False
ActiveChart.ChartTitle.Font.Underline = xlUnderlineStyleNone
ActiveChart.ChartTitle.Font.ColorIndex = xlAutomatic
ActiveChart.ChartTitle.Font.Background = xlAutomatic
ActiveSheet.Shapes(ActiveChart.Parent.Name).ScaleW idth 1.965
msoFalse, msoScaleFromTopLeft
ActiveSheet.Shapes(ActiveChart.Parent.Name).Increm entLeft -201
ActiveSheet.Shapes(ActiveChart.Parent.Name).Increm entTop -147#
ActiveSheet.Shapes(ActiveChart.Parent.Name).Increm entTop 730
Worksheets("Calculations").Visible = 2
exit2:
ChartObject = ""
End Function
-
*This one does do something everytime a filter changes:*
=IF(H40,VALUE(E1SUMG()),0)
-Function E1SUMG() As String
i = 8
j = 0
Worksheets("Inventory").Select
x = ActiveSheet.Range("Q1012").Value
While i <= x
s = LTrim(Str(i - 7))
s2 = LTrim(Str(i))
If (Worksheets("Inventory").Range("Q" & s2).Value = "E1") Then
b = Worksheets("Inventory").Range("G"
s2).EntireRow.Hidden
If (Not b) Then
j = j + Worksheets("Inventory").Range("G" & s2).Value
End If
End If
i = i + 1
Wend
E1SUMG = j
End Function
--
Message posted from
http://www.ExcelForum.com