【发布时间】:2013-12-04 07:38:48
【问题描述】:
我想知道这是否可行。我很确定不是,但想看看是不是,其他人可能知道怎么做。我正在使用 Excel 2010,一切都是用 VBA 完成的。我想做的是设置一个具有最小宽度大小的 ComboBox,然后如果键入的数据变得比 ComboBox 的长度长,则设置 AutoSize。
好的,让我澄清一些我将被问到的误解或问题,例如我为什么要允许用户输入 ComboBox。在另一张表上,除了 ComboBox 所在的表之外,我还有一个项目列表。在这里输入项目时,ComboBox 会填充新项目,我还让它按字母顺序对列表进行排序,并且在添加它们时它也会对它们进行拼写检查。
然后我有代码来检查每个单元格中的最长文本长度,并且 ComboBox 将调整到其列表中最长的文本长度,因此可以在下拉列表中完全阅读。
我还希望用户能够在 ComboBox 中键入尚未在列表中的项目。该列表仅包含最常用的项目,但通常需要输入其他杂项。我不希望将杂项添加到 ComboBox 内的列表中,所以我只希望用户能够在 ComboBox 内输入数据,但如果经常使用,他们可以将其添加到另一个列表中表。
如果有人想知道,当用户输入数据时,我确实对 ComboBox 进行拼写检查。我所做的只是使 ComboBox 超过的单元格等于 ComboBox 停用时 ComboBox 中的文本 (LostFocus) ,然后我对该单元格进行拼写检查,然后使 ComboBox 等于刚刚进行拼写检查的单元格。
无论如何,如前所述,我确实使用代码将 ComboBox 的宽度设置为列表中最长的项目。有没有一种方法可以以某种方式将 ComboBox 的最小宽度设置为这个大小,但是当用户在其中输入数据时宽度会增加,变得比框当前设置的更长?我猜如果我在用户完成输入后(当 ComboBox LostFocus 时)调整它,这将很容易做到,但是在他们输入时可以做到这一点吗?设置 AutoSize 将不起作用,因为它会忽略列表中最长项目的大小,并缩小到几乎没有,从而无法看到列表中的项目。 AutoSize 的另一个问题是您在键入时无法读取列表中的项目。就像您在键入时一样,它会在您键入时预填充列表中的项目,但使用 AutoSize 时无法读取预填充的项目。
【问题讨论】:
标签: excel vba combobox autosize