【问题标题】:Evalute the string name as object where name is dynamically given during runtime in Excel VBA将字符串名称评估为对象,其中名称在 Excel VBA 运行时动态给出
【发布时间】:2018-05-28 18:19:32
【问题描述】:

我有一个用户表单,用户将在其中选中复选框,该复选框将被复制到 Excel 工作表中。打开用户窗体时,它会检查 Excel 表中的数据,当单击用户窗体上的应用按钮时,用户窗体数据将被放置在 Excel 表中。

CheckBox 对象会像 -

UserFrom Name : Config
CheckBox Names : B1M101, B1M102, B1M103 (will be supplied dyanmically)

这是我的工作,(不工作) -

For i2 = 1 To 99
        ModuleN = "B1M10"+i2
        BeckDIE = "Config." + ModuleN
        BeckDIV = "Config." + ModuleN
        ExIntCellE = Sheets("Internal").Cells(RowStart + i2, EnableModify)
        ExIntCellV = Sheets("Internal").Cells(RowStart + i2, ValueModify)
        BeckDIE.Enabled = ExIntCellE.Value  'Getting Compile Error Here
        BeckDIV.Value = ExIntCellV.Value    'Getting Compile Error Here
Next i2

所以,我正在尝试将 Excel 工作表“内部”中的值复制到用户窗体中的复选框。但是当我执行这段代码时,我得到了编译器错误:执行期间无效的限定符错误 -

BeckDIE.Enabled = ExIntCellE.Value
BeckDIV.Value = ExIntCellV.Value

如何将 Excel 工作表单元格值分配给动态创建的 CheckBox ObjectName 作为字符串?

我尝试通过仅将字符串名称作为对象或整个名称执行来执行许多表单,例如 Application.Evaluate 或 Eval 函数 -

Application.Evaluate(BeckDIE).Enabled = False
Eval(BeckDIE).Enabled = False
Application.Evaluate(BeckDIE + ".Enabled") = False
Eval(BeckDIE + ".Enabled") = False

但是,没有运气。它给出了错误。

【问题讨论】:

  • 您的问题是什么?你一个都没问。 • 另外(抱歉,我不得不说)“不工作” 是您可以使用的最糟糕的错误描述。请始终包括您遇到的错误以及在哪一行。如果您没有收到错误,请说明您的代码实际执行的操作与您期望执行的操作。
  • @Pᴇʜ,对不起,我还没有完成问题,现在我已经更新了
  • 复选框是在工作表上创建的吗?然后你可以使用类似Worksheets("Sheet1").Shapes("CheckBoxName").OLEFormat.Object.Caption = "aaa" 的东西。如果 CheckBox 在用户窗体上,请使用 Controls("CheckBox1").Caption 通过其名称访问它:例如。 Controls(BeckDIE).Caption
  • @Pᴇʜ 不,复选框是在用户窗体上创建的
  • 查看我评论的第二部分。

标签: vba excel


【解决方案1】:

正如@PEH 所建议的,遵循代码对我有用 -

For i2 = 1 To 99
        ModuleN = "B1M10"+i2
        BeckDIE = ModuleN
        BeckDIV = ModuleN
        ExIntCellE = Sheets("Internal").Cells(RowStart + i2, EnableModify).Value
        ExIntCellV = Sheets("Internal").Cells(RowStart + i2, ValueModify).Value
        Config.Controls(BeckDIE).Enabled = ExIntCellE
        Config.Controls(BeckDIV).Value = ExIntCellV
Next i2

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-12-17
    • 2014-06-04
    • 1970-01-01
    相关资源
    最近更新 更多