【问题标题】:Paste excel formula (excel format) in a cell using excel VBA?使用excel VBA将excel公式(excel格式)粘贴到单元格中?
【发布时间】:2017-04-18 18:34:22
【问题描述】:

如何仅在 excel 公式格式中将大型 excel 公式插入或粘贴到特定单元格中。我的项目有很大的excel表来计算没有。剩余天数,它与当前日期和时间相关联。每当我从数据输入表单提交数据时,必须在列中插入公式。它会自动收集当前工作表中不同单元格的值并进行计算。
但是在这里,我在公式行即双引号“”处收到“编译错误,预期语句结束”。

我可以直接在 excel 中写入并拖动

我可以为上述计算编写 vba 代码,但由于我的项目要求,我必须插入公式。

有没有办法插入公式????我正在使用 excel 2016

Set Fcell = formulaWks.Range("O7")

'formula = "=$A1+$B1"  ' example for testing
Formula = "=IF(YEAR(NOW())=$W$3,IF(ISBLANK($G7),"",IFERROR(IF(DATEDIF(TODAY(),$N7,"y")=0,"",DATEDIF(TODAY(),$N7,"y")&" y ")&IF(DATEDIF(TODAY(),$N7,"ym")=0,"",DATEDIF(TODAY(),$N7,"ym")&" m ")&IF(DATEDIF(TODAY(),$N7,"md")=0,"",DATEDIF(TODAY(),$N7,"md")&" d"),"wrong date")),"Package completed")"
Fcell = ActiveCell.formula

【问题讨论】:

  • 公式中的 "y""ym""m""md" 是什么?他们是Integer 吗? Long 变量已定义?
  • “y”、“ym”、“m”和“md”是“年”“月”的符号
  • 检查下面的答案,看看它是否有效

标签: excel excel-formula vba


【解决方案1】:

试试下面的代码,它将适用于您想要测试的基本公式。

Option Explicit

Sub InsertFormula()

Dim formulaWks As Worksheet
Dim Fcell As Range
Dim FormulaString   As String

' modify "Sheet1" to your sheet's name     
Set formulaWks = Worksheets("Sheet1")
Set Fcell = formulaWks.Range("O7")

FormulaString = "=$A1+$B1"  ' example for testing
Fcell.Formula = FormulaString

End Sub

关于您的“LONG”公式,下面的公式字符串通过:

FormulaString = "=IF(YEAR(NOW())=$W$3,IF(ISBLANK($G7)," & Chr(34) & Chr(34) & ",IFERROR(IF(DATEDIF(TODAY(),$N7," & Chr(34) & "y" & Chr(34) & ")=0," & Chr(34) & Chr(34) & ",DATEDIF(TODAY(),$N7," & Chr(34) & "y" & Chr(34) & ")&" & Chr(34) & " y " & Chr(34) & ")" & _
                "&IF(DATEDIF(TODAY(),$N7," & Chr(34) & "ym" & Chr(34) & ")=0," & Chr(34) & Chr(34) & ",DATEDIF(TODAY(),$N7," & Chr(34) & "ym" & Chr(34) & ")&" & Chr(34) & " m " & Chr(34) & ")" & _
                "&IF(DATEDIF(TODAY(),$N7," & Chr(34) & "md" & Chr(34) & ")=0," & Chr(34) & Chr(34) & ",DATEDIF(TODAY(),$N7," & Chr(34) & "md" & Chr(34) & ")&" & Chr(34) & " d" & Chr(34) & ")," & _
                Chr(34) & "wrong date" & Chr(34) & "))," & Chr(34) & "Package completed" & Chr(34) & ")" 

Debug.Print FormulaString ' for debug, to see the Formula string in the immediate window

注意:“长”公式的最终版本已由 YowE3K 编辑 - 如果它不起作用,请怪我(即 YowE3K)而不是 Shai。

【讨论】:

  • DATEDIF 函数的第三个参数是一个单位类型,所以DATEDIF(TODAY(),$N7," & ym & ") 无疑意味着是DATEDIF(TODAY(),$N7,"ym")(其中,带有双双引号将是DATEDIF(TODAY(),$N7,""ym"")) .
  • @YowE3K 可以随意编辑“LONG”公式,我无法对其进行测试,因为我在工作的机器上的 Excel 中没有 DATEDIF
  • 非常感谢。它的工作......经过一些小的修改。并感谢您为“”问题提供“Chr(34)”的想法。
【解决方案2】:

您需要首先通过在字符串中添加两次双引号来转义字符串中的双引号 - ISBLANK($G7),""""

然后使用这样的公式

Range("O7").Formula = "[Your formula with escaped double quotes]" 

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-02-07
    • 1970-01-01
    • 1970-01-01
    • 2022-01-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多