【问题标题】:ActiveX properties control in VBAVBA 中的 ActiveX 属性控件
【发布时间】:2019-06-20 16:24:01
【问题描述】:

我想管理工作表上许多 ActiveX 控件的 ActiveX 属性(例如 image1.picture 或其他类似属性)。

这是否可能通过 Excel VBA 代码使用 OLEobjects 或 Shapes 或任何其他接受在代码中具有变量名称的对象,以便该变量名称可以通过 For 循环更改,按顺序复制 ActiveX 的所有名称我要格式化的控件?

我正在尝试使用 VBA 代码将属性分配给工作表中的 Activex 控件。 ActiveX 控件是工作表中的许多标签和图像,它们具有连续的名称(即 Image1、Image2、...、Label1、Label2 等)。

我想使用 For 循环(For i = 1 到 n),因此我可以根据特定索引 (i) 为工作表中的每个 Image(i) 和 Label(i) 分配特定属性。

我不能使用 OLE 对象或形状,因为它们不支持我想要分配的属性。

With ActiveSheet.oleobjects(variable_name)
    .Width = variable_width               <----- OK, this works
    .Height = variable_height             <----- OK, this works
    .BackStyle = fmBackStyleTransparent   <----- Doesn't work
    .BorderStyle = fmBorderStyleNone      <----- Doesn't work
    .Picture = LoadPicture(path_filename) <----- Doesn't work
End With

不支持.Backstyle.Borderstyle.Picture,错误信息为

“运行时错误 438:对象不支持此属性”

我如何使用一个可以用变量 (variable_name) 表示名称的对象来管理这些属性,从而允许仅使用 For 循环在工作表中分配这么多 ActiveX 控件的属性,避免键入所有它们VBA 代码中的名称?

【问题讨论】:

  • ActiveSheet.oleobjects(variable_name).Object.BackStyle 等应该可以工作

标签: excel vba activex


【解决方案1】:

您设置的那些属性不直接属于 OLEobject,而是属于它的Object 属性:

With ActiveSheet.oleobjects(variable_name)
    .Width = variable_width               
    .Height = variable_height             
    .Object.BackStyle = fmBackStyleTransparent   
    .Object.BorderStyle = fmBorderStyleNone     
    .Object.Picture = LoadPicture(path_filename) 
End With

【讨论】:

  • 太好了,非常感谢蒂姆·威廉姆斯。你解决了我的问题,并为我省去了很多并发症!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-09-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-03-08
相关资源
最近更新 更多