次の方法で共有


DataRecordset.GetMatchingRowsForRefreshConflict メソッド (Visio)

データ レコードセットのリフレッシュ後に、競合がある図形にリンクされているデータ レコードセット行の行 ID の配列を返します。

注:

この Visio オブジェクトまたはメンバーは Visio Professional 2013 のライセンス ユーザーのみが使用できます。

構文

GetMatchingRowsForRefreshConflict (ShapeInConflict)

DataRecordset オブジェクトを返す式。

パラメーター

名前 必須 / オプション データ型 説明
ShapeInConflict 必須 図形 データ レコードセットの更新後に競合するデータにリンクされた図形。

戻り値

Long()

注釈

GetAllRefreshConflicts メソッドは、図形内のデータと、図形がリンクされているデータ レコードセット行のデータとの間に競合が存在する図形の配列を返します。 競合が発生したデータ レコードセット行を特定するには、これらの各図形 を GetMatchingRowsForRefreshConflict メソッドに渡します。このメソッドは、特定の図形に対して競合している行の配列を返します。

データ レコードセットの行は、複数の行に同じ主キーが設定され、同じ図形にリンクされている場合に競合が発生します。 この場合、GetMatchingRowsForRefreshConflict メソッドは、少なくとも 2 つ以上の行 ID を含む配列を返します。

競合は、以前リンクされていたデータ行がデータ レコードセットから削除される場合にも発生します。 この場合、メソッドは空の配列を返します。

競合を削除するには、競合している図形を RemoveRefreshConflict メソッドに渡します。これにより、現在のドキュメントから競合する情報が削除されます。 競合の情報は、競合している図形を削除するか、または図形に対して RemoveRefreshConflict メソッドを呼び出すまで、現在の図面で永続化されます。

この Microsoft Visual Basic for Applications (VBA) マクロは、GetAllRefreshConflicts メソッドを使用して、データ レコードセットの更新後に競合がある図形を特定し、GetMatchingRowsForRefreshConflict メソッドを使用して、競合の原因となっているデータ レコードセットの行または行を特定する方法を示します。 最後に追加されたデータ レコードセットを更新し、競合がなかった場合は [イミディエイト] ウィンドウに "No conflicts" と出力します。 競合が見つかると、競合している各図形が GetMatchingRowsForRefreshConflict メソッドに渡され、結果の行 ID が同じウィンドウに出力されます。

このマクロを実行する前に、最後に追加されたデータ レコードセットが、接続された (非 XML ベースの) データ レコードセットであり、元のデータ ソースに接続されていることを確認してください。 次に、データ ソースの行を削除するか、またはデータ レコードセットをリフレッシュすると競合が発生するような変更を行ってください。

Public Sub GetMatchingRowsForRefreshConflict_Example() 
 
    Dim vsoDataRecordset As Visio.DataRecordset 
    Dim intRecordsetCount As Integer 
    Dim intShapeCount As Integer 
    Dim vsoShapes() As Visio.Shape 
     
    Dim intRowCount As Integer 
    Dim vsoShapeInConflict As Visio.Shape 
     
    Dim alngRowIDs() As Long 
    Dim lngvsoRowID As Long 
         
    intRecordsetCount = Visio.ActiveDocument.DataRecordsets.Count 
    Set vsoDataRecordset = Visio.ActiveDocument.DataRecordsets(intRecordsetCount) 
     
    vsoDataRecordset.Refresh 
    vsoShapes = vsoDataRecordset.GetAllRefreshConflicts 
     
    If IsEmpty(vsoShapes) Then 
        Debug.Print "No conflict" 
    Else 
        For intShapeCount = LBound(vsoShapes) To UBound(vsoShapes) 
            Set vsoShapeInConflict = vsoShapes(intShapeCount) 
            alngRowIDs = vsoDataRecordset.GetMatchingRowsForRefreshConflict(vsoShapeInConflict) 
             
            If IsEmpty(alngRowIDs) Then 
                Debug.Print "For shape:", vsoShapeInConflict.Name, "Row deleted." 
            Else 
                For intRowCount = LBound(alngRowIDs) To UBound(alngRowIDs) 
                    lngvsoRowID = alngRowIDs(intRowCount) 
                    Debug.Print "For shape:", vsoShapeInConflict.Name, "Row ID of row in conflict:", lngvsoRowID 
                Next intRowCount 
            End If 
            
        Next intShapeCount 
         
    End If 
     
End Sub

サポートとフィードバック

Office VBA またはこの説明書に関するご質問やフィードバックがありますか? サポートの受け方およびフィードバックをお寄せいただく方法のガイダンスについては、Office VBA のサポートおよびフィードバックを参照してください。