创建和执行公式的 VBA 函数

问题描述 投票:0回答:1

我有一个 Excel 工作簿,用于记录时间和出勤情况。

每个工资周期都记录在工作表上。我需要计算员工今年“使用或失去”休假的小时数。

员工最多可以将 240 小时的年假结转到下一年。

我有一个有效的公式,但对于每张工作表,我都必须更新公式。我正在努力避免这样做。

我创建了一个以字符串形式返回公式的函数。

Function createFormula() As String
    createFormula = "=SUM(" & "'" & ActiveSheet.Name & ":" & Sheets(Sheets.Count).Name & "'" & "!I24)" & "+I26-240"
End Function

这会返回一个看起来像这样的字符串

=SUM('PP03:PP26'!I24)+I26-240

看来我走在正确的轨道上,但我需要执行该函数。我想我需要打电话给

Application.Evaluate

我将公式修改如下,但它仍然返回一个字符串。

Function createFormula()
    createFormula = "=SUM(" & "'" & ActiveSheet.Name & ":" & Sheets(Sheets.Count).Name & "'" & "!I24)" & "+I26-240"
    Application.Evaluate (createFormula)
End Function

每个时间表都有几个其他计算,涉及从上一张时间表向前调出休假余额。
此继承的时间表的过去迭代具有在每个工作表上更新的公式。除了计算损失或使用休假的问题之外,我能够解决所有这些问题。

每张纸上都有:

上一个发薪期的余额、应计年假、已用年假以及结转到下一个发薪期的总计

因为在每张表格上,我都知道一年中还剩多少个发薪期,如果应计金额是一个常数,那么很容易计算使用情况或失去余额,但事实并非如此。至少不总是如此。我在每张表格上都有公式,用于预先填充该工资期间应计的休假金额。所以我需要做的是迭代所有工作表并将这些值相加。将其添加到总计中,减去 240,这就是您的使用或损失。

excel vba excel-formula
1个回答
1
投票

我尝试写评论,但太长了。当您在工作表中使用函数时,它本身就是一个公式。由于它返回字符串公式,因此它已经被评估。这就是您使用以下几行编写的内容:

createFormula = "=SUM(" & "'" & ActiveSheet.Name & _
  ":" & Sheets(Sheets.Count).Name & "'" & "!I24)" & "+I26-240"

如果您想返回该值,那么您应该将其分配给您的函数,如下所示:

Function createFormula()

  createFormula = "=SUM(" & "'" & ActiveSheet.Name & _
    ":" & Sheets(Sheets.Count).Name & "'" & "!I24)" & "+I26-240"
  createFormula = Application.Evaluate(createFormula)

End Function

这只是回答您的问题,但正如其他人评论的那样,这不是最好的方法。 HTH.

© www.soinside.com 2019 - 2024. All rights reserved.