-1

VBA を使用して、最初のワークシートのセルにある 2 番目のワークシートのテーブルの列を合計しようとしています。.Formula プロパティを使用して数式を挿入しようとしましたが、セルが空白のままです。

この質問では、テーブルが Worksheet("Data") にあり、"Table1" という名前であると仮定します。問題の列は [APAC] です。xlsheet はコードの前半で定義されており、期待どおりに動作することが確認されています。これを念頭に置いて、私が使用した数式を設定する VBA は次のとおりです。

xlsheet.Range("C8").Formula = "=Sum(Table1[APAC])"

上記の式は、セル自体に手動で入力すると魅力的に機能しますが、何らかの理由で VBA を介してこれを行うことは認められていません。

.FormulaR1C1 プロパティを使用しようとしましたが、同じ結果が得られました。

Table を使用することで、計算のためにテーブル列全体を簡単に参照して、VBA を介してその中に格納されているデータを要約できることを望んでいましたが、それは気に入らないようです。他の誰かがこのエラーに遭遇しましたか、または回避策/解決策がありますか? 前もって感謝します!

私が言及するのを忘れたことが1つあります。それはおそらく言及すべきBIGアイテムです. MS Access 2010 からデータを生成し、MS Access VBA を使用して Excel 出力をフォーマットしています。2010 Excel アプリケーションのレイト バインドを除いて、Excel で使用される VBA はほとんど同じです。

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
4

1 に答える 1

-1

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
于 2016-09-12T21:03:29.740 に答える