2013-12-04 4 views
0

Мне было интересно, можно ли это делать или нет. Я уверен, что это не так, но хотелось бы узнать, было ли это так, и кто-то еще мог бы знать, как это сделать. Я использую Excel 2010, и все делается с VBA. То, что я хотел бы сделать, это установить ComboBox с минимальным размером ширины, а затем AutoSize, если введенные данные становятся длиннее длины ComboBox.Установка минимальной ширины ComboBox & AutoSize

ОК, поэтому позвольте мне пояснить некоторые неправильные представления или вопросы, о которых меня будут спрашивать, например, почему я хотел бы разрешить пользователям вводить ComboBox. На другом листе, кроме листа, который включен ComboBox, у меня есть список элементов. Поскольку элементы вводятся здесь, ComboBox заполняется новым элементом, у меня также есть сортировка списка в алфавитном порядке, и это заклинание также проверяет их, поскольку они добавляются.

У меня тогда есть код, который также проверяет длину длинной длины в каждой ячейке, а ComboBox будет иметь размер до самой длинной длины текста в своем списке, поэтому его можно полностью прочитать в раскрывающемся списке.

Я также хочу, чтобы пользователи могли вводить ComboBox для элементов, которых нет в списке. Список предназначен только для самых распространенных предметов, но часто требуется ввести другой материал. Я не хочу, чтобы в ComboBox добавлялись разные вещи, поэтому я просто хочу, чтобы пользователь мог вводить данные в ComboBox, но если он используется много, они могут добавить его в список на другом лист.

В случае, если кто-то задается вопросом, у меня есть проверка орфографии, работающая на ComboBox, когда пользователи вводят данные. Все, что я сделал, это сделать ячейку, что ComboBox больше, чем текст в ComboBox, когда ComboBox отключен (LostFocus), затем я проверю орфографию этой ячейки, а затем сделаю ComboBox равной ячейке, которая была просто проверена орфографией.

В любом случае, как уже упоминалось, у меня есть ширина ComboBox, установленная на самый длинный элемент в списке с помощью кода. Есть ли способ, который я могу каким-то образом сохранить минимальную ширину ComboBox, установленную для этого размера, но тогда ширина будет увеличиваться, когда пользователь вводит данные, и это становится больше, чем то, что в данный момент установлено? Я предполагаю, что это было бы легко сделать, если бы я должен был настроить его после того, как пользователь закончил печатать (когда ComboBox LostFocus), но можно ли это сделать, пока они печатают? Настройка AutoSize не будет работать, потому что он будет игнорировать размер самого длинного элемента в списке и сжиматься почти до нуля, что делает невозможным просмотр элементов в списке. Другая проблема с AutoSize заключается в том, что вы не можете читать элементы в списке по мере ввода. Например, когда вы печатаете, он будет заполнять элементы из списка по мере ввода, но предварительно заполненные элементы не могут быть прочитаны при использовании AutoSize.

ответ

0

Я думаю, что это возможно, я просто понял. ILength - это то, что определяет минимальный размер минимальной ширины по умолчанию, который немного больше размера столбца на другом листе, из которого ComboBox извлекает свои данные. Я просто сделал некоторые базовые вычисления, чтобы понять, что длина (количество символов) текста, введенного в поле примечаний, примерно в 4,5 раза меньше длины по умолчанию. Конечно, 4.5 изменился бы, если бы я использовал шрифт разного размера. Если введенный текст (на основе расчета) становится больше, чем размер по умолчанию, я устанавливаю ComboBox в AutoSize, в противном случае для параметра AutoSize установлено значение False. Затем, когда я очистил данные из поля, у меня просто есть код в кнопке очистки, чтобы вернуть ComboBox к размеру по умолчанию и установить AutoSize в False. Это прекрасно работает.

Private Sub cboNotes_KeyUp(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer) 

Dim iLength As Integer 

iLength = Sheets("Notes").Range("A1").Columns.Width + 20 

If Len(cboNotes.Value) * 4.5 < iLength Then 
    cboNotes.Width = Sheets("Notes").Range("A1").Columns.Width + 20 
    cboNotes.AutoSize = False 
    Exit Sub 
Else 
    cboNotes.AutoSize = True 
    Exit Sub 
End If 

End Sub 
Смежные вопросы