2016-09-12 3 views
-1

Я пытаюсь суммировать столбец таблицы на втором листе в ячейке на первом листе через 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 
+2

не должна быть формулой '= SUM (Таблица 1 [APAC])' Я думаю, что у вас есть дополнительный '(' –

+0

Скотт ... вы - вышка ht, я добавил лишний (случайно. Я уберу его отсюда, но проблема все еще стоит. – GopherKing

+0

Можете ли вы показать больше своего кода, потому что он работает для меня как есть. Я получаю правильную формулу в соответствующей ячейке. –

ответ

-1

Скотт был гением, который заметил, что я оставил дополнительный (во всех моих формул. После удаления, они работали без проблем вообще. Поэтому ниже фрагмент кода работает сейчас. Спасибо Скотт!

With .Range("B7") 
         .Select 
         .FormulaR1C1 = rpt 
         .Offset(1, 0).FormulaR1C1 = "APAC" 
         .Offset(1, 1).FormulaR1C1 = "=Sum(Table1[APAC])" 
         .Offset(1, 1).FormulaR1C1 = .Worksheet("Data").ListObject("Table1").ListColumns("APAC") 
         .Offset(2, 0).FormulaR1C1 = "EMEA" 
         .Offset(2, 1).Formula = "=Sum(Table1[EMEA])" 
         .Offset(3, 0).FormulaR1C1 = "LATAM" 
         .Offset(3, 1).Formula = "=Sum(Table1[LATAM])" 
         .Offset(4, 0).FormulaR1C1 = "NAM" 
         .Offset(4, 1).Formula = "=Sum(Table1[NAM])" 
         .Offset(5, 0).FormulaR1C1 = "Global" 
         .Offset(5, 1).Formula = "=Sum(Table1[GLOBAL])" 
         .Offset(6, 0).FormulaR1C1 = "Total" 
         .Offset(6, 1).Formula = "=Sum(C8:C12)" 
        End With