gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-02 10:17:09 24 4
gpt4 key购买 nike

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

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com