Textbox backcolor in excel vba

Vinay, You would do that like this:

Private Sub TextBox1_Change()
   TextBox1.BackColor = RGB(255, 0, 0)
End Sub

You’ll want to put that in the TextBox1 object (double clicking it will get you there). The color change will be triggered when the value of the text box is changed. If I’ve understudy your question correctly, this should solve your problem. If not, please let me know.

SUPPLEMENT : A breakdown of the code

Private Sub TextBox1_Change() is an event handler. The code inside will run whenever a particular event occurs. In this case, whenever the text inside the TextBox1 changes.
TextBox1.BackColor = RGB(255, 0, 0)

TextBox1 is an object, in this case it is your first texbox which is by default named «TextBox1», but we could use any other object in your form, «TextBox2», «Button1» etc…

.BackColor is a property of TextBox1 (its Back Color). We could set the BackColor property to any valid color, but here I went with red.

RGB stands for Red Green Blue. In this case we set the back of the TextBox to a color equil to 255 (All Red), 0 (with no Green), and 0 (No Blue).

SUPPLEMENT 2
So, based on your last comment, you would be looking to do something like this:

Private Sub TextBox1_Change()
    If TextBox1.Text = "5" Then
        TextBox1.BackColor = RGB(255, 255, 255)
    ElseIf TextBox1.Text = "6" Or TextBox1.Text = "4" Or TextBox1.Text = "5.6" Then
        TextBox1.BackColor = RGB(255, 0, 0)
    End If
End Sub

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
Public rRow         As Long
 
Private Sub CommandButton1_Click()
    Dim X           As String
    Dim wbBook      As Workbook
    Dim cell        As Range
    With Application
        .ScreenUpdating = False
        .DisplayAlerts = False
        .EnableEvents = False
    End With
  
    On Error Resume Next
    Set wbBook = Workbooks("??????.xls")
    If wbBook Is Nothing Then
        Workbooks.Open Filename:="C:UsersSavitskiyKGDesktop"
    Else
    End If
   
    Set cell = Columns(1).find(What:=TextBox1.Text, LookIn:=xlValues)
    If cell Is Nothing Then
        response = MsgBox("Íè÷åãî íå íàéäåíî!" & vbNewLine & "Ïðîäîëæèòü ïîèñê?", vbYesNo)
        If response = vbNo Then
            
    UserForm5.Show
    ThisWorkbook.Windows.Application.Visible = True
    Application.ScreenUpdating = True
 
        End If
    Else
        cell.Activate       
        rRow = cell.Row
    End If
 
 
    X = ActiveCell.Offset(0, 62)
    If X <> 0 Then
        ActiveCell.Range(Cells(1, 2), Cells(X, 500)).Select
    End If
 
    TextBox1.SetFocus
   
    TextBox2.Text = ActiveCell.Offset(, 1).Text
    TextBox3.Text = ActiveCell.Offset(, 2).Text
    TextBox4.Text = ActiveCell.Offset(, 3).Text
    TextBox5.Text = ActiveCell.Offset(, 4).Text
    TextBox6.Text = ActiveCell.Offset(, 5).Text
    TextBox7.Text = ActiveCell.Offset(, 6).Text
    TextBox8.Text = ActiveCell.Offset(, 7).Text
    TextBox9.Text = ActiveCell.Offset(, 8).Text
    TextBox10.Text = ActiveCell.Offset(, 9).Text
    TextBox11.Text = ActiveCell.Offset(, 10).Text
    TextBox12.Text = ActiveCell.Offset(, 11).Text
    TextBox13.Text = ActiveCell.Offset(, 12).Text
    TextBox1.SetFocus
    With Application
        .Calculation = xlCalculationAutomatic
        .DisplayAlerts = True
        .ScreenUpdating = True
        .EnableEvents = True
        .StatusBar = False
    End With
