通过Access VBA将公式写入Excel中

问题描述:

我想在“A1”中插入一些文本“ABC”,并在“B1”中插入以下单元格if语句。但是,我只获得插入的第一个条目“ABC”,然后在FormulaR1C2 "Object doesn't support this property or method"处发生错误。我不确定我是否正确使用R1C2。我假设它代表第1行第2列,有人可以帮助我。通过Access VBA将公式写入Excel中

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 
+0

你愿意设置根据NamedRange /表?将信息从Access转移到NamedRange/Table会更容易,这样,如果Range位置移动,则不必进入输出逻辑并更改所有Row/Col位置 – GoldBishop

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 
+0

非常感谢您的工作如预期。 – KSM

+0

@ user1090656 - >如果满足您的需求,请将其标记为已回答,以便其他人可以获益!另外,请看我最新的答案。这可能会使你受益良多。 –

+1

@ user1090656 - >我再次编辑。我忘了参考工作表! :( –

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""" & ")"