1 (изменено: Nason, 2022-01-23 06:59:39)

Тема: VBA: Зачеркивание ячейки в ехель для заполнения анкеты

Приветствую! Задача по автоматизации сбора данных при анкетировании - как сделать изменение форматирования ячейки при ее выделении? Исходно - текст находится по центру, необходимо, чтобы при выделении ячейки произошло форматирование текста вправо и одно диагональное зачеркивание ячейки жирной линией (чтобы человек увидел, если плоховато зрение). При  повторном выделении ячейки (если человек, который заполняет анкету передумал) - форматирование влево и добавление еще одного диагонального перечеркивания, т.е. получается ячейка с текстом зачеркивается крестом.  Проблема в том, что диагональное зачеркивание прописывается только для конкретной ячейки, а не для активной. Заранее благодарю за ответы!

2

Re: VBA: Зачеркивание ячейки в ехель для заполнения анкеты

Nason, приветствую.

Не всё понятно, я просто эскиз набросал - событие листа "выделение ячейки/диапазона".
Может быть, задача сложнее, и при этом с предыдущей ячейки нужно снимать форматирование?
Либо не срабатывает событие при повторном выделении активной ячейки?
Для таких случаев нужно заводить глобальную переменную, видимо.

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
    If Target.Count = 1 Then
		' Работаем только с выделением 1 ячейки:
        With ActiveCell
            If .Borders(xlDiagonalUp).LineStyle = xlNone Then
                ' Первый раз - пока не было зачёркивания:
                .HorizontalAlignment = xlRight
                .Borders(xlDiagonalUp).LineStyle = xlContinuous
                .Borders(xlDiagonalUp).Weight = xlThick
            Else
                ' Второй раз:
                .HorizontalAlignment = xlLeft
                .Borders(xlDiagonalDown).LineStyle = xlContinuous
                .Borders(xlDiagonalDown).Weight = xlThick
            End If
        End With
    End If
End Sub

3 (изменено: Nason, 2022-01-23 06:52:27)

Re: VBA: Зачеркивание ячейки в ехель для заполнения анкеты

Благодарю за помощь andypetr! Буду разбираться. Это очень нужная вещь, хоть кажется простой и очевидной для профессионалов. Понимаю, что много спрашиваю, но оч.нужно при анкетировании знать поведение респондента - если он меняет поведение при анкетировании, это является косвенным доказательством сомнения или лжи. Не могли бы подсказать как отследить временные характеристики анкетирования, т.е сколько человек тратит время при переходе от одной ячейки с ответом к другой. Может быть даже трассу ответов - т.е. на какие отвечает сразу, какие оставляет на потом.

4 (изменено: andypetr, 2022-02-04 22:56:30)

Re: VBA: Зачеркивание ячейки в ехель для заполнения анкеты

Nason, приветствую.
Выдалась свободная неделя, и я немного поэкспериментировал на эту тему. Возможно, файл будет полезным.
Имя "debug_..." включает режим отладки (разработчика). В этом режиме можно переключаться на обычный (Alt-F12).
Лист Тест - само анкетирование, лист Стат - статистика (собирается в обычном режиме).
Более подробное описание напишу позже, если надо.

Post's attachments

debug_VBA_анкета.xlsb 39.82 kb, 1 downloads since 2022-02-04 

You don't have the permssions to download the attachments of this post.

5 (изменено: Nason, 2022-02-10 08:05:07)

Re: VBA: Зачеркивание ячейки в ехель для заполнения анкеты

Доброго тайма! Ну вот, у меня "выкашивает" не только диапазон Д3-E74 (.

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
    If Target.Count = 1 Then
        ' Работаем только с выделением 1 ячейки:
        With ActiveCell
            If (Not Application.Intersect(Target, Me.Range("D3:E74")) Is Nothing) Then


                ' Первый раз - пока не было зачёркивания:
                .HorizontalAlignment = xlRight
                .Borders(xlDiagonalUp).LineStyle = xlContinuous
                .Borders(xlDiagonalUp).Weight = xlThick
            Else
                ' Второй раз:
                .HorizontalAlignment = xlLeft
                .Borders(xlDiagonalDown).LineStyle = xlContinuous
                .Borders(xlDiagonalDown).Weight = xlThick
            End If
        End With
    End If
End Sub

Post's attachments

сно 2022.xlsm 23.93 kb, 2 downloads since 2022-02-10 

You don't have the permssions to download the attachments of this post.

6

Re: VBA: Зачеркивание ячейки в ехель для заполнения анкеты

Nason, ознакомьтесь, пожалуйста, с Правилами, отредактируйте свой пост. Обратите внимание на оформление кода.

Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Telegram jollycoder

7

Re: VBA: Зачеркивание ячейки в ехель для заполнения анкеты

Nason, приветствую.

Предлагаю рассмотреть мой свежий файл, я изменил систему ответов под Да/Нет, и заполнил анкету вашими вопросами.

  • Файл с именем debug_VBA_анкета.xlsb запустится в режиме разработчика (отладки).
    Режим разработчика нужен для редактирования таблицы анкетирования, т.к. в обычном режиме щелчки мышью и поведение активной ячейки контролируются макросами.
    В этом режиме можно переключаться на обычный режим (Alt-F12), при этом очистятся предыдущие ответы и статистика.

  • Если убрать "debug_" из начала названия, то файл запустится в обычном режиме, для ввода ответов пользователем.

  • Лист Тест - само анкетирование, лист Стат - статистика ввода ответов (в обычном режиме лист Стат скрыт от пользователя).

  • В обычном режиме (анкетирование пользователя) активная ячейка "не выпускается" из колонок ответов (столбцы C и D листа Тест).
    Заголовки колонок ответов выделены зеленоватым цветом.

  • Ответы вводятся нажатием Enter, либо щелчком ПКМ, либо двойным щелчком ЛКМ.
    При этом знак "V" проставляется в графе "Верно", знак "O" проставляется в графе "Не верно".

Нужно более подробное описание?

PS. Что касается

Ну вот, у меня "выкашивает" не только диапазон Д3-E74

- то в вашем коде потерялось вложенное условие If .Borders(xlDiagonalUp).LineStyle = xlNone:

 
    ' Работаем только с выделением 1 ячейки:
    With ActiveCell
        If (Not Application.Intersect(Target, Me.Range("D3:E74")) Is Nothing) Then
            If .Borders(xlDiagonalUp).LineStyle = xlNone Then
                ' Первый раз - пока не было зачёркивания:
                .HorizontalAlignment = xlRight
                .Borders(xlDiagonalUp).LineStyle = xlContinuous
                .Borders(xlDiagonalUp).Weight = xlThick
            Else
                ' Второй раз:
                .HorizontalAlignment = xlLeft
                .Borders(xlDiagonalDown).LineStyle = xlContinuous
                .Borders(xlDiagonalDown).Weight = xlThick
            End If
        End If
    End With
Post's attachments

debug_VBA_анкета.xlsb 55.79 kb, 1 downloads since 2022-02-17 

You don't have the permssions to download the attachments of this post.

8

Re: VBA: Зачеркивание ячейки в ехель для заполнения анкеты

andypetr, на будущее: у нас не принято отвечать в темах, если участнику было сделано замечание, а он не отреагировал.

Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Telegram jollycoder