2016-02-23 3 views
1

Я работаю над отчетом в Excel, фактически создавая его в VB6 для генерации в excel. Как видно на рисунке ниже, у меня есть 2 столбца, BOUGHT и SOLD. То, что я пытаюсь сделать, это взять ОСНОВАНИЯ обоих и поместить их в строку TOTAL.Выполнение SUM в EXCEL VBA по переменным столбцам

Так что я пытаюсь с кодом, как это, в основном сначала указать, где я хочу поставить значение

xlrow= 14 
xlCol=2 
ActiveCell(xlRow, xlCol) = (ActiveCell.FormulaR1C1 = "=sum(B6:B12)") 

"Я попробовал это, но это дало мне значение FALSE, не знаю, как идти о это В принципе, я хочу зайти в общую ячейку BOUGHT, взять сумму A, B, C, D, Other, None, Unknown и пропустить ее до следующей ячейки и взять итог SOLD:

Имейте это в петлю, чтобы он прошел весь путь до конца отсчета (см. ниже)

Я заполняю заголовки Excel (пакеты и т. Д.) С помощью набора записей, и, поскольку я пытаюсь сделать его динамичным (используйте только то количество, сколько у меня есть и сколько столбцов у меня есть). Так что это то, что я пытаюсь построить

xlrow=14 
xlcol=2 
rCount=(g_RS.recordcount *2) 'because I have two columns (Bought,sold) for each Heading 
dim i as integer 
for i = 1 to rCount -1 
    ActiveCell(xlRow, xlCol) = (ActiveCell.FormulaR1C1 = "=sum(B6:B12)") 
    xlcol=xlcol+1 
next 

enter image description here

+0

первая нота является то, что вы пытаетесь установить 'формулу R1C1' с' стиль обозначения A1'. Измените '.FormulaR1C1' на' .Formula' и посмотрите, помогает ли это. –

+0

1) избавиться от этих «ActiveCell» !!! 2) Я считаю отличной практикой ставить итоги сверху (с замороженными рядами) –

+0

@ScottHoltzman это все еще дает мне FALSE – FatBoySlim7

ответ

1

Для того, чтобы помочь вам получить представление о том, как закодировать это более эффективно, вот пример. Вы можете расширить это через остальную часть своего кода, но я считаю, что он работает для вашей ситуации.

Вы можете использовать нотацию R1C1 для построения формулы, но вы должны правильно включить все части для создания правильной ссылки. Используйте строку Debug.Print на строке, чтобы увидеть, как она выглядит, если вам нужно.

Добавлена ​​граница форматирования

Option Explicit 

Sub GenerateTotals() 
    Dim ws As Worksheet 
    Dim dataRowStart As Long 
    Dim dataRowEnd As Long 
    Dim totalsRow As Long 
    Dim dataColumnStart As Long 
    Dim columnCount As Long 
    Dim dataRangeR1C1 As String 
    Dim i As Long 

    '--- set these values specifically, or you can calculate them 
    Set ws = ActiveSheet 
    dataRowStart = 6 
    dataRowEnd = 12 
    totalsRow = 14 
    dataColumnStart = 2 
    columnCount = 2 
    'countCount = (g_RS.RecordCount * 2) 

    For i = dataColumnStart To (dataColumnStart + columnCount - 1) 
     dataRangeR1C1 = "R" & dataRowStart & "C" & i & ":R" & dataRowEnd & "C" & i 
     With ws.Cells(totalsRow, i) 
      .FormulaR1C1 = "=SUM(" & dataRangeR1C1 & ")" 
      .Borders(xlEdgeTop).LineStyle = xlContinuous 
      .Borders(xlEdgeTop).ColorIndex = xlAutomatic 
      .Borders(xlEdgeTop).TintAndShade = 0 
      .Borders(xlEdgeTop).Weight = xlThin 
      .Borders(xlEdgeBottom).LineStyle = xlContinuous 
      .Borders(xlEdgeBottom).ColorIndex = xlAutomatic 
      .Borders(xlEdgeBottom).TintAndShade = 0 
      .Borders(xlEdgeBottom).Weight = xlThick 
     End With 
    Next i 

    Set ws = Nothing 
End Sub 
+0

Можно ли добавить портал в этот цикл, когда я пишу значения? – FatBoySlim7

+0

Общий ответ ... уверен! Но я не знаю, что вы означает «портал» или то, пытаюсь добиться. Если приведенный выше пример помогает решить вашу проблему, вы можете отметить его как фиксированный, тогда вам, возможно, придется открыть второй вопрос. – PeterT

+0

BORDER ***** Я пытаюсь сделать причудливый один с одной линией сверху и 2 внизу, или любой портал – FatBoySlim7

Смежные вопросы