【问题标题】:How to loop through similar object in VBA如何遍历VBA中的类似对象
【发布时间】:2014-09-07 00:40:45
【问题描述】:

我在 VBA 中有一个用户窗体,其中包含一些图片。我需要遍历 15 张图片,这些图片的名称如下:

imm1, imm2, ...,imm15

我为图片创建路径:

dir1 = "c:\..\pi1.jpg"
...
dir15 = "c:\..\pi15.jpg"

我想创建一个像这样的循环:

    For i = 1 To 15
    (imm & i).Visible = True
   (imm & i).Picture = LoadPicture(dir & i)
    Next i

正确的做法是什么?

【问题讨论】:

  • 请使用FSO 来组合路径和文件名,而不是&。更多详情here

标签: vba loops for-loop userform


【解决方案1】:

您可以使用它在用户窗体的Controls 属性中的名称来引用每个图像,如下所示:

Public Sub VisibleImages()

Dim i As Integer

For i = 1 To 15
    Me.Controls("imm" & i).Visible = True
Next i

End Sub

注意:如果要在用户表单代码模块之外使用该过程,您可能需要将Me 更改为用户表单的名称。

【讨论】:

  • 感谢您的建议。无论如何,稍后我需要创建一个循环,如:im1.Picture = LoadPicture(dir1) im2.Picture = LoadPicture(dir2) im3.Picture = LoadPicture(dir3) im4.Picture = LoadPicture(dir4) im5.Picture = LoadPicture(dir5) im6.Picture = LoadPicture(dir6) 所以我还需要循环 (dir & i)
  • 用完整的问题更新您的问题。我提供的答案解决了你的问题,但如果你需要更多,你需要更新它。
  • 对不起,我坚持我的两个问题都有答案,我已经更新了
【解决方案2】:

我很喜欢这个语法:

Private Sub CommandButton1_Click()
    Dim cCont As Control

    For Each cCont In Me.Controls
        If TypeName(cCont) = "Image" And VBA.Left$(cCont.Name, 3) = "imm" Then
           cCont.Visible = True
           cCont.Picture = LoadPicture("c:\..\pi" & VBA.Right$(cCont.Name, Len(cCont.Name) - 3) & ".jpg")
        End If
    Next cCont
End Sub

【讨论】:

  • 我打算在我的回答中采用这种方法,但从发布的代码来看,该代码针对的是特定图像(以 imm 为前缀)而不是用户表单中的每个图像
  • 我已将其更新为仅获取 imm 前缀并加载相关图片。
猜你喜欢
  • 2014-11-04
  • 2022-11-14
  • 2015-06-14
  • 2021-11-30
  • 1970-01-01
  • 2014-09-08
  • 1970-01-01
  • 2022-01-24
  • 1970-01-01
相关资源
最近更新 更多