2016-04-15 14 views
5

Tôi có một slicer được gọi là 'Slicer_HeaderTitle'. Tôi chỉ cần có thể làm mờ một biến trong VBA với giá trị của phần tử đã chọn. Tôi sẽ chỉ có một phần tử được chọn tại một thời điểm.Excel VBA - Trả về phần tử đã chọn trong slicer

Tôi đã có rất nhiều vấn đề với việc chọn và bỏ chọn các yếu tố từ slicer của mình một cách linh động qua VBA, vì bảng tổng hợp của tôi được kết nối với nguồn dữ liệu ngoài. Tôi không biết nếu điều này là có liên quan cho ví dụ này chính xác, nhưng bảng này được kết nối với cùng một nguồn dữ liệu bên ngoài.

Tôi từng có một dòng mã, có thể trả về giá trị này, nhưng tất cả những gì tôi có thể tìm giờ yêu cầu bạn lặp qua từng phần tử trong slicer và kiểm tra xem nó có được chọn hay không. Tôi hy vọng để tránh điều này, vì tôi chỉ có 1 yếu tố được chọn tại một thời điểm.

enter image description here

' This is what I'm trying to achieve. 
Dim sValue as String 
sValue = ActiveWorkbook.SlicerCaches("Slicer_HeaderTitle").VisibleSlicerItems.Value 

msgbox(sValue) 
'Returns: "Uge 14 - 2016 (3. Apr - 9. Apr)" 

Trạng thái:

enter image description here

Trả lời

1

Ok để tìm ra lỗi, chúng tôi sẽ lùi lại một bước, xóa chức năng của tôi và cố gắng Looping qua các mục:

Dim sC As SlicerCache 
Dim SL As SlicerCacheLevel 
Dim sI As SlicerItem 
Set sC = ActiveWorkbook.SlicerCaches("Slicer_Dates_Hie") 
Set SL = sC.SlicerCacheLevels(1) 
For Each sI In SL.SlicerItems  
    sC.VisibleSlicerItemsList = Array(sI.Name) 
Next 
+0

Cảm ơn câu trả lời chi tiết. Tôi có một vấn đề nhỏ. Tôi tiếp tục nhận được thông báo "Không có mục nào được chọn". – TobiasKnudsen

+0

đó là không thực sự hữu ích, thêm một debug.print osi.Name sau Đối với mỗi và xem xét nếu mỗi phần tử bạn có trong slicer là có, sau đó kiểm tra xem một trong những lựa chọn đã chọn = true hay không. –

+0

Tôi đã thêm hình ảnh mã và lỗi của mình ở cuối bài đăng gốc! – TobiasKnudsen

2

Đây là những gì tôi đã làm:

Public Function GetSelectedSlicerItems(SlicerName As String) As String 
Dim SL As SlicerCacheLevel 
Dim sI As SlicerItem 

Set SL = ActiveWorkbook.SlicerCaches(SlicerName).SlicerCacheLevels(1) 
For Each sI In SL.SlicerItems 
    If sI.Selected = True Then 
     GetSelectedSlicerItems = (sI.Value) 
    End If 
Next 
End Function 


Dim sValue As String 
sValue = GetSelectedSlicerItems("Slicer_HeaderTitle") 

Nhờ Doktor Oswaldo vì đã giúp tôi rất nhiều!

Các vấn đề liên quan