End Sub
Private Sub CommandButton2_Click()
    Cells(rRow, 2) = TextBox2.Text
    Cells(rRow, 3) = TextBox3.Text
    Cells(rRow, 4) = TextBox4.Text
    Cells(rRow, 5) = TextBox5.Text
    Cells(rRow, 6) = TextBox6.Text
    Cells(rRow, 7) = TextBox7.Text
    Cells(rRow, 8) = TextBox8.Text
    Cells(rRow, 9) = TextBox9.Text
    Cells(rRow, 10) = TextBox10.Text
    Cells(rRow, 11) = TextBox11.Text
    Cells(rRow, 12) = TextBox12.Text
    With Sheets("Ëèñò1")
 
   If CheckBox1.Value = True Then
   .Cells(rRow, 13) = "Áåç çàìå÷àíèé"
   End If
   If CheckBox2.Value = True Then
   .Cells(rRow, 13) = "Çàìå÷àíèÿ (ïðåäëîæåíèÿ)"
   End If
   
  
   End With
End Sub
Private Sub CommandButton3_Click()
    ThisWorkbook.Windows.Application.Visible = True
    Application.ScreenUpdating = True
End Sub
Private Sub CommandButton4_Click()
    ThisWorkbook.Windows.Application.Visible = False
End Sub
Private Sub CommandButton5_Click()
    UserForm5.Hide
    ThisWorkbook.Windows.Application.Visible = False
    Application.ScreenUpdating = True
    UserForm2.Show
End Sub
 Private Sub TextBox13_Change()
    If TextBox13.Text = "0" Then
            Me.TextBox1.BackColor = Color.Red
        Else
            If TextBox13.Text = "1" Then
                Me.TextBox1.BackColor = Color.Grean
         
                End If
            End If
End Sub

В Excel мы можем применить функцию условного форматирования для изменения цвета фона в зависимости от значения ячейки, но в этой статье я расскажу о том, как изменить цвет текстового поля на основе значения ячейки или значения в текстовом поле.

Изменить цвет текстового поля на основе значения ячейки с кодом VBA

Изменить цвет текстового поля на основе значения в текстовом поле с кодом VBA


стрелка синий правый пузырь Изменить цвет текстового поля на основе значения ячейки с кодом VBA

Скажем, если значение ячейки в A1 больше, чем значение ячейки в B1, я хочу, чтобы текстовое поле было заполнено красным цветом, напротив, текстовое поле должно быть заполнено желтым цветом. Для выполнения этой работы выполните следующие действия:

1. Вставьте текстовое поле, нажав Застройщик > Вставить > Текстовое поле (элемент управления ActiveX), а затем нарисуйте текстовое поле, см. снимок экрана:

цвет текстового поля документа на основе значения 1

2. Затем щелкните текстовое поле правой кнопкой мыши и выберите Просмотреть код из контекстного меню, чтобы открыть Microsoft Visual Basic для приложений окна, а затем замените исходный код следующим кодом VBA в пустой модуль:

Код VBA: изменить цвет текстового поля в зависимости от значений ячеек:

Private Sub TextBox1_Change()
    If ActiveSheet.Range("A1").Value > ActiveSheet.Range("B1").Value Then
        Me.TextBox1.BackColor = vbRed
    Else
        Me.TextBox1.BackColor = vbYellow
    End If
End Sub

цвет текстового поля документа на основе значения 2

Внимание: В приведенном выше коде TextBox1 это имя текстового поля, которое вы вставили, A1 и B1 — это две ячейки, на основе которых вы хотите изменить цвет текстового поля, измените их по своему усмотрению.

3. Затем сохраните и закройте окно кода и выйдите из Режим дизайна, теперь, если ячейка A1 больше B1, при вводе текста в текстовое поле она будет заполнена красным цветом, а если A1 меньше B1, при вводе значения в текстовое поле она будет заполнена желтым цветом, см. снимок экрана:

цвет текстового поля документа на основе значения 3


стрелка синий правый пузырь Изменить цвет текстового поля на основе значения в текстовом поле с кодом VBA

Если вы хотите изменить цвет текстового поля на основе значения в текстовом поле, например, когда значение в текстовом поле находится между 1 и 10, цвет текстового поля закрашен красным, цвет текстового поля зеленый, если значение находится в диапазоне от 11 до 20, если есть другие значения, цвет текстового поля желтый. Чтобы справиться с этой задачей, примените приведенный ниже код VBA.

1. После вставки текстового поля щелкните его правой кнопкой мыши и выберите Просмотреть код из контекстного меню, чтобы открыть Microsoft Visual Basic для приложений окна, а затем замените исходный код следующим кодом VBA в пустой модуль:

