gpt4 book ai didi

vba - 循环遍历集合的成员,如何获取成员的 key ?

转载 作者:行者123 更新时间:2023-12-04 21:22:41 26 4
gpt4 key购买 nike

所以我必须将一堆微调器对象移动到一组单元格旁边。

对于每个微调器,我需要运行这些语句

Worksheets("Serial").spnAspect.Left = Worksheets("Serial").Range("I12").Left - Worksheets("Serial").spnAspect.Width
Worksheets("Serial").spnAspect.Top = Worksheets("Serial").Range("I12").Top + Worksheets("Serial").Range("I12").Height / 2 _
- Worksheets("Serial").spnAspect.Height / 2

所以我想让它更整洁,所以我做了以下子。
我在这里遇到的唯一问题是如何告诉它每个微调器与哪个单元格对齐。这是“I12”,在每次迭代中都应该是集合中 thisControl 的键。
Sub MoveSpinners()

Dim myControls As New Collection
Dim thisControl As Object
Dim mySheet As Worksheet

myControls.Add Worksheets("Serial").spnHeight, "I11"
myControls.Add Worksheets("Serial").spnAspect, "I12"
myControls.Add Worksheets("Serial").spnCropleft, "I13"
myControls.Add Worksheets("Serial").spnCropRight, "I14"
myControls.Add Worksheets("Serial").spnCropTop, "I15"
myControls.Add Worksheets("Serial").spnCropBottom, "I16"

Set mySheet = Worksheets("Serial")

For Each thisControl In myControls

thisControl.Left = mySheet.Range("I12").Left - thisControl.Width
thisControl.Top = mySheet.Range("I12").Top + thisControl.Height / 2 _
- thisControl.Height / 2
Next

End Sub

这与 Get the key of an item on a Collection object 相同的问题,在这种情况下,答案是“改用字典对象”,但在我的情况下,它不起作用,因为它比复制粘贴相同的行更整洁

我正在考虑的其他选择是
fMoveSpinner(thisSpinner 作为对象,myDestination 作为范围)但我希望保持这个小的 MoveSpinner 子例程自包含。

如果你有更好的主意,我会很高兴听到它!

最佳答案

我重构了您的代码以使用脚本字典。对我来说它看起来很整洁!

脚本字典的键和项都可以是对象。在这里,我将控件存储为键,将范围存储为项目。通过这种方式,当您访问某个键控件时,您可以轻松获取项目范围作为引用。

之前和之后

enter image description here

代码

Sub MoveSpinners2()

Dim myControls As Object
Dim thisControl As Object
Dim mySheet As Worksheet
Dim x As Long

Set myControls = CreateObject("Scripting.Dictionary")

With Worksheets("Serial")

myControls.Add .spnHeight, .Range("I11")
myControls.Add .spnAspect, .Range("I12")
myControls.Add .spnCropleft, .Range("I13")
myControls.Add .spnCropRight, .Range("I14")
myControls.Add .spnCropTop, .Range("I15")
myControls.Add .spnCropBottom, .Range("I16")

End With

For Each thisControl In myControls

thisControl.Left = myControls(thisControl).Left - thisControl.Width
thisControl.Top = myControls(thisControl).Top + thisControl.Height / 2 _
- thisControl.Height / 2
Next

End Sub

关于vba - 循环遍历集合的成员,如何获取成员的 key ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39281061/

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