Я пытаюсь суммировать столбец таблицы на втором листе в ячейке на первом листе через VBA. Я попытался нажать формулу, используя свойство .Formula, но ячейка оставлена пустой.Добавить формулу в ячейку, ссылающуюся на столбец таблицы через VBA
Для этого вопроса предположим, что таблица находится на рабочем листе («Данные») и называется «Таблица1». Колонка, о которой идет речь, - [APAC]. xlsheet определяется ранее в коде и подтверждается, что он работает как ожидалось. Имея это в виду, VBA, чтобы заполнить формулу я использовал это следующим образом:
xlsheet.Range("C8").Formula = "=Sum(Table1[APAC])"
Приведенная выше формула, когда вручную набран в клетку сама работает как шарм, но по какой-то причине, делая это с помощью VBA не ACCPETED.
Я даже попытался использовать свойство .FormulaR1C1, но получил те же результаты.
Я надеялся, что с помощью таблицы я могу легко ссылаться на весь столбец таблицы для моих вычислений, чтобы суммировать данные, хранящиеся в нем через VBA, но это, похоже, не нравится. Кто-нибудь еще сталкивается с этой ошибкой или имеет какие-либо обходные пути/решения? Заранее спасибо!
Есть одна вещь, о которой я забыл упомянуть, и это, возможно, БОЛЬШОЙ пункт, о котором нужно упомянуть. Я создаю свои данные из MS Access 2010 и используя MS Access VBA для форматирования вывода Excel. По большей части, VBA, используемый в Excel, будет таким же, за исключением позднего связывания приложения Excel Excel.
Больше кода наступающем из MS Access в MS Excel ... не может показать все это, так как есть так много сделано Access первой перед экспортом в Excel, что будет слишком много:
'Filename is the string with the link to the file
Set xlbook = GetObject(filename)
'Disable Screen Updating until all editing is complete
'xlApp.ScreenUpdating = False
'Make sure excel is visibe on the screen
xlApp.Visible = True
xlbook.Windows(1).Visible = True
'Rename the existing worksheet to Data
xlbook.Worksheets(1).Name = "Data"
'Set populated data on Data worksheet as a Table
With xlbook.Worksheets("Data")
'Get the Last Row and Column to determine the final populated cell to be included in the Table
lastrow = .Cells(.Rows.Count, "A").End(xlUp).Row
lastcol = .Cells(1, .Columns.Count).End(xlToLeft).Column
'Set the populated data as Table1
.ListObjects.Add(xlSrcRange, .Range(.Cells(1, 1), .Cells(lastrow, lastcol)), , xlYes).Name = "Table1"
End With
'Add a new worksheet
With xlbook
.Worksheets.Add .Worksheets(.Worksheets.Count), , 1
.Worksheets(1).Name = "Reports"
End With
Set xlsheet = xlbook.Worksheets("Reports")
With xlsheet
With .Range("A1:A5")
.Font.Bold = True
.Font.Size = 14
.HorizontalAlignment = xlRight
End With
.Range("B1:B5").Font.Size = 14
.Range("A1").FormulaR1C1 = "Report:"
.Range("B1").FormulaR1C1 = rpt
.Range("A2").FormulaR1C1 = "Region:"
.Range("B2").FormulaR1C1 = region
.Range("A3").FormulaR1C1 = "System:"
.Range("B3").FormulaR1C1 = Sys
.Range("A4").FormulaR1C1 = "Program/Funding Source:"
.Range("B4").FormulaR1C1 = prog
If rpt = "Request Delivered" Or rpt = "Requests Received" Then
.Range("A5").FormulaR1C1 = "Year:"
.Range("B5").FormulaR1C1 = Yr
Else
.Rows(5).EntireRow.Delete 'Not needed for the other reports
End If
.Columns(1).AutoFit
End With
'Define the current sheet in the workbook as xlSheet
Set xlsheet = xlbook.Worksheets(1)
'**********************************************************************************************************************************
'Use Select case to Go to appropriate formatting code
Select Case rpt
Case "Approved for Target Staging", "In Process"
With xlsheet
.Range("B:B").ColumnWidth = 30
With .Range("B7:C7")
.Font.Size = 12
.Font.Bold = True
.HorizontalAlignment = xlCenter
.Interior.ColorIndex = RGB(191, 191, 191)
End With
With .Range("B7")
.Select
.FormulaR1C1 = rpt
.Offset(1, 0).FormulaR1C1 = "APAC"
.Offset(1, 1).Formula = "=Sum(Table1([APAC])" '<--- HERE IS ONE OF THEM
.Offset(2, 0).FormulaR1C1 = "EMEA"
.Offset(2, 1).Formula = "=Sum(Table1([EMEA])" '<-- ANOTHER
.Offset(3, 0).FormulaR1C1 = "LATAM"
.Offset(3, 1).Formula = "=Sum(Table1([LATAM])" '<-- ETC.
.Offset(4, 0).FormulaR1C1 = "NAM"
.Offset(4, 1).Formula = "=Sum(Table1([NAM])" '<-- ETC.
.Offset(5, 0).FormulaR1C1 = "Global"
.Offset(5, 1).Formula = "=Sum(Table1([GLOBAL])" '<-- ETC.
.Offset(6, 0).FormulaR1C1 = "Total"
.Offset(6, 1).Formula = "=Sum(C8:C12)"
End With
End With
Case "Request Delivered", "Requests Received"
End Select
не должна быть формулой '= SUM (Таблица 1 [APAC])' Я думаю, что у вас есть дополнительный '(' –
Скотт ... вы - вышка ht, я добавил лишний (случайно. Я уберу его отсюда, но проблема все еще стоит. – GopherKing
Можете ли вы показать больше своего кода, потому что он работает для меня как есть. Я получаю правильную формулу в соответствующей ячейке. –