Unfortunately, column headers cannot be dynamic in order to be used as SourceObject. This defeats your goal of not always displaying all mileage groups.
You should get an error message when attempting to use crosstab without fixed columns as SourceObject.
Only practical solution I can see is VBA using QueryDefs to modify query object.
Set up query object with IN clause:
PARAMETERS [forms]![frmInterval]![Text25] Long, [forms]![frmInterval]![Text11] Text ( 255 );
TRANSFORM Sum(qrySP.Net) AS SumOfNet
SELECT qrySP.strPN
FROM qrySP
GROUP BY qrySP.strPN
PIVOT qrySP.strKM In (10,20,30);
Code to modify, like:
Code:
Private Sub Command36_Click()
Dim qdf As QueryDef, strSQL As String, strColumns As String, x As Integer
Set qdf = CurrentDb.QueryDefs("qrySP_Crosstab")
strSQL = qdf.SQL
strSQL = Left(strSQL, InStr(strSQL, "PIVOT ") - 1)
x = Me.Text23
Do
strColumns = strColumns & x & ","
x = x + Me.Text23
Loop Until x > Me.Text25 / 1000
qdf.SQL = strSQL & vbCrLf & "PIVOT qrySP.strKM IN(" & Left(strColumns, Len(strColumns) - 1) & ");"
DoCmd.OpenForm "frmCross"
End Sub