Как получить учебный текст в Excel?

Я хотел бы знать, как разместить текст инструкций (например, текст-заполнитель), который исчезает при щелчке мыши, в некоторых ячейках Excel (C9, C21, C58, C96).

Мне нужно, чтобы текст инструкций был серым, а реальный текст — черным.

Есть ли способ сделать это?

Возможно, используя событие Worksheet_SelectionChange.

BigBen 02.07.2024 19:31
Преобразование HTML-таблицы в профессиональный документ Excel
Преобразование HTML-таблицы в профессиональный документ Excel
Это самый простой способ создания Excel из HTML-таблицы.
Импорт excel в laravel в базу данных
Импорт excel в laravel в базу данных
Здравствуйте, дорогой читатель, в этой статье я расскажу практическим и быстрым способом, как импортировать файл Excel в вашу базу данных с помощью...
1
1
104
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Одним из способов добиться этого было бы использование текстового поля ActiveX, которое связано с ячейкой, а не с ячейкой напрямую (подход с использованием только ячейки см. в конце).

Вот демонстрация того, как это может выглядеть:

Вот код, который у меня был в модуле кода Worsheet:


Const PLACEHOLDER_TEXT = "My placeholder text"

Private Sub TextBox1_GotFocus()
    'Clear text content
    With TextBox1
        If .Text = PLACEHOLDER_TEXT Then
            .Text = ""
            .ForeColor = vbBlack
        End If
    End With
End Sub

Private Sub TextBox1_LostFocus()
    'Add the placeholder text if user exits without filling the field
    With TextBox1
        If .Text = vbNullString Or .Text = PLACEHOLDER_TEXT Then
            .Text = PLACEHOLDER_TEXT
            .ForeColor = vbGrayText
        End If
    End With
End Sub

Чтобы добавить связанную ячейку, вы можете войти в режим разработки, щелкнуть правой кнопкой мыши текстовое поле > Свойства > Изменить запись связанной ячейки, используя стандартный формат адреса Excel:


Для подхода с ячейкой и использованием Worksheet_SelectionChange, как предлагает BigBen, вы можете использовать что-то вроде этого внутри модуля рабочего листа:


Option Explicit

Const TARGET_CELL_ADDRESS As String = "C2"
Const PLACEHOLDER_TEXT As String = "My placeholder text"

Const GREY_COLOR = 10921637
Const BLACK_COLOR = 0

Private Sub Worksheet_SelectionChange(ByVal Target As Range)

    If Replace(Target.AddressLocal, "$", "") = TARGET_CELL_ADDRESS Then
        'Clear text content
        With Target
            If .Value2 = PLACEHOLDER_TEXT Then
                .Value2 = ""
                .Font.Color = BLACK_COLOR
            End If
        End With
    Else
        'Restore placeholder text if needed
        Dim Rng As Range
        Set Rng = Me.Range(TARGET_CELL_ADDRESS)
        With Rng
            If .Value2 = vbNullString Then
                .Value2 = PLACEHOLDER_TEXT
                .Font.Color = GREY_COLOR
            ElseIf .Value2 = PLACEHOLDER_TEXT Then
                If .Font.Color <> GREY_COLOR Then
                    .Font.Color = GREY_COLOR
                End If
            End If
        End With
    End If
        
End Sub

Есть ли способ без использования текстового поля ActiveX, потому что с помощью этого метода не так уж много возможностей форматирования макета? И мне бы хотелось, чтобы оно было в клетке?

Clara Monspiette 02.07.2024 20:20

@ClaraMonspiette - я отредактировал свой ответ, добавив еще один метод, используя также простую ячейку.

DecimalTurn 02.07.2024 20:31

Как мы можем применить код к нескольким ячейкам?

Clara Monspiette 02.07.2024 22:35

@ClaraMonspiette - С разными текстами-заполнителями для каждой ячейки?

DecimalTurn 03.07.2024 01:13

Да, я хотел бы дать разные инструкции для каждой ячейки.

Clara Monspiette 03.07.2024 16:31

@ClaraMonspiette - Посмотрите здесь: stackoverflow.com/a/78703204/5958842

DecimalTurn 03.07.2024 18:17

К сожалению, ваше решение работает только наполовину, поскольку текст в конце все еще серый.

Clara Monspiette 03.07.2024 18:59

Меня устраивает. Вы можете проверить это, поместив код на Лист 1 новой книги.

DecimalTurn 03.07.2024 19:25

Для простоты я изменил цветовые константы, чтобы использовать неотрицательные числа.

DecimalTurn 03.07.2024 21:22

Другие вопросы по теме