Код VBA: изменить цвет текстового поля в зависимости от значения в текстовом поле:

Private Sub TextBox1_Change()
    On Error Resume Next
    Select Case TextBox1.Value
        Case 1 To 10:
            TextBox1.BackColor = vbRed
        Case 11 To 20:
            TextBox1.BackColor = vbGreen
        Case Else:
            TextBox1.BackColor = vbYellow
    End Select
End Sub

цвет текстового поля документа на основе значения 4

Внимание: В приведенном выше коде Текстовое поле1 — это имя текстового поля, которое вы вставляете, и вы можете изменить значения и цвет фона в коде на свои собственные.

2. Затем сохраните и закройте окно кода и выйдите из Режим проектированияТеперь, если вы введете значение от 1 до 10 в текстовое поле, его цвет фона станет красным, значение от 11 до 20, цвет фона текстового поля станет зеленым, другие значения станут желтыми, как показано на следующем снимке экрана:

цвет текстового поля документа на основе значения 5


Статьи по теме:

Как вставить картинку в текстовое поле?

Как установить значение по умолчанию в текстовом поле?

Как разрешить ввод только чисел в текстовое поле?

Как применить проверку орфографии в текстовом поле?


Лучшие инструменты для работы в офисе

Kutools for Excel Решит большинство ваших проблем и повысит вашу производительность на 80%

  • Снова использовать: Быстро вставить сложные формулы, диаграммы и все, что вы использовали раньше; Зашифровать ячейки с паролем; Создать список рассылки и отправлять электронные письма …
  • Бар Супер Формулы (легко редактировать несколько строк текста и формул); Макет для чтения (легко читать и редактировать большое количество ячеек); Вставить в отфильтрованный диапазон
  • Объединить ячейки / строки / столбцы без потери данных; Разделить содержимое ячеек; Объединить повторяющиеся строки / столбцы… Предотвращение дублирования ячеек; Сравнить диапазоны
  • Выберите Дубликат или Уникальный Ряды; Выбрать пустые строки (все ячейки пустые); Супер находка и нечеткая находка во многих рабочих тетрадях; Случайный выбор …
  • Точная копия Несколько ячеек без изменения ссылки на формулу; Автоматическое создание ссылок на несколько листов; Вставить пули, Флажки и многое другое …
  • Извлечь текст, Добавить текст, Удалить по позиции, Удалить пробел; Создание и печать промежуточных итогов по страницам; Преобразование содержимого ячеек в комментарии
  • Суперфильтр (сохранять и применять схемы фильтров к другим листам); Расширенная сортировка по месяцам / неделям / дням, периодичности и др .; Специальный фильтр жирным, курсивом …
  • Комбинируйте книги и рабочие листы; Объединить таблицы на основе ключевых столбцов; Разделить данные на несколько листов; Пакетное преобразование xls, xlsx и PDF
  • Более 300 мощных функций. Поддерживает Office/Excel 2007-2021 и 365. Поддерживает все языки. Простое развертывание на вашем предприятии или в организации. Полнофункциональная 30-дневная бесплатная пробная версия. 60-дневная гарантия возврата денег.

вкладка kte 201905


Вкладка Office: интерфейс с вкладками в Office и упрощение работы

  • Включение редактирования и чтения с вкладками в Word, Excel, PowerPoint, Издатель, доступ, Visio и проект.
  • Открывайте и создавайте несколько документов на новых вкладках одного окна, а не в новых окнах.
  • Повышает вашу продуктивность на 50% и сокращает количество щелчков мышью на сотни каждый день!

офисный дно

Элемент управления пользовательской формы TextBox в VBA Excel. Использование текстового поля для ввода и вывода информации, основные свойства, примеры. Привязка текстового поля к ячейке.

UserForm.TextBox – это элемент управления пользовательской формы, предназначенный для ввода, редактирования и вывода информации в текстовом формате.

Текстовое поле на пользовательской форме

Текстовое поле незаменимо, когда необходимо заполнить пользовательскую форму новой информацией. Например, это может быть ФИО нового сотрудника и его паспортные данные, сумма выручки за день, новый электронный адрес и многое-многое другое.

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

