【问题标题】:Same Combo Box on different sheets不同工作表上的相同组合框
【发布时间】:2014-11-09 15:51:37
【问题描述】:
我想这可能适用于 Excel 中的任何Form 控件。我有一个从ControlData 表中获取值的组合框。我在另一个工作表中创建了一个Combo Box,它引用了列表值所在的ControlData 工作表的单元格。
我可以将Combo Box 对象复制到不同的工作表上,但是当我在一张工作表上更改该对象的属性(例如,更改值的来源范围)时,它只会在我更改的工作表上更改属性。我想普遍改变属性,所以我只需要做一次。
我该怎么做?
【问题讨论】:
标签:
excel
combobox
excel-2013
vba
【解决方案1】:
但是当我在一张纸上更改该对象的属性(例如,更改值的来源范围)时,它只会在我更改属性的纸上发生变化。
您不能直接更改一个控件的属性并期望该控件的其余部分的属性自动更改。如果它们都引用同一个范围,那么您在 范围 中所做的任何更改都将反映在其余部分而不是对象属性中。
话虽如此...是否可以更改一个属性并期望将其延续到其余部分?
是的。 catch 是您必须为此使用 VBA。
要实现这一点,您必须编写一个单独的宏,该宏将遍历所有工作表中的所有组合框,然后更改属性。
在下面的示例中,我将只更改一个属性。剩下的事情你必须自己处理。
Sub Sample()
Dim ws As Worksheet
Dim shp As Shape
For Each ws In ThisWorkbook.Sheets
'~~> Loop through all the sheets
For Each shp In ws.Shapes
'~~> Since you copied the combo across,
'~~> they will have the same name. Change as applicable
If shp.Name = "Drop Down 1" Then
'~~> Set their range
shp.ControlFormat.ListFillRange = "Sheet1!A1:A20"
End If
Next
Next ws
End Sub