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