Вводить информацию в TextBox на открытой форме можно не только с помощью клавиатуры, но и вставкой текста из буфера обмена. Когда текстовое поле применяется для ввода пароля, есть возможность отобразить все его знаки замещающим символом, например, звездочкой.

Иногда, если на пользовательской форме используется только одно текстовое поле и кнопка «OK» (или кнопки «OK» и «Отмена»), для ввода информации такую форму можно заменить функцией InputBox, а для вывода информации, когда не требуется редактирование отображаемого текста, – функцией MsgBox.

Свойства текстового поля

Свойство Описание
AutoSize* Автоподбор размера текстового поля. True – размер автоматически подстраивается под длину размещаемой строки. False – размер элемента управления определяется свойствами Width и Height.
AutoTab Включение автоматической табуляции – передачи фокуса следующему элементу управления при достижении максимального числа символов при значениях свойства MaxLenght > 0. True – автоматическая табуляция включена, False – выключена.
ControlSource Ссылка на источник данных для поля TextBox.
ControlTipText Текст всплывающей подсказки при наведении курсора на TextBox.
Enabled Возможность ввода, редактирования, копирования, вставки, удаления текста. True – все перечисленные опции включены, False – выключены (цвет текста в поле становится серым).
Font Шрифт, начертание и размер текста в поле.
Height Высота текстового поля.
Left Расстояние от левого края внутренней границы пользовательской формы до левого края текстового поля.
Locked Запрет ввода, редактирования, удаления текста. True – перечисленные опции запрещены (разрешено выделение и копирование текста), False – перечисленные опции разрешены.
MaxLenght Максимальная длина строки. По умолчанию – 0, что означает – ограничений нет.
Multiline Устанавливает многострочный (True) или однострочный (False) режим ввода-вывода текста.
PasswordChar Задает символ, который будет отображаться при вводе знаков пароля.
TabIndex Определяет позицию элемента управления в очереди на получение фокуса при табуляции, вызываемой свойством AutoTab или нажатием клавиш «Tab», «Enter». Отсчет начинается с 0.
Text** Текстовое содержимое (значение) поля (=Value).
TextAlign Выравнивание текста: 1 (fmTextAlignLeft) – по левому краю, 2 (fmTextAlignCenter) – по центру, 3 (fmTextAlignRight) – по правому краю.
Top Расстояние от верхнего края внутренней границы пользовательской формы до верхнего края текстового поля.
Value** Текстовое содержимое (значение) поля (=Text).
Visible Видимость текстового поля. True – TextBox отображается на пользовательской форме, False – TextBox скрыт.
Width Ширина текстового поля.
WordWrap Актуально при Multiline = True. Переход на новую строку при достижении границы текстового поля. True – переход включен, False – переход выключен.

* При использовании свойства AutoSize в значении True следует учитывать, что автоматическое изменение размеров поля при вводе текста может нарушить дизайн пользовательской формы.
** Text и Value — это два обозначения одного и того же свойства. Если в окне Properties элемента управления TextBox в поле свойства Text начать ввод строки, в поле Value ввод будет дублироваться. И наоборот, при вводе текста в поле свойства Value, дублирование произойдет в поле Text.

В таблице перечислены только основные, часто используемые свойства текстового поля. Все доступные свойства отображены в окне Properties элемента управления TextBox.

Свойства BackColor, BackStyle, BorderColor, BorderStyle отвечают за внешнее оформление текстового поля и его границ. Попробуйте выбирать доступные значения этих свойств в окне Properties, наблюдая за изменениями внешнего вида элемента управления TextBox на проекте пользовательской формы.

Привязка текстового поля к ячейке

Привязать элемент управления TextBox к ячейке на рабочем листе можно двумя способами.

1. В окне Properties элемента управления TextBox в поле свойства ControlSource необходимо указать адрес ячейки:

Окно Properties-TextBox

2. Присвоить свойству ControlSource адрес ячейки в коде VBA Excel:

UserForm1.TextBox1.ControlSource = «C5»

Теперь ячейка C5 активного листа будет привязана к элементу управления TextBox1. При открытии формы текстовое поле будет заполнено значением ячейки C5.

Чтобы наглядно ознакомиться с взаимозависимостью значения ячейки C5 и содержимого текстового поля, разместите на пользовательской форме еще какой-нибудь элемент управления и откройте ее в немодальном* окне:

