-1

特定のセルの内容に応じてピボットテーブルを調整する必要があります。プロセス全体は機能しますが、コンテンツを更新、追加、または変更すると、次のエラー メッセージが表示されます。

Debug: Run_time error '1004': Method 'Intersect' of object '_Global' failed

ファイルに対して何をしてもエラー メッセージが表示されるため、非常に煩わしい場合があります。

これが私が使用するコードです(私自身のものではなく、インターネット上にあります):

Option Explicit
Const RegionRangeName As String = "SuppName"
Const PivotTableName As String = "PivotTable1"
Const PivotFieldName As String = "SUPPLIER_NAME"
Public Sub UpdatePivotFieldFromRange(RangeName As String, FieldName As String, _
                                      PivotTableName As String)
    Dim rng As Range
    Set rng = Application.Range(RangeName)

    Dim pt As PivotTable
    Dim Sheet As Worksheet
    For Each Sheet In Application.ActiveWorkbook.Worksheets
        On Error Resume Next
        Set pt = Sheet.PivotTables(PivotTableName)
    Next
    If pt Is Nothing Then GoTo Ex

    On Error GoTo Ex

    pt.ManualUpdate = True
    Application.EnableEvents = False
    Application.ScreenUpdating = False

    Dim Field As PivotField
    Set Field = pt.PivotFields(FieldName)
    Field.ClearAllFilters
    Field.EnableItemSelection = False
    SelectPivotItem Field, rng.Text
    pt.RefreshTable

    Ex:
    pt.ManualUpdate = False
    Application.EnableEvents = True
    Application.ScreenUpdating = True

End Sub
Public Sub SelectPivotItem(Field As PivotField, ItemName As String)
Dim Item As PivotItem
For Each Item In Field.PivotItems
Item.Visible = (Item.Caption = ItemName)
Next
End Sub
Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
If Not Intersect(Target, Application.Range(RegionRangeName)) _
Is Nothing Then
UpdatePivotFieldFromRange _
RegionRangeName, PivotFieldName, PivotTableName
End If
End Sub

コードの強調表示された部分は次のとおりです。

If Not Intersect(Target, Application.Range(RegionRangeName)) _
Is Nothing Then

私はいくつかのコンテンツを (のようにActiveWorksheet、またはSheet1代わりにApplication) あちこち置き換えようとしましたが、これまでのところ成功していません。

4

1 に答える 1

1

Target と RegionRangeName-Region が同じシートにないために問題が発生する可能性がありますか?

Sub mytest()
'---Throws "run-time error '1004': Method 'Intersect' of object '_Global' failed"
MsgBox IIf(Intersect(Sheets(1).Range("G1"), _
    Sheets(2).Range("G:AC")) Is Nothing, _
        "No Intersect", "Intersects")
End Sub

この例はこちらで見つかりました。上記に当てはまらない場合は、ローカル ウィンドウを使用して範囲 "Target" と "Application.Range(RegionRangeName)" の親 (つまりワークシート) を見つけ、エラーが発生した時点でそれらが同じかどうかを確認できますか?投げた?

于 2013-06-14T11:43:50.560 に答える