Excel 通过VBA向引用表列的单元格添加公式

Excel 通过VBA向引用表列的单元格添加公式,excel,sum,formula,listobject,vba,Excel,Sum,Formula,Listobject,Vba,我试图通过VBA将第二个工作表中的表列汇总到第一个工作表的单元格中。我尝试使用.formula属性推入公式,但单元格留空 对于这个问题,假设该表位于工作表(“数据”)上,并命名为“Table1”。有关专栏是[APAC]。xlsheet在本规范前面已定义,并已确认按预期工作。考虑到这一点,填充我使用的公式的VBA如下所示: xlsheet.Range("C8").Formula = "=Sum(Table1[APAC])" 在单元格中手动输入上述公式时,其效果就像一个符咒,但由于某些原因,不允许

我试图通过VBA将第二个工作表中的表列汇总到第一个工作表的单元格中。我尝试使用.formula属性推入公式,但单元格留空

对于这个问题,假设该表位于工作表(“数据”)上,并命名为“Table1”。有关专栏是[APAC]。xlsheet在本规范前面已定义,并已确认按预期工作。考虑到这一点,填充我使用的公式的VBA如下所示:

xlsheet.Range("C8").Formula = "=Sum(Table1[APAC])"
在单元格中手动输入上述公式时,其效果就像一个符咒,但由于某些原因,不允许通过VBA执行此操作

我甚至尝试使用.FormulaR1C1属性,但得到了相同的结果

我希望通过使用一个表,我可以很容易地引用整个表列进行计算,以通过VBA汇总其中存储的数据,但它似乎不喜欢它。是否有其他人遇到此错误或有任何解决方法/解决方案?提前谢谢

有一件事我忘了提,这可能是一件很重要的事情。我正在从MS Access 2010生成数据,并使用MS Access VBA格式化Excel输出。在大多数情况下,Excel中使用的VBA将是相同的,但2010 Excel应用程序的后期绑定除外

更多的代码来自MS Access到MS Excel。。。无法全部显示,因为在导出到Excel之前Access首先要做的事情太多了:

        '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
”文件名是带有文件链接的字符串
Set xlbook=GetObject(文件名)
'禁用屏幕更新,直到所有编辑完成
'xlApp.screenUpdate=False
'确保excel在屏幕上可见
xlApp.Visible=True
xlbook.Windows(1).Visible=True
'将现有工作表重命名为数据
xlbook.Worksheets(1).Name=“数据”
'将数据工作表上填充的数据设置为表
使用xlbook.Worksheets(“数据”)
'获取最后一行和最后一列,以确定要包含在表中的最终填充单元格
lastrow=.Cells(.Rows.Count,“A”).End(xlUp).Row
lastcol=.Cells(1,.Columns.Count).End(xlToLeft).Column
'将填充的数据设置为表1
.ListObjects.Add(xlSrcRange,.Range(.Cells(1,1),.Cells(lastrow,lastcol)),xlYes.Name=“Table1”
以
'添加新工作表
使用xlbook
.Worksheets.Add.Worksheets(.Worksheets.Count),1
.工作表(1).Name=“报告”
以
设置xlsheet=xlbook.Worksheets(“报告”)
用xlsheet
带.范围(“A1:A5”)
.Font.Bold=True
.Font.Size=14
.HorizontalAlignment=xlRight
以
.Range(“B1:B5”).Font.Size=14
.Range(“A1”).FormulaR1C1=“报告:”
.范围(“B1”).公式1c1=rpt
.范围(“A2”).公式1c1=“区域:”
.范围(“B2”).公式1c1=区域
.范围(“A3”).公式1c1=“系统:”
.范围(“B3”).公式1c1=Sys
.Range(“A4”).FormulaR1C1=“计划/资金来源:
.范围(“B4”).公式1c1=prog
如果rpt=“请求已送达”或rpt=“请求已收到”,则
.范围(“A5”).公式1c1=“年份:”
.范围(“B5”).公式1c1=年
其他的
.Rows(5).EntireRow.Delete“其他报告不需要
如果结束
.列(1).自动拟合
以
'将工作簿中的当前工作表定义为xlSheet
设置xlsheet=xlbook.Worksheets(1)
'**********************************************************************************************************************************
'使用“选择大小写”转到相应的格式代码
选择案例rpt
案例“批准用于目标阶段”、“正在进行”
用xlsheet
.范围(“B:B”).列宽=30
带.Range(“B7:C7”)
.Font.Size=12
.Font.Bold=True
.HorizontalAlignment=xlCenter
.Interior.ColorIndex=RGB(191191191191191)
以
带.Range(“B7”)
.选择
.公式1c1=rpt
.Offset(1,0)。公式1c1=“亚太地区”

.Offset(1,1).Formula=“=Sum(Table1([APAC])”Scott是一位天才,他注意到我在所有公式中都留了一个额外的值。一旦删除,它们就可以毫无问题地工作。因此下面的代码部分现在可以工作了。谢谢Scott

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

公式不应该是
=SUM(表1[APAC])
我想你有一个额外的
斯科特…你是对的,我加了额外的(不经意间,我会从这里删除它,但问题仍然存在。你能显示更多的代码吗,因为它对我是有效的。我在正确的单元格中得到了正确的公式。当然,斯科特。添加了专门用于MS Excel部分的代码…无需显示所有MS Access特定的代码。请注意,我使用的是“偏移量”与实际定义的单元格范围相比。我想如果我可以让定义的单元格范围正常工作,我也可以修改它的偏移量。您是否尝试过插入并单步执行,以确保案例按应有的方式启动,并且您没有输入错误?