Страницы: 1
RSS
Макрос для отображения длинного текста в ячейке при наведении мышки на нее.
 
Есть таблица, где есть колонка D с описанием позиции. Иногда в ячейке два-три слова и все отлично видно. Иногда там может быть два-три длинных предложения и по отображаемому тексту не понятно, что именно за позиция.
Хотелось бы иметь макрос, который загружался бы при открытии файла и потом, при на ведении на ячейки с D5 до D21 мышки выводил в всплывающем полное текстовое содержимое ячейки, в окне типа окна комментария.
Предложите пожалуйста макрос для такой задачи. Если это важно - в самой ячейке не текст, а формула, которая этот текст тянет из другого листа и позиции меняются через выбор пунктов меню на листе.
Goedenavond!
 
Для выделенного диапазона
Название темы: Записать значение ячейки в примечание
Изменено: Jack Famous - 15.04.2021 14:24:36
Во всех делах очень полезно периодически ставить знак вопроса к тому, что вы с давних пор считали не требующим доказательств (Бертран Рассел) ►Благодарности сюда◄
 
Как-то так. В модуль листа.
Код
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
    If Target.Cells.Count = 1 Then
        If Not Intersect(Target, Range("D5:D21")) Is Nothing Then
            Dim sp As Shape
            For Each sp In ActiveSheet.Shapes
                Select Case sp.Type
                Case 1
                    sp.Delete
                End Select
            Next
            Set sp = ActiveSheet.Shapes.AddShape(msoShapeRoundedRectangle, Target.Left, Target.Top, 270.75, 127.5)
            sp.TextFrame2.TextRange.Characters.Text = CStr(Target.Value)
        End If
    End If
End Sub
Изменено: МатросНаЗебре - 15.04.2021 14:51:04
 
Спасибо за версию,  вроде заработала ограниченно.

Загрузил новую версию, при загрузке сразу выводит окошко для первой ячейки, но если выбрать другую ячейку вне указанного диапазона - окошко продолжает висеть.
Я хотел, чтобы окошко выводилось только при наведении на ячейку и исчезало после того, как мышка убрана в другое место.
Goedenavond!
 
Цитата
seggi: Хотелось бы иметь макрос, который …
1. загружался бы при открытии файла (событие открытия файла)
2. при наведении на ячейки с D5 до D21 мышки (событие выделения ячейки в заданном диапазоне)
3. выводил в всплывающем полное текстовое содержимое ячейки, в окне типа окна комментария (вывод содержимого в комментарии)
seggi, вы не считаете задачу комплексной? Один вопрос - одна тема
Изменено: Jack Famous - 15.04.2021 15:39:25
Во всех делах очень полезно периодически ставить знак вопроса к тому, что вы с давних пор считали не требующим доказательств (Бертран Рассел) ►Благодарности сюда◄
 
Ну вроде задача одинарная, так сказать. Навел мышку - вышло окошко, убрал мышку - окошко ушло.

Так и какую-то формулу =ЕСЛИ( для решения задачи сортировки тоже надо сначала ввести в первую ячейку, потом протянуть - уже второй шаг.  :D  
Goedenavond!
 
Как-то так.
Код
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
    If Target.Cells.Count = 1 Then

            Dim sp As Shape            
            For Each sp In ActiveSheet.Shapes
                Select Case sp.Type
                Case 1
                    sp.Delete
                End Select
            Next

        If Not Intersect(Target, Range("D5:D21")) Is Nothing Then
            Set sp = ActiveSheet.Shapes.AddShape(msoShapeRoundedRectangle, Target.Left, Target.Top, 270.75, 127.5)
            sp.TextFrame2.TextRange.Characters.Text = CStr(Target.Value)
        End If
    End If
End Sub
 
Спасибо огромное, все работает.
Goedenavond!
 
Можно вот так приладить, не так красиво, но зато просто.
По вопросам из тем форума, личку не читаю.
 
2 БМВ - тоже интересное решение, если нельзя применять макросы.
Но в данном случае макросы там будут, т.ч. решение от МатросНаЗебре конечно лучше.
Я тут 20 минут потратил, чтобы просто цвет поменять и добавить вспомогательный текст, хе-хе. Но смог поменять.  
Goedenavond!
 
Цитата
seggi написал:
Я тут 20 минут потратил, чтобы просто цвет поменять и добавить вспомогательный текст, хе-хе. Но смог поменять.  
Ну так выложи пример с пояснениями. Другим тоже интересно.
 
МатросНаЗебре, дружище, очень хорошая "штука", а можете подправить код так, чтобы всплывающее окошко автоматом подгонялось под объем текста ячейки и открывалось не поверх ячейки, а рядом, а то при необходимости невозможно провалиться/залезть в ячейку. Был бы Вам премного благодарен. Во сколько хотелок за раз. :oops:  :)  
Изменено: Эльбрус - 18.04.2021 01:32:20
 
Такой вариант изменяет размер появляющейся формы под длину текста в ячейке. Выводит не поверх, а рядом.
Код
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
    'Выводит в форму текст ячейки.
    'Подгоняет размер формы под длину строки.
    If Target.Cells.Count = 1 Then
 
            Dim sp As Shape
            For Each sp In ActiveSheet.Shapes
                Select Case sp.Type
                Case 1
                    sp.Delete
                End Select
            Next
 
        If Not Intersect(Target, Range("D5:D21")) Is Nothing Then
            Dim wihe As Variant
            Dim s As String
            s = CStr(Target.Value)
            If s <> "" Then
                wihe = GetWidthHeight(s)
                 
                Set sp = ActiveSheet.Shapes.AddShape(msoShapeRoundedRectangle, Target.Cells(2, 2).Left, Target.Cells(2, 2).Top, wihe(0), wihe(1))
                With sp.TextFrame2.TextRange
                    With .Font
                        .NameComplexScript = "Courier New"
                        .NameFarEast = "Courier New"
                        .Name = "Courier New"
                        .Size = 10
                    End With
                    .Characters.Text = s
                End With
            End If
        End If
    End If
End Sub

Function GetWidthHeight(ByVal s As String) As Variant
    Dim arr As Variant
    ReDim arr(0 To 1)
    arr(0) = 5
    arr(1) = 10
    Dim maxWi As Long
    If s <> "" Then
        s = Replace(s, vbCrLf, vbCr)
        s = Replace(s, vbLf, vbCr)
        Dim brr As Variant
        brr = Split(s, vbCr)
        Dim l As Long
        Dim i As Long
        Dim st As Variant
        For Each st In brr
            l = Len(st)
            i = Int(l / 100) + 1
            arr(1) = arr(1) + 15 * i
            
            If l > 100 Then
                maxWi = 600
            Else
                If maxWi < 6 * l Then maxWi = 6 * l
            End If
        Next
    End If
    arr(0) = arr(0) + maxWi
    
    GetWidthHeight = arr
End Function
 
А можно еще немного помучать МатросНаЗебре?
Вопрос по этой строчке
Код
If Not Intersect(Target, Range("D5:D21")) Is Nothing Then

А что, если нужно использовать два диапазона, D5:D21 и X5:X21 ?
Попробовал, два варианта:
Код
If Not Intersect(Target, Range("D5:D21","X5:X21)) Is Nothing Then
If Not Intersect(Target, Range("D5:D21,X5:X21")) Is Nothing Then

В первом использует для выделения просто область с D5 по X21, а во втором VBA ругается на  неправильный объект.
Goedenavond!
 
seggi, например If Not Intersect(Target, Union(rng1,rng2))
P.S.: за постоянные хотелки рискуете по жопе от модеров получить  :D
Во всех делах очень полезно периодически ставить знак вопроса к тому, что вы с давних пор считали не требующим доказательств (Бертран Рассел) ►Благодарности сюда◄
 
Код
If Not Intersect(Target, Union(Range("D5:D21"), Range("X5:X21"))) Is Nothing Then
 
Jack Famous, МатросНаЗебре, Спасибо большое
Goedenavond!
 
МатросНаЗебре, мне кажется можно было обойтись свойством "подгонять размер фигуры под текст"

Код
 Set sp = ActiveSheet.Shapes.AddShape(msoShapeRoundedRectangle, Target.Cells(2, 2).Left, Target.Cells(2, 2).Top, 500, 50)
 With sp.TextFrame2
      .AutoSize = msoAutoSizeShapeToFitText ' <-- вот это
   With .TextRange.Font
        .NameComplexScript = "Courier New"
        .NameFarEast = "Courier New"
        .Name = "Courier New"
       .Size = 10
 End With
  .TextRange.Characters.Text = s
End With
Изменено: New - 19.04.2021 12:22:31
 
New, соглашусь, этот вариант лучше.
 
МатросНаЗебре, большое спасибо за отклик и поддержку! Позавчера же нашел по наводке Юрия М приведенный ниже код и использую его. Он хоть и не даёт схватить ячейку за нижний уголок, но всё же не перекрывает ячейку, а "квадратик" с текстом появляется вплотную к ячейке.
Код
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
    If Target.Cells.Count > 1 Then Exit Sub
    With ActiveSheet.Shapes.Range(Array("TextBox 1"))
    If Not Application.Intersect(Range("AM4:AM1700, AW4:AW1700, BC4:BC1700"), Target) Is Nothing Then
        .Top = Target.Top
        .Left = Target.Offset(0, 1).Left
        .TextFrame2.TextRange.Characters.Text = Target '.Offset(0, -1)
        .Visible = True
    Else
        .Visible = False
    End If
    End With
End Sub
Изменено: Эльбрус - 19.04.2021 12:53:56
Страницы: 1
Наверх