excel - 当函数名称位于单元格中时如何调用 Excel VBA 函数

标签 excel vba

我有一个 XLS,可以检索动态生成的报告列表:

    B  |   C  |   D  |   E  |   F  |   G         |   H  |   I  |   J
1   1  |  Bob |Jones |bjones| rep 1|Sales Report | Desc.|   X  |  fnGenerateSalesReport
2   1  |  Bob |Jones |bjones| rep 2|Revenue Rep. | Desc.|   _  |  fnGenerateRevenueReport
3   1  |  Bob |Jones |bjones| rep 3|Customer List| Desc.|   _  |  fnGenerateCustReport
4   1  |  Bob |Jones |bjones| rep 4|Stock Report | Desc.|   _  |  fnGenerateStockReport

用户在他们希望生成的报告(第一列)旁边标记 X,然后按“生成”按钮。如何根据用户的选择运行相关功能。相关函数的名称(每个报告一个函数)列在报告列表的特定列(Col J)中(见下文)。

debug.print 行,我希望它使用 c.Offset(0, 1).Value 中保存的动态值来调用函数

Dim ws As Worksheet, rng As Range, stRows As Long
Dim c As Range

Set ws = Sheets("AVAILABLE REPORTS")

Set rng = ws.Range("B12:B12")
Set rng = ws.Range(rng, rng.End(xlDown))
stRows = rng.Rows.Count

Set rng = ws.Range("I12:I12")
Set rng = ws.Range("I12:I" & 11 + stRows)


For Each c In rng.Cells
    If c.Value = "X" Or c.Value = "x" Then
       Debug.Print "> [" & c.Value & " (" & c.Offset(0, 1).Value & ")]"
    End If
Next

最佳答案

For Each c In rng.Cells
    If c.Value = "X" Or c.Value = "x" Then
       CallByName myReportGenerator, "GenerateReport", vbMethod, c.Offset(0, 1).Value
    End If
Next

注意:我假设 myReportGenerator 是一个类的实例,该类包含带有 1 个参数的 GenerateReport 方法。

编辑:如果它适合您,请将函数放入工作表中(例如 Sheet1)。
CallByName Sheet1, c.Offset(0, 1).Value, vbMethod

假设 c.Offset(0, 1).Value 包含方法名称,该方法名称是 Sheet1 内的 public 方法.

EDIT2:假设您已将此方法放入名为 class1 的类中。 这是您要做的事情

dim reportHelper as Class1
set reportHelper = new Class1

CallByName reportHelper, c.Offset(0, 1).Value, vbMethod

关于excel - 当函数名称位于单元格中时如何调用 Excel VBA 函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12621577/

相关文章:

excel - 为什么在使用 powershell 将 csv 文件转换为 excel 时出现空值表达式错误?

mysql - Csv 希伯来文文本顺序不正确

java - excel中如何找出合并单元格下对齐的单元格

vb.net - 代码无响应

vba - 具有特殊字符 "/"的对象在 GetObject 中产生自动化错误

excel - ActiveX 按钮更改选定图表的大小

如果单元格以 Excel 条件格式行开头

excel - Openrefine:以可读的方式将数据从文本方面复制到 excel 中?

vba - 限制多选列表框中的选择数

VBA 在每个循环中插入工作表名称