用accessvba将公式写入Excel

用accessvba将公式写入Excel,vba,ms-access,excel,Vba,Ms Access,Excel,我想在“A1”中插入一些文本“ABC”,并在“B1”中插入一个if语句。但是,我只插入了第一个条目“ABC”,然后在formula1c2“对象不支持此属性或方法”处出现错误。我不确定我是否正确使用了R1C2。我假设它代表第1行第2列,有人能帮我吗 Dim Excel_App As Object Dim strExcel As String Set Excel_App = CreateObject("Excel.Application") Excel_App.Visible = True Exc

我想在“A1”中插入一些文本“ABC”,并在“B1”中插入一个
if
语句。但是,我只插入了第一个条目“ABC”,然后在
formula1c2“对象不支持此属性或方法”
处出现错误。我不确定我是否正确使用了
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 

公式1c1
是如何编写公式的方法

公式
指的是在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 

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

您需要使用
Workbook.WorkSheet.Range
语法引用
单元格

因此,首先您需要指定您正在使用的工作簿,在您的情况下,它是由语句
Excel\u 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""" & ")"

@user1090656->如果它满足您的需求,请将其标记为已回答,以便其他人受益!另外,请看我的最新答案。这可能会让你受益匪浅。@user1090656->我又编辑了一次。我忘记参考工作表了!:(关于表格/列表的公式如何。当前有一个类似于“=[@oversince]/SUM([oversince])”的列表公式,其中“oversince”是Excel列表中的标题。它给出了错误1004-应用程序定义或对象定义错误。字符串中有什么我应该转义的吗?您愿意设置NamedRange/表吗?将信息从访问转移到NamedRange/表会容易得多,这样,如果范围位置移动,您就不必去输入输出逻辑并更改所有行/列位置