我有一个 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/