Страницы: 1
RSS
"Всплывание" содержащегося в ячейке текста при наведении курсора на ячейку
 
Приветствую форумчан.
Ситуация. Очень много ячеек, заполненных текстом в 5-6 предложений. Эти ячейки должны быть все на виду и расширять/объединять ячейки недопустимо.
Текст, содержащийся в ячейке не умещается в ячейке. Нужно, чтобы при наведении на ячейку "всплывала" по типу примечания область, в которой полностью виден весь текст в ячейке. В общем, можно ли просматривать содержимое ячейки так же, как просматриваются примечания для ячейки?
Читать содержимое ячейки в строке формул не очень удобно, т.к. не умещается все равно, а расширять область строки формул не удобно.
 
можно. если положить содержимое ячейки в примечания
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете!
 
А ещё не так давно делали содержимое ячейки в Надпись. Но не при наведении на ячейку, а при её активации.
 
deinstalation,
Недавно была похожая тема, посмотрите, может как раз то, что необходимо.
Плюс еще вариант.
Изменено: heso - 01.02.2017 05:45:01
 
Вот немного переделанный файл из темы по первой ссылке, предложенной heso,
 
Юрий М, Вариант, предложенный в "Вместо примечания 03.xls.xlsm" подходит мне.
Но возник вопрос. Когда открываю документ - выскакивает окно, сообщающее о баге в пользовательской функции.
И как можно прописывать отдельные ячейки в коде, для которых всплывающее окно нужно? В смысле если не диапазоном задавать, получится для конкретного набора ячеек?
 
Никакой пользовательской функции у меня нет - есть макрос, который срабатывает при активации контролируемых ячеек. И никакого окна у меня не выскакивает )) Может быть Excel просит Вас разрешить макросы?
Набор ячеек можете указать свой таким образом:
Код
(Range("A3, C7, D4, F8")

 
Баг скорее всего выскакивал из-за того, что после первоначального открытия файла меня предупреждают о том, то "скачанные файлы из интернета не безопасны...". А затем выскакивает окно с багом:
Run-time error "91":
Object variable or With block variable not set
При нажатии дебага выделяет вот эту строку
Код
With ActiveSheet.Shapes.Range(Array("TextBox 1"))
А так после повторного запуска баг не появляется.
Благодарю всех за помощь.
 
deinstalation, просто сохраните файл от Юрия М себе на диск. Не будет тогда ошибки.
Для отдельных ячеек используйте вместо:
Код
If Not Application.Intersect(Range("C7:C14"), Target) Is Nothing Then
следующее:
Код
If Not Application.Intersect([C7, C8, C9, C10, C11, C12, C13, C14], Target) Is Nothing Then
и по аналогии.
 
Юрий М, Хм, никак не могу на другие книги адекватно перенести макрос. открываю раздел VisualBasic. Кликаю 2 раза на "лист 1" Вставляю код. Прописываю ячейки. Кликаю на ячейку,  выскакивает баг  "компонент с указанным именем не найден". И при дебаге выделяет желтым ранее упомянутую строку
Код
With ActiveSheet.Shapes.Range(Array("TextBox 1"))
Не подскажете, в чем проблема? Раньше никогда не было проблем с установкой макросов.
 
deinstalation, по шагам:
1. Вставка-Фигуры-Надпись. (в любом месте)
2. Копируете код в модуль листа
3. Сохраняетесь.
4. Пользуетесь.
 
Цитата
deinstalation написал: чтобы при наведении на ячейку "всплывала" по типу примечания область, в которой полностью виден весь текст в ячейке
Код в модуль ЭтаКнига
Код
Private Sub Workbook_Open()
Dim rr As Range, rc As Range
On Error Resume Next
Application.ScreenUpdating = False
'в строке ниже замените адреса ячеек на нужные Вам
Set rr = Worksheets("Лист1").Range("A1,C1,G5,C7:C14,E7:E8,G7:G9")
If rr Is Nothing Then Exit Sub
On Error GoTo 0
For Each rc In rr.Cells
    With rc
        If Len(.Value) Then
            .Hyperlinks.Add rc, "", "", (.Value), (.Value)
            With .Font
                .ColorIndex = xlAutomatic
                .TintAndShade = 0
                .Underline = xlUnderlineStyleNone
            End With
        End If
    End With
Next
Application.ScreenUpdating = True
End Sub
Согласие есть продукт при полном непротивлении сторон
 
heso, Благодарю. Разобрался.

Sanja, да, тоже отличный способ решения моей проблемы. Блгодарю
 
Думаю окончательный вариант (сама идея Дмитрия (The_Prist). Добавляет/удаляет всплывающие сообщения при изменении значений в ячейках 'на лету' при необходимости (т.е. если содержимое не умещается в ячейке). Реальные гиперссылки не трогает. Кому интересно - потестируйте
Скрытый текст
Согласие есть продукт при полном непротивлении сторон
 
Цитата
Юрий М написал:
Вот немного переделанный файл из темы по первой ссылке, предложенной
Добрый день. Подскажите пожалуйста, можно ли сделать такую функцию, только чтобы текст во всплывающем окне брался из другой ячейки?

Другими словами, чтобы в диапазоне А1:А10 при наведении на ячейку всплывала подсказка с тестом, хранящимся в В1:В10
 
Из темы Макрос для отображения длинного текста в ячейке при наведении мышки на нее. (planetaexcel.ru)
Код
Option Explicit

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("A1:A10")) Is Nothing Then
            Dim wihe As Variant
            Dim s As String
            s = CStr(Target.Cells(1, 2).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
 
МатросНаЗебре, огромное спасибо.
Подскажите пожалуйста, если у меня в коде листа уже есть процедура
Код
Private Sub Worksheet_SelectionChange(ByVal Target As Range)

как можно переименовать чтобы они работали. А то пока конфликтуют, а меняю название, перестает работать.
 
Не переименовать.
Или назначить разные диапазоны  срабатывания, или добавить проверку: если что-то, работает первый, если не что-то, то второй
 
:cry:  Ничего не получается. Диапазоны разные.
Отдельно друг от друга срабатывают хорошо. Когда записаны в модуль оба, появляется ошибка.
Изменено: ОксанаD - 23.04.2021 11:00:05
 
Код
If Not Intersect(Target, Range("A1:A10, C1:C10")) Is Nothing Then
    If Target.Column = 1 Then
 
Цитата
ОксанаD написал:
Когда записаны в модуль оба, появляется ошибка.
А не должно в модуле быть две одинаковых процедуры. Добавляйте диапазоны/условия в ОДНУ.
 
Дна процедура запускает юзер-форму для определенного диапазона.
Вторая должна была запустить подсказки к другому диапазону.
Поэтому не могу добавить в одну. Это совсем разные операции и они не связаны друг с другом.


vikttur, к сожалению код не помог справиться с проблемой.
Цитата
If Not Intersect(Target, Range("A1:A10, C1:C10")) Is Nothing Then
   If Target.Column = 1 Then

Благодарю всех за помощь
 
ОксанаD, это вопрос для другой темы

Цитата
ОксанаD написал: Это совсем разные операции и они не связаны друг с другом.
Не может быть в модуле одного листа двух макросов, реагирующих на одинаковое событие.
 
Цитата
ОксанаD: одна — для одного диапазона, вторая — для другого
Чтобы не плодить одноразовые темы
если не то, то делайте новую тему
Во всех делах очень полезно периодически ставить знак вопроса к тому, что вы с давних пор считали не требующим доказательств (Бертран Рассел) ►Благодарности сюда◄
Страницы: 1
Наверх