Доброго времени суток. Помогите пожалуйста сделать всплывающее окно, которое будет отображать информацию из таблицы на листе № 2 (в формате ID | Name | Age | Passport_series | .....) при наведении на ячейку с ID на листе №1. Связь ячеек по ID, на листе 2 они уникальны. Пример таблиц: Лист 1 ID 1 2 3 Лист2 ID | Name | Age | Passport_series | ..... 1 | Вася | 20 | 777777 | ..... 2 | Петя | 20 | 999999 | ..... 3 | Коля | 21 | 444444 | .....
Проверка данных - заполните вторую вкладку инструмента для выделенной области
Во всех делах очень полезно периодически ставить знак вопроса к тому, что вы с давних пор считали не требующим доказательств (Бертран Рассел) ►Благодарности сюда◄
Спасибо. Но это не то, что нужно. Видимо криво объяснил.То, что вы предлагаете - это просто подсказка для поля (как понял я, ее нельзя сделать динамической). Мне нужно чтобы при наведении на ячейку с ID в таблице на листе 1 всплывало окно с совокупной информацией по всем ячейкам связанным с конкретным ID из таблицы на листе 2.
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If Target.Cells.Count = 1 Then
myAddShape
End If
End Sub
В стандартный модуль.
Код
Option Explicit
Sub myAddShape()
Dim txt As String
txt = GetTxt(ActiveCell.Value)
Dim sh As Shape
For Each sh In ActiveSheet.Shapes
sh.Delete
Next
If txt <> "" Then
Set sh = ActiveSheet.Shapes.AddShape(msoShapeRoundedRectangle, 1, 1, 500, 25)
With sh
.TextFrame2.TextRange.Characters.Text = txt
Do
If .TopLeftCell.Row >= ActiveCell.Row Then Exit Do
.Top = .Top + 10
Loop
Do
If .TopLeftCell.Column > ActiveCell.Column Then Exit Do
.Left = .Left + 10
Loop
End With
End If
End Sub
Function GetTxt(ActiveCell_Value As Variant) As String
With Лист2
Dim yy As Long
On Error Resume Next
yy = WorksheetFunction.Match(ActiveCell_Value, .Columns(1), 0)
On Error GoTo 0
If yy > 0 Then
Dim xx As Long
xx = .UsedRange.Columns.Count
If xx = 1 Then xx = 2
Dim arr As Variant
Dim brr As Variant
arr = .Cells(yy, 1).Resize(1, xx)
ReDim brr(1 To UBound(arr, 2))
For xx = 1 To UBound(arr, 2)
brr(xx) = arr(1, xx)
Next
GetTxt = Join(brr, " ")
End If
End With
End Function
Возможно лучше уйти от циклов Do ... Loop просто на свойства, т.е. вместо вот этого
Код
With sh
.TextFrame2.TextRange.Characters.Text = txt
Do
If .TopLeftCell.Row >= ActiveCell.Row Then Exit Do
.Top = .Top + 10
Loop
Do
If .TopLeftCell.Column > ActiveCell.Column Then Exit Do
.Left = .Left + 10
Loop
End With
лучше вот это
Код
With sh
.TextFrame2.TextRange.Characters.Text = txt
.Top = ActiveCell.Top + 1
.Left = ActiveCell.Width + 10
End With
Private Sub Worksheet_SelectionChange(ByVal Target As Range) 'Sheets(1)
If Not Intersect(Target, Range("a6:a8")) Is Nothing Then
del
With Sheets(2).Columns(1)
Set f = .Find(What:=Target, LookIn:=xlValues, LookAt:=xlWhole)
If Not f Is Nothing Then
Target.AddComment Text:="ID: " & f & Chr(10) & "Name: " & .Cells(f.Row, 2) & _
Chr(10) & "Age: " & .Cells(f.Row, 3) & Chr(10) & _
"Passport: " & .Cells(f.Row, 3)
Else
Target.AddComment Text:="Не найдено."
End If
End With
Else
del
End If
End Sub
Sub del()
If ActiveSheet.Comments.Count > 0 Then
For Each x In ActiveSheet.Comments
x.Delete
Next
End If
End Sub
New Добрый день! Не могли бы Вы пожалуйста отредактировать Ваш код, на отображение всплывающего окна с информацией из таблицы другого листа, при наведении на ячейку, но с условием, что на другом листе повторяющихся строк "ID" может быть несколько и всплывающее окно так же отобразит все строки. Во вложении Ваш файл отредактированный по содержимому в Лист2.