Sub Test()

UserForm1.TextBox1.ControlSource = «C5»

UserForm1.Show 0

End Sub

Измените значение ячейки C5 и нажмите клавишу «Tab» или «Enter» – изменения будут продублированы в текстовом поле на форме. Измените содержимое поля TextBox1, нажмите клавишу «Tab» или «Enter», передав фокус другому элементу управления, – изменения продублируются в ячейке C5.

Чтобы привязать текстовое поле к ячейке неактивного листа, необходимо в адресе указать имя листа по ярлыку с разделителем «!»:

UserForm1.TextBox1.ControlSource = «Лист2!A3»

Если имя листа содержит пробел, заключите его в одинарные кавычки:

UserForm1.TextBox1.ControlSource = «‘Мой лист’!B6»

Точно также адрес ячейки конкретного листа можно указать непосредственно в окне Properties элемента управления TextBox в поле свойства ControlSource (без парных кавычек).

* Отображение пользовательской формы в немодальном окне позволяет редактировать ячейки на рабочем листе Excel, не закрывая форму.

Примеры использования TextBox

Пример 1
Обмен содержимым между текстовым полем, переменной и ячейкой на рабочем листе:

‘Присвоение текстовому полю значения

‘ячейки A2 и переменной a1

UserForm1.TextBox1.Text = Range(«A2»)

UserForm1.TextBox1.Text = a1

‘Присвоение ячейке B3 и переменной a2

‘значения текстового поля

Cells(3, 2) = UserForm1.TextBox1.Text

a2 = UserForm1.TextBox1.Value

‘Свойства Text и Value элемента

‘управления TextBox равнозначны

Пример 2
Программное создание элемента управления TextBox, размещение его по центру пользовательской формы, добавление всплывающей подсказки и текста по умолчанию.

Предположим, что текстовое поле предназначено для ввода даты, поэтому добавляем соответствующую подсказку, а в качестве текста по умолчанию – текущую дату.

Создаем новую пользовательскую форму с именем UserForm2. Если у вас другое имя формы, это не имеет значения, так как обращаться к ней будем с помощью ключевого слова «Me». Открываем модуль созданной формы и вставляем в него следующий код VBA Excel:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

Private Sub UserForm_Initialize()

Dim myTextBox As Control

‘Создаем новый TextBox и присваиваем его переменной

Set myTextBox = Me.Controls.Add(«Forms.TextBox.1»)

‘Задаем размеры и заголовок пользовательской формы

With Me

  .Height = 100

  .Width = 220

  .Caption = «Форма №2»

End With

‘Присваиваем значения свойствам текстового поля

With myTextBox

  .Width = 100

  .Height = 20

  ‘Left и Top рассчитаны для Excel 2016*

  .Left = 60 5

  .Top = 40 15

  ‘Добавляем всплывающую подсказку

  .ControlTipText = «Введите дату подписания договора»

  ‘Вставляем в поле текущую дату

  .Text = Format(Now, «DD.MM.YYYY»)

  ‘Выравниваем текст по центру

  .TextAlign = 2

End With

End Sub

В результате выполнения кода откроется следующая форма с всплывающей подсказкой при наведении на TextBox курсора:

TextBox с всплывающей подсказкой

* Значения свойств Left и Top рассчитаны для Excel 2016. Вычитаемые числа зависят от толщины границ пользовательской формы, которые в других версиях Excel могут отличаться.

#excel #vba #textbox #backcolor

#excel #vba #текстовое поле #задний цвет

Вопрос:

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

У меня есть следующий код для раскрашивания ячеек на листе в соответствии с датой и с именованными диапазонами для параметров.. и это выполняется с помощью UserForm Initialise()

 Dim cell As Range
      With Range("data_table[Date Test]")
    
     
    For Each cell In Range("data_table[Date Test]")
        If cell.Value < Range("Today") Then
            cell.Interior.ColorIndex = 6
            ElseIf cell.Value >= Range("Today") And cell.Value <= Range("Thirty_Days") Then
            cell.Interior.ColorIndex = 3
            ElseIf cell.Value > Range("Thirty_Days") And cell.Value <= Range("Sixty_Days") Then
            cell.Interior.ColorIndex = 45
            ElseIf cell.Value > Range("Sixty_Days") And cell.Value <= Range("Ninety_Days") Then
            cell.Interior.ColorIndex = 43
            ElseIf cell.Value > Range("Ninety_Days") Then
            cell.Interior.ColorIndex = 18

         End If

    Next cell
    End With
  

Это работает нормально, затем я попробовал следующее, чтобы раскрасить текстовое поле

  Private Sub TextBox47_Change()
    Me.TextBox47.Text = Format(TextBox47.Text, "dd/mmm/yyyy")
    Dim cell As Range
For Each cell In Range("data_table[Date Test]")
          With Range("data_table[Date Test]")
    Me.TextBox47.BackColor = .Interior.Color
        Next cell
    
    End With
  

Я думаю, мне нужно где-нибудь добавить следующее..

 TextBox47.Value = Me.ListBox1.List(ListBox1.ListIndex, 65)
  

Который является ссылкой ListBox для текстового поля .. но теперь я начинаю сильно путаться. Я смотрел на это пару дней.


Отредактируйте, чтобы добавить код Listbox, как указано.

     Private Sub ComboBox8_Change()

Dim i As Long

Me.ListBox1.Clear
For i = 2 To Application.WorksheetFunction.CountA(Sheet1.Range("A:A"))
If Sheet1.Cells(i, 10).Value = Me.ComboBox8.Value Then

Me.ListBox1.AddItem Sheet1.Cells(i, 10).Value
'ID Number
Me.ListBox1.List(ListBox1.ListCount - 1, 0) = Sheet1.Cells(i, 1).Value
'Title
Me.ListBox1.List(ListBox1.ListCount - 1, 1) = Sheet1.Cells(i, 2).Value
  

Так было бы что-то вроде этого..

  Private Sub TextBox47_Change()
    Me.TextBox47.Text = Format(TextBox47.Text, "dd/mmm/yyyy")
Me.TextBox47.BackColor = .Interior.Color
    End Sub
  

Что приводит к ошибке компиляции

введите описание изображения здесь1

Более новый код

Теперь я изменил его на это..

 Private Sub TextBox47_Change()
    Dim cell As Range
        Me.TextBox47.Text = Format(TextBox47.Text, "dd/mmm/yyyy")
            With Range("data_table[Date Test]")
                Me.TextBox47.BackColor = Range("data_table[Date Test]").Interior.Color
            End With
End Sub
  

Которое, по крайней мере, не выдает ошибку, но при каждом выделении задний цвет черный. Я начал с ..

 Private Sub TextBox47_Change()
        Dim cell As Range
            Me.TextBox47.Text = Format(TextBox47.Text, "dd/mmm/yyyy")
                With Range("data_table[Date Test]")
                    Me.TextBox47.BackColor = Range("cell").Interior.Color
                End With
    End Sub
  

Но это просто остановилось из-за ошибки времени выполнения 1004

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

введите описание изображения здесь

Это, при наведении курсора мыши, на самом деле собирает правильную информацию из ячейки, которую я ищу (я пробовал разные, чтобы убедиться), в списке выбора, на который я нажимаю, так что, я думаю, теперь это случай указания интерьера.Цвет для отображения выбранной ячейки?

Комментарии:

1. Как связаны значение ячейки и поле списка?

2. Отредактировано @SJR.. В какой-то момент у меня это было.. просто много мозгов зависает .. извините. Теперь цвет обратной стороны текстового поля становится черным

3. Вероятно, так и должно быть With cell , но я не понимаю, почему вы перебираете диапазон, поскольку цвет текстового поля будет использовать только последнее значение в цикле. Опубликованный код все равно не будет работать, так как end with должен находиться внутри цикла.

4. В окне списка отображаются 6 столбцов листа, на котором выполняется A — BQ «Private Sub ComboBox8_Change() Dim i, пока я.ListBox1.Clear Для i = 2 для приложения. WorksheetFunction. Количество(Лист1. Диапазон («A: A»)), если Лист1. Ячейки (i, 10).Значение = Me.ComboBox8.Значение Затем Me.ListBox1.Дополнительный лист1. Ячейки (i, 10).Значение ‘Идентификационный номер Me.ListBox1.List(ListBox1.listCount — 1, 0) = Лист1. Ячейки (i, 1).Значение ‘Title Me.ListBox1.List(ListBox1.listCount — 1, 1) = Лист1. Ячейки (i, 2).Значение» и т.д..

5. Извините, не удалось выяснить, как поместить код в поле для комментариев

Ответ №1:

Мне удалось заставить это работать … хотя и не уверен, что это самое элегантное решение. 🙂

Чтобы не путать его с приведенным выше кодом, который стал немного бессвязным и беспорядочным, вот весь новый рабочий код и объяснение, которое я придумал

Код для раскрашивания ячеек на листе:

 Dim cell As Range
  
      For Each cell In Range("data_table[Date Reviewed]")
        If cell.Value < Range("Today") Then
            cell.Interior.ColorIndex = 7  'Magenta
            ElseIf cell.Value >= Range("Today") And cell.Value <= Range("Thirty_Days") Then
            cell.Interior.ColorIndex = 3  'Red
            ElseIf cell.Value > Range("Thirty_Days") And cell.Value <= Range("Sixty_Days") Then
            cell.Interior.ColorIndex = 45  'Orange
            ElseIf cell.Value > Range("Sixty_Days") And cell.Value <= Range("Ninety_Days") Then
            cell.Interior.ColorIndex = 4  'Green
            ElseIf cell.Value > Range("Ninety_Days") Then
            cell.Interior.ColorIndex = 19  'Beige
        End If

    Next cell
  

Это в UserForm_Initialize()

А затем, чтобы сопоставить цвет ячейки с TextBox.BackColor , я использовал ListBox.ListIndex для получения даты, используя следующий код:

 Private Sub TextBox47_Change()

      Me.TextBox47.Text = Format(TextBox47.Text, "dd/mm/yyyy")
      
                    If (Me.ListBox1.List(ListBox1.ListIndex, 65)) < Range("Today") Then
                     TextBox47.BackColor = RGB(255, 0, 255)  'Magenta
                ElseIf (Me.ListBox1.List(ListBox1.ListIndex, 65)) >= Range("Today") And (Me.ListBox1.List(ListBox1.ListIndex, 65)) <= Range("Thirty_Days") Then
                     TextBox47.BackColor = RGB(255, 0, 0)  'Red
                ElseIf (Me.ListBox1.List(ListBox1.ListIndex, 65)) > Range("Thirty_Days") And (Me.ListBox1.List(ListBox1.ListIndex, 65)) <= Range("Sixty_Days") Then
                     TextBox47.BackColor = RGB(255, 153, 0)  'Orange
                ElseIf (Me.ListBox1.List(ListBox1.ListIndex, 65)) > Range("Sixty_Days") And (Me.ListBox1.List(ListBox1.ListIndex, 65)) <= Range("Ninety_Days") Then
                     TextBox47.BackColor = RGB(0, 255, 0)  'Green
                ElseIf (Me.ListBox1.List(ListBox1.ListIndex, 65)) > Range("Ninety_Days") Then
                     TextBox47.BackColor = RGB(255, 255, 204)  'Beige
        End If
        
     End Sub
  

Теперь я могу вызвать это, TextBox.BackColor чтобы установить ассоциированное Interior.Color значение для любой другой ячейки, в которую я пересылаю это значение, например, для отчета, который я создаю в Sheet2:

 Sheet2.Range("D105").Value = Me.TextBox47.Text
Sheet2.Range("D105").Interior.Color = Me.TextBox47.BackColor
  

Спасибо за вашу помощь и терпение. Это был ваш комментарий «Итак, у вас есть listbox, который возвращает дату», который помог мне увидеть, откуда я на самом деле получал дату при наведении курсора мыши на строку кода, вместо того, чтобы видеть конкретное Cell.Address , и, следовательно, как я заставил вышеупомянутое работать.

Еще раз спасибо, и я надеюсь, что за это время я не нарушил слишком много правил публикации. 🙂

Прошу прощения, но я нигде не смог увидеть кнопку «Спасибо».

Приветствия

Лиам

Понравилась статья? Поделить с друзьями:
  • Text of more than word
  • Text not wrapping in excel
  • Text not visible in word
  • Text not showing up word
  • Text not printing in excel