インターネットで見つけた関数を使用して、スライサー (ピボットテーブルではなくテーブルに接続されている) の値を抽出し、それをセルに格納しています。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