Excel 2010 VBA:下拉组合的自动宽度

Excel 2010 VBA:下拉组合的自动宽度,excel,vba,drop-down-menu,combobox,excel-2010,Excel,Vba,Drop Down Menu,Combobox,Excel 2010,在Excel 2010中,我有一个带有下拉组合的工作表。该组合不是活动的X,而是一个窗体控件。组合从表中获取其值,并且该表由vba宏重新填充,因此值的长度可以更改 在更新表中的值之后,我想将组合的宽度重新调整为最长值的宽度。我找了很多,但找不到怎么做。我找到了一些例子,但我不知道如何将它们翻译成我的组合。例如,以下代码取自: 将被翻译成如下内容: Dim iWidth As Double Dim mycombo as DropDown Set mycombo = ActiveSheet.Dro

在Excel 2010中,我有一个带有下拉组合的工作表。该组合不是活动的X,而是一个窗体控件。组合从表中获取其值,并且该表由vba宏重新填充,因此值的长度可以更改

在更新表中的值之后,我想将组合的宽度重新调整为最长值的宽度。我找了很多,但找不到怎么做。我找到了一些例子,但我不知道如何将它们翻译成我的组合。例如,以下代码取自:

将被翻译成如下内容:

Dim iWidth As Double 
Dim mycombo as DropDown
Set mycombo = ActiveSheet.DropDowns("combo")
mycombo.AutoSize = True     ' <<<< no 'AutoSize' property in DropDown class
iWidth = 0 

For i = 0 To mycombo.ListCount - 1 
    mycombo.ListIndex = i 
    If iWidth < mycombo.Width Then 
        iWidth = mycombo.Width 
    End If 
Next 

mycombo.Width = iWidth 
mycombo.AutoSize = False    ' <<<< no 'AutoSize' property in DropDown class
mycombo.ListCount = 0 

但是DropDown类中没有“AutoSize”属性。

如果您的下拉数据如您所说是从表中提取的,那么您所需要做的就是自动调整该表列的大小,并从中获取宽度,在末尾添加+20位以允许下拉框。如果信息来自C列,请参见下面的示例

Columns("C:C").EntireColumn.AutoFit
x = Columns("C:C").Width
mycombo.Width = x + 20

解决方案有两个问题:1。它要求组合的字体大小与表的字体大小相同,它们看起来大小不同;2.如果调整组合栏的大小,则该栏中的所有单元格都将受到影响,并要求将组合形状配置为适合单元格。好的,表单控件不能根据其所在的单元格调整大小,只能移动,不调整大小,不移动或调整大小。字体大小可能是一个问题,但如果使用VBA获取两者的字体大小,则可以按相同的因子缩放x。唯一的问题,你们并没有提到,但我刚刚想到的是字体脸是不同的,在测试中,使用.TextFrame.Characters.font.Size在下拉列表中给出NULL。尽管如此,我们还是可以将下拉列表的高度作为一个合适的表示
Columns("C:C").EntireColumn.AutoFit
x = Columns("C:C").Width
mycombo.Width = x + 20