1

インターネットで見つけた関数を使用して、スライサー (ピボットテーブルではなくテーブルに接続されている) の値を抽出し、それをセルに格納しています。Refresh Excel VBA Function Resultsapplication.volatileの質問でも説明されているように、この関数には、うまく機能する追加が含まれていました。

問題は、揮発性関数が原因で、OpenSolver モデルを実行できないことです。反復ごとに Excel が計算を行っているため、OpenSolver は Excel がモデリングの準備ができていないと判断します。

を使用せずに、スライサーが値を変更するたびにセルの値を更新する方法はありますapplication.volatileか?

私はすでに使用してみました:

Private Sub Worksheet_Change(ByVal Target As Range)
    ActiveWorkbook.Sheets("Dashboard").Range("B7").Formula = _
        ActiveWorkbook.Sheets("Dashboard").Range("B7").Formula
End Sub

Private Sub Worksheet_Change(ByVal Target As Range)
        ActiveWorkbook.Sheets("Dashboard").Range("B7").Calculate
End Sub

スライサー値を抽出するために使用している関数は、http : //www.jkp-ads.com/articles/slicers05.asp から取得されます。

Public Function GetSelectedSlicerItems(SlicerName As String) As String
    Dim oSc As SlicerCache
    Dim oSi As SlicerItem
    Dim lCt As Long
    On Error Resume Next
    Set oSc = ThisWorkbook.SlicerCaches(SlicerName)
    If Not oSc Is Nothing Then
        For Each oSi In oSc.SlicerItems
            If oSi.Selected Then
                GetSelectedSlicerItems = GetSelectedSlicerItems & oSi.Name & ", "
                lCt = lCt + 1
            End If
        Next
        If Len(GetSelectedSlicerItems) > 0 Then
            If lCt = oSc.SlicerItems.Count Then
                GetSelectedSlicerItems = "maandag"
            Else
                GetSelectedSlicerItems = Left(GetSelectedSlicerItems, Len(GetSelectedSlicerItems) - 2)
            End If
        Else
            GetSelectedSlicerItems = "No items selected"
        End If
    Else
        GetSelectedSlicerItems = "No slicer with name '" & SlicerName & "' was found"
    End If
End Function
4

2 に答える 2