【问题标题】:Writing formula into Excel through Access VBA通过 Access VBA 将公式写入 Excel
【发布时间】:2012-10-29 23:05:10
【问题描述】:

我想在“A1”中插入一些文本“ABC”和“B1”中的以下单元格if 语句。但是,我只插入了第一个条目“ABC”,然后在FormulaR1C2 "Object doesn't support this property or method" 出现错误。我不确定我是否正确使用了R1C2。我假设它代表第 1 行第 2 列,有人可以帮助我。

Dim Excel_App  As Object
Dim strExcel As String
Set Excel_App = CreateObject("Excel.Application")
Excel_App.Visible = True
Excel_App.Workbooks.Add
With Excel_App
 .Range("A:B").EntireRow.ColumnWidth = 25
 .Range("A2").EntireRow.Font.FontStyle = "Bold"
 .ActiveCell.FormulaR1C1 = "ABC"
  strExcel = "=IF(A1 = """"," & """EMPTY""" & "," & """FILLED""" & ") "
 .ActiveCell.FormulaR1C2 = strExcel
End With 

【问题讨论】:

  • 您愿意设置 NamedRange/Table 吗?将信息从 Access 转置到 NamedRange/Table 会容易得多,这样如果 Range 位置移动,您就不必进入输出逻辑并更改所有 Row/Col 位置

标签: vba ms-access excel


【解决方案1】:

FormulaR1C1是公式的写法。

Formula是指在A1中写一个公式,如=B1+C1

要使用R1C1 表示法编写相同的公式,您可以编写=RC[1] + RC[2]。此外,要在 A1 中写入 =B2+C2,请写入 =R[1]C[1] + R[1]C[2] -> 这样您就可以看到您正在偏移您希望公式从中返回值的列和行。

你想要在你的代码中做的是偏移公式的放置位置,而不是它的计算方式,所以你应该这样写:

.ActiveCell.Offset(,1).Formula = strExcel

实际上,您应该完全摆脱ActiveCell,除非您绝对需要它。

为了更好、更准确地执行,我会这样编写您的代码:

Dim Excel_App As Object
Dim strExcel As String
Dim wkb as Object, wks as Object

Set Excel_App = CreateObject("Excel.Application")
Excel_App.Visible = True
Set wkb = Excel_App.Workbooks.Add
Set wks = wkb.Sheets(1) 'assumes you want first sheet, can modify for sheet index or name

With wks

 .Range("A:B").EntireRow.ColumnWidth = 25 
  'I think this will actually set every row to 25, is that what you want?

 .Range("A2").EntireRow.Font.FontStyle = "Bold"

 .Range("A1").Value = "ABC" 'don't need to write Value, but just to show you the property

  strExcel = "=IF(A1 = """"," & """EMPTY""" & "," & """FILLED""" & ") "

 .Range("B1").Formula = strExcel

End With 

【讨论】:

  • @user1090656 -> 如果满足您的需求,请将其标记为已回答,以便其他人受益!另外,请参阅我的更新答案。它可能会让您受益匪浅。
  • @user1090656 -> 我再次编辑。我忘了参考工作表! :(
  • 表格/列表的公式怎么样。目前有一个类似于“=[@Turnover]/SUM([Turnover])”的列表公式,其中“Turnover”是 Excel 列表中的标题。它给出错误 1004 - 应用程序定义或对象定义的错误。字符串中有什么我应该转义的吗?
【解决方案2】:

FormulaR1C1 是一个属性,它返回以R1C1 公式样式表示的单元格的公式。

您需要使用Workbook.WorkSheet.Range 语法来引用cells

因此,首先您需要指定您正在使用的工作簿,在您的情况下,它是由语句 Excel_App.Workbooks.Add 添加的工作簿。您的新工作簿会自动命名为“Book1”,并自动添加默认数量的工作表,命名为“Sheet1”到“Sheetn”,其中 n 是默认工作表数。

所以你要写入该行的最终代码是

Excel_App.Workbooks(1).Worksheets("Sheet1").Cells(1, 1) = "ABC"
Excel_App.Workbooks(1).Worksheets("Sheet1").Cells(1, 2).Formula = "=IF(A1 = """"," & """EMPTY""" & "," & """FILLED""" & ")"

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-14
    • 2018-03-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-09-09
    相关资源
    最近更新 更多