• How to set the SubTotal TotalList using a variant instead of an array

    Home » Forums » AskWoody support » Productivity software by function » MS Excel and spreadsheet help » How to set the SubTotal TotalList using a variant instead of an array

    Author
    Topic
    #504363

    Greetings! I am currently redesigning a workbook that is tracking the daily output of a number of wells. The original tracked 100 wells, but the new version could track anywhere up to 1000 wells. I have been trying to find a method of getting around typing up to 1000 column numbers into the TotalList:=Array (3,4,5,etc.) statement.

    A sample of the worksheet looks like this:
    43516-Sample-Data

    After a lot of research I have created the following (Based on examples that appear to have worked for others) :

    Code:
    Sub WklySubtotal()
        Dim varCols()   As Variant  ‘array to hold column numbers
        Dim intCount    As Integer  ‘for..next counter
        Dim intMaxCol   As Integer  ‘number of columns to subtotaled
        
        Sheets(“Sheet1”).Select
        Cells(1, 3).Select
        Selection.End(xlToRight).Select
        intMaxCol = ActiveCell.Column
        
        ReDim varCols(intMaxCol – 2)
        
        For intCount = 3 To intMaxCol
            varCols(intCount – 3) = intCount
           ‘ Debug.Print intCount – 3, varCols(intCount – 3)
        Next intCount
    
        Selection.Subtotal Groupby:=1, Function:=xlAverage, TotalList:=varCols, _
        Replace:=True, PageBreaks:=False, SummaryBelowData:=True
    ‘    Selection.Subtotal Groupby:=1, Function:=xlAverage, TotalList:=Array(3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14), _
    ‘    Replace:=True, PageBreaks:=False, SummaryBelowData:=True
        
        ActiveSheet.Outline.ShowLevels RowLevels:=2
        Columns(“B:B”).Select
        Selection.EntireColumn.Hidden = True
        
    End Sub

    My sample data is based on 10 wells (the columns listed in the commented out section of code), and it works just fine when I use the version with the array values typed in, but when I try to run it using the varCols variant I get aRun Time error 1004 – Subtotal method of Range class failed.

    The Debug statement has shown me that the right column numbers are in the variant array.

    I am working in Excel 2013 on Windows 10, but I have been getting the same result in both Excel 2010 and 2016.

    Any help is greatly appreciated (I cannot help but feel that I am missing some tiny little thing!)

    Viewing 0 reply threads
    Author
    Replies
    • #1550562

      This change seems to work – I was looking to avoid a reference to the zeroth array element. At least I saw no errors
      Norm

      Code:
      Sub WklySubtotal()
          Dim varCols()    As  Variant 'array to hold column numbers
          Dim intCount    As Integer  'for..next counter
          Dim intMaxCol   As Integer  'number of columns to subtotaled
          
          Sheets("Sheet1").Select
          Cells(1, 3).Select
          Selection.End(xlToRight).Select
          intMaxCol = ActiveCell.Column
          
          ReDim varCols(intMaxCol - 2)
          
          For intCount = 2 To intMaxCol
              varCols(intCount - 2) = intCount
             'Debug.Print intCount - 3, varCols(intCount - 3)
          Next intCount
      
          Selection.CurrentRegion.Select
          Selection.Subtotal GroupBy:=1, Function:=xlAverage, TotalList:=varCols, _
          Replace:=True, PageBreaks:=False, SummaryBelowData:=True
      '    Selection.Subtotal Groupby:=1, Function:=xlAverage, TotalList:=Array(3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14), _
      '    Replace:=True, PageBreaks:=False, SummaryBelowData:=True
          
          ActiveSheet.Outline.ShowLevels RowLevels:=2
          Columns("B:B").Select
          Selection.EntireColumn.Hidden = True
          
      End Sub
      
    Viewing 0 reply threads
    Reply To: How to set the SubTotal TotalList using a variant instead of an array

    You can use BBCodes to format your content.
    Your account can't use all available BBCodes, they will be stripped before saving.

    Your information: