Вы можете использовать следующую процедуру и событие, чтобы получить имя выбранных элементов.
Добавьте эту процедуру в любой модуль и используйте непосредственное окно (View/Immediate window), чтобы прочитать и скопировать правильное имя SliceCache. Его нужно использовать в другом фрагменте.
Sub GetSlicerData()
'## Variables ##
Dim iSlicerCache As SlicerCache 'Slicer Cache Object
Dim iSlicerItem As SlicerItem 'Slicer Item
Dim iSlicer As Slicer 'Slicer Object
'## Looping through Slicer Caches in 'ThisWorkbook' ##
For Each slSlicerCache In ThisWorkbook.SlicerCaches
Debug.Print ("Slicer Cache Namee: " & slSlicerCache.Name) 'Printing the name property of the SlicerCaches
'## Looping through Slicers contained in the SlicerCaches ##
For Each iSlicer In slSlicerCache.Slicers
Debug.Print ("Slicer Name: " & iSlicer.Name) 'Printing the slicer names
Next iSlicer
'## Looping through Items contained in the SlicerCaches ##
'and testing selection status
For Each iSlicerItem In slSlicerCache.SlicerItems
If iSlicerItem.Selected = True Then Debug.Print ("Selected Item: " & iSlicerItem.Name) 'Printing the slicer items
Next iSlicerItem
Next slSlicerCache
End Sub
Второй фрагмент является событием рабочего листа, который должен быть добавлен к листу, который подвергается воздействию на ломтерезки.
Двойной щелчок на листе в редактор макросов (проект Проводник Windows), чтобы добавить код: Adding the Event to the sheet
Второй фрагмент будет печатать выбранные элементы в непосредственных окнах.
Private Sub Worksheet_Change(ByVal Target As Range)
'Debug.Print ("Sheet name: " & Me.Name) 'Sheet name
'## Looping through Slicer Caches in 'ThisWorkbook' ##
Dim slcSlicerCache As SlicerCache 'Slicer Cache Object
Dim iSlicerItem As SlicerItem 'Slicer Item
Dim stItems As String
'## Setting slicer cache ##
'Replace with the correct name: "Slicer_Internal_Punter_ID"
Set slcSlicerCache = ThisWorkbook.SlicerCaches("Slicer_Internal_Punter_ID")
For Each iSlicerItem In slcSlicerCache.SlicerItems
If iSlicerItem.Selected = True Then
Debug.Print ("Selected Item: " & iSlicerItem.Name) 'Printing selected
If Len(stItems) = 0 Then stItems = iSlicerItem.Name Else stItems = stItems & vbNewLine & iSlicerItem.Name
End If
Next iSlicerItem
Debug.Print ("Selected Items: " & vbNewLine & stItems) 'Printing selected
'ADD CODE HERE: moving content to clipboard
End Sub
Пожалуйста, внимательность, используя правильное имя ломтерезки в этой строке:
Set slcSlicerCache = ThisWorkbook.SlicerCaches("Slicer_Internal_Punter_ID")
Кроме того, чтобы вывесить имена элементов в буфер обмена, вы можете проверить по следующей ссылке: How to copy text to clipboard
Этот сайт не является бесплатной услугой кодирования. Если вы новичок в VBA, вы можете начать с чего-то менее сложного. – teylyn
все еще спасибо за это. –