Thanks Dave, that explains a LOT!
--
|
+-- Thief_
|
"Dave Peterson" wrote in message
...
But your original code was:
ReDim DataArray(LasDateCol - 2)
cnt = 0
For i = 3 To LasDateCol
DataArray(cnt) = i
cnt = cnt + 1
Next i
And unless you you have "option base 1" at the top of your module, it's a
0
based array.
Say you wanted columns 3 to 5 (5 being the last column) for a total of 3
columns
redim dataarray(5-2)
redim dataarray(3)
gives an array with 4 elements:
dataarray(0)
dataarray(1)
dataarray(2)
dataarray(3)
And you don't populate dataarray(3).
So one fix would have been:
Redim DataArray(lasdatecol -3)
or
redim dataarray(1 to lasdatecol -2)
cnt = 1
For i = 3 To LasDateCol
DataArray(cnt) = i
cnt = cnt + 1
Next i
==========
I just thought it would be easier to see the loop without the extra cnt
variable.
In fact, to keep from having to update those bounds, I'd probably use
something
more like:
ReDim DataArray(3 To LasDateCol)
For i = LBound(DataArray) To UBound(DataArray)
DataArray(i) = i
Next i
If I changed that 3, I'd only have to change it in one spot.
Thief_ wrote:
Wonderful- it works, but I can't understand why my original code
doesn't:
ReDim DataArray(LasDateCol)
cnt=0
For i = 3 To LasDateCol
DataArray(cnt) = i
cnt=cnt+1
Next i
....which is a zero-based array??
--
|
+-- Julian
|
"Dave Peterson" wrote in message
...
That array doesn't have to be 0 based or 1 based. You can actually
just
use the
columns you want:
Option Explicit
Sub testme()
With Worksheets("Summary")
Call SubTotalSummaryData(.Cells(1,
.Columns.Count).End(xlToLeft).Column)
End With
End Sub
Private Sub SubTotalSummaryData(LasDateCol As Long)
Dim DataArray() As Long
Dim i As Long
With Worksheets("Summary")
' Populate array of all used columns of data- used by
' the Subtotal function.
ReDim DataArray(3 To LasDateCol)
For i = 3 To LasDateCol
DataArray(i) = i
Next i
.UsedRange.Subtotal GroupBy:=1, _
Function:=xlSum, TotalList:=Array(DataArray()), _
Replace:=True, PageBreaks:=False, _
SummaryBelowData:=True
End With
End Sub
I changed the Byte's to Long's.
Thief_ wrote:
I'm trying to automate a Subtotal function, ie, I want to SUM
the
data
in columns C onwards for each change in column A:
Code:
Private Sub SubTotalSummaryData(LasDateCol As Byte)
Dim DataArray() As Byte, cnt As Byte, i As Byte
With Worksheets("Summary")
' Populate array of all used columns of data- used by
the
Subtotal function.
ReDim DataArray(LasDateCol - 2)
cnt = 0
For i = 3 To LasDateCol
DataArray(cnt) = i
cnt = cnt + 1
Next i
.UsedRange.Subtotal GroupBy:=1, Function:=xlSum,
TotalList:=Array(DataArray()), Replace:=True, PageBreaks:=False,
SummaryBelowData _
:=True
End With
End Sub
The number of columns present will vary each time the
procedure is
called thus I tried creating an array of all the used columns via
the
FOR....NEXT loop, but VBA doesn't like it.
Any ideas?
--
|
+-- Julian
|
--
Dave Peterson
--
Dave Peterson
|