Ändern der Größe einer Rasterform in Microsoft Visio 2013

7

Ich habe die Form Charting shapes > Gridin mein Visio-Dokument eingefügt :

Geben Sie hier die Bildbeschreibung ein

Die Größe der Form ist viel größer als das tatsächliche Raster:

Geben Sie hier die Bildbeschreibung ein

Wie kann ich die Form so ändern, dass sie zum tatsächlichen Raster passt?

Ich verwende Microsoft Visio 2013 Professional unter Windows 7.

Zugriff auf die Datei, wenn Sie es versuchen möchten.

Franck Dernoncourt
quelle
3
Interessant ist dies, wenn Sie die Standardwerte der Zeilen und Spalten ändern. Ich denke, dies geschieht, weil diese Formen alt sind und in Visual 2013 nicht aktualisiert wurden. Ich glaube nicht, dass dies das beabsichtigte Verhalten war. Dies sollte das Visio-Team beheben.
Devid
1
Gute Frage. Manchmal bin ich auf dasselbe Problem gestoßen und kenne auch keine Lösung.
Hoang Huynh
3
Amos
Derzeit war das Einfügen einer Excel-Tabelle direkt in ein Dokument eine Problemumgehung für mich.
Joel B

Antworten:

4

Interessanterweise geschieht dies, wenn Sie die Standardwerte der Zeilen und Spalten einer Rasterform ändern (z. B. in Vorlagendiagrammen und -diagrammen). Die spezifischen Formen sind alt und wurden in Visio 2013 nicht aktualisiert. Dies war nicht das beabsichtigte Verhalten der Entwickler. Dies sollte vom Visio-Team behoben werden, daher sollte es dem Visio-Team bei Microsoft gemeldet werden.

Devid
quelle
1

Unter http://visualsignals.typepad.co.uk/vislog/2012/02/modifying-the-visio-grid-shape.html gibt es einen nützlichen Artikel, in dem dies und die Gründe dafür erläutert werden (es ist etwas zu tun) wobei sich die Größe der Zellen nicht korrekt ändert, wenn sie nicht sichtbar sind).

Der Autor bietet eine ähnliche Form, die Sie herunterladen und stattdessen verwenden können, die das richtige Verhalten aufweist, sowie den Quellcode zum Generieren in einem späteren Beitrag .

Der VB.NET-Code, mit dem er die feste Form generiert, ist unten aufgeführt:

Module Module1

    Private Const User_RowHeight_Name = "RowHeight"
    Private Const User_ColumnWidth_Name = "ColumnWidth"
    Private Const User_RowIndex_Name = "RowIndex"
    Private Const User_ColumnIndex_Name = "ColumnIndex"
    Private Const User_IsVisible_Name = "IsVisible"
    Private Const User_ResizeModeIndex_Name = "ResizeModeIdx"

    Private Const Prop_Rows_Name = "Rows"
    Private Const Prop_Columns_Name = "Columns"
    Private Const Prop_ResizeMode_Name = "ResizeMode"
    Private Const Prop_RowHeight_Name = "RowHeight"
    Private Const Prop_ColumnWidth_Name = "ColumnWidth"

    Private Const Format_Cell_Delimiter = ";"


    Public Sub GridBuilder()

    If ActiveWindow.Type = VisWinTypes.visDrawing Then
        Call BuildGrid(ActiveWindow, _
                       10, 10, _
                       "100 mm", "50 mm", _
                       "25 mm", "5 mm")
    Else
        MsgBox "Please select a drawing window before running the Grid Builder code.", vbOKOnly, "Grid Builder"
    End If

    End Sub


    Private Sub BuildGrid(ByRef wdw As Window, _
                          ByVal rowCount As Integer, columnCount As Integer, _
                          strGridWidth As String, strGridHeight As String, _
                          strCellWidth As String, strCellHeight As String)

    Dim pag As Page
    Dim shpParent As Shape


    '  Create Grid parent shape
    Set pag = ActivePage
    Set shpParent = pag.DrawRectangle(3, 3, 5, 5)
    With shpParent

        '  Add new User, Shape Data and Actions sections
        .AddSection visSectionUser
        .AddSection visSectionProp
        .AddSection visSectionAction

        '  Add Row / Column count Shape Data cells
        .AddNamedRow visSectionProp, Prop_Rows_Name, visTagDefault
        .CellsSRC(visSectionProp, visRowLast, visCustPropsType).FormulaU = "1"
        .CellsSRC(visSectionProp, visRowLast, visCustPropsFormat).FormulaU = """" & CreateNumericIndexString(1, rowCount, Format_Cell_Delimiter) & """"
        .CellsSRC(visSectionProp, visRowLast, visCustPropsValue).FormulaU = "INDEX(" & rowCount - 1 & ",Prop." & Prop_Rows_Name & ".Format)"
        .AddNamedRow visSectionProp, Prop_Columns_Name, visTagDefault
        .CellsSRC(visSectionProp, visRowLast, visCustPropsType).FormulaU = "1"
        .CellsSRC(visSectionProp, visRowLast, visCustPropsFormat).FormulaU = """" & CreateNumericIndexString(1, columnCount, Format_Cell_Delimiter) & """"
        .CellsSRC(visSectionProp, visRowLast, visCustPropsValue).FormulaU = "INDEX(" & columnCount - 1 & ",Prop." & Prop_Columns_Name & ".Format)"

        '  Add resize mode cells
        .AddNamedRow visSectionProp, Prop_ResizeMode_Name, visTagDefault
        .CellsSRC(visSectionProp, visRowLast, visCustPropsType).FormulaU = "1"
        .CellsSRC(visSectionProp, visRowLast, visCustPropsFormat).FormulaU = """Size parent to cells" & Format_Cell_Delimiter & "Size cells to parent"""
        .CellsSRC(visSectionProp, visRowLast, visCustPropsValue).FormulaU = "INDEX(0,Prop." & Prop_ResizeMode_Name & ".Format)"
        .AddNamedRow visSectionUser, User_ResizeModeIndex_Name, visTagDefault
        .CellsSRC(visSectionUser, visRowLast, visUserValue).FormulaU = "LOOKUP(Prop." & Prop_ResizeMode_Name & ",Prop." & Prop_ResizeMode_Name & ".Format)"

        '  Add RowHeight / ColumnWidth User cells
        .AddNamedRow visSectionProp, Prop_RowHeight_Name, visTagDefault
        .CellsSRC(visSectionProp, visRowLast, visCustPropsType).FormulaU = "2"
        .CellsSRC(visSectionProp, visRowLast, visCustPropsValue).FormulaU = strCellHeight
        .CellsSRC(visSectionProp, visRowLast, visCustPropsInvis).FormulaU = "User." & User_ResizeModeIndex_Name & "=1"
        .AddNamedRow visSectionProp, Prop_ColumnWidth_Name, visTagDefault
        .CellsSRC(visSectionProp, visRowLast, visCustPropsType).FormulaU = "2"
        .CellsSRC(visSectionProp, visRowLast, visCustPropsValue).FormulaU = strCellWidth
        .CellsSRC(visSectionProp, visRowLast, visCustPropsInvis).FormulaU = "User." & User_ResizeModeIndex_Name & "=1"

        '  Add RowHeight / ColumnWidth Shape Data cells
        .AddNamedRow visSectionUser, User_RowHeight_Name, visTagDefault
        .CellsSRC(visSectionUser, visRowLast, visUserValue).FormulaU = "IF(User." & User_ResizeModeIndex_Name & "=0,Prop." & Prop_RowHeight_Name & ",Height/Prop." & Prop_Rows_Name & ")"
        .AddNamedRow visSectionUser, User_ColumnWidth_Name, visTagDefault
        .CellsSRC(visSectionUser, visRowLast, visUserValue).FormulaU = "IF(User." & User_ResizeModeIndex_Name & "=0,Prop." & Prop_ColumnWidth_Name & ",Width/Prop." & Prop_Columns_Name & ")"

        '  Set Width and Height cells
        .CellsSRC(visSectionObject, visRowXFormOut, visXFormHeight).FormulaU = "IF(User." & User_ResizeModeIndex_Name & "=0,Prop." & Prop_RowHeight_Name & "*Prop." & Prop_Rows_Name & ",SETATREFEXPR(" & strGridHeight & "))"
        .CellsSRC(visSectionObject, visRowXFormOut, visXFormWidth).FormulaU = "IF(User." & User_ResizeModeIndex_Name & "=0,Prop." & Prop_ColumnWidth_Name & "*Prop." & Prop_Columns_Name & ",SETATREFEXPR(" & strGridWidth & "))"


        '  Add Actions cells for context menu
        .AddNamedRow visSectionAction, "Resize0", visTagDefault
        .CellsSRC(visSectionAction, visRowLast, visActionMenu).FormulaU = "INDEX(0,Prop." & Prop_ResizeMode_Name & ".Format)"
        .CellsSRC(visSectionAction, visRowLast, visActionAction).FormulaU = "SETF(GetRef(Prop." & Prop_ResizeMode_Name & ")," & """INDEX(0""" & "&LISTSEP()&" & """Prop." & Prop_ResizeMode_Name & ".Format)""" & ")"
        .CellsSRC(visSectionAction, visRowLast, visActionChecked).FormulaU = "User." & User_ResizeModeIndex_Name & "=0"
        .AddNamedRow visSectionAction, "Resize1", visTagDefault
        .CellsSRC(visSectionAction, visRowLast, visActionMenu).FormulaU = "INDEX(1,Prop." & Prop_ResizeMode_Name & ".Format)"
        .CellsSRC(visSectionAction, visRowLast, visActionAction).FormulaU = "SETF(GetRef(Prop." & Prop_ResizeMode_Name & ")," & """INDEX(1""" & "&LISTSEP()&" & """Prop." & Prop_ResizeMode_Name & ".Format)""" & ")"
        .CellsSRC(visSectionAction, visRowLast, visActionChecked).FormulaU = "User." & User_ResizeModeIndex_Name & "=1"

        '  Set protection and behaviour cells
        .CellsSRC(visSectionObject, visRowLock, visLockCalcWH).FormulaU = "1"
        .CellsSRC(visSectionObject, visRowLock, visLockTextEdit).FormulaU = "1"
        .CellsSRC(visSectionObject, visRowLock, visLockVtxEdit).FormulaU = "1"
        .CellsSRC(visSectionObject, visRowGroup, visGroupDisplayMode).FormulaU = "1"
        .ConvertToGroup
    End With


    'Generate grid cell shapes and add them to the parent
    Dim iRow As Integer
    Dim iCol As Integer
    Dim shpTempCell As Shape

    Dim GridSelection As Selection
    wdw.DeselectAll
    Set GridSelection = wdw.Selection
    GridSelection.Select shpParent, visSelect

    For iRow = 1 To rowCount
        For iCol = 1 To columnCount
            Set shpTempCell = CreateGridCell(shpParent, iRow, iCol)
            If Not shpTempCell Is Nothing Then
                GridSelection.Select shpTempCell, visSelect
                Set shpTempCell = Nothing
            End If
        Next iCol
    Next iRow

    GridSelection.AddToGroup

    End Sub

    Private Function CreateGridCell(shpParent As Shape, rowIdx As Integer, colIdx As Integer) As Shape
    Dim shpCell As Shape

    If Not shpParent Is Nothing Then
        Dim pag As Page
        Dim parentId As Integer

        Set pag = shpParent.Parent
        parentId = shpParent.ID
        Set shpCell = pag.DrawRectangle(1, 1, 2, 2)

        With shpCell
            .AddSection visSectionUser
            .AddNamedRow visSectionUser, User_RowIndex_Name, visTagDefault
            .CellsSRC(visSectionUser, visRowLast, visUserValue).FormulaU = rowIdx
            .AddNamedRow visSectionUser, User_ColumnIndex_Name, visTagDefault
            .CellsSRC(visSectionUser, visRowLast, visUserValue).FormulaU = colIdx

            'Set shape visibility
            .AddNamedRow visSectionUser, User_IsVisible_Name, visTagDefault
            '  =IF(OR(User.RowIndex>Sheet.1!Prop.Rows,User.ColumnIndex>Sheet.1!Prop.Columns),0,1)
            .CellsSRC(visSectionUser, visRowLast, visUserValue).FormulaU = "IF(OR(User." & User_RowIndex_Name & ">Sheet." & parentId & "!Prop." & Prop_Rows_Name & ",User." & User_ColumnIndex_Name & ">Sheet." & parentId & "!Prop." & Prop_Columns_Name & "),0,1)"
            .CellsSRC(visSectionFirstComponent, visRowComponent, visCompNoShow).FormulaU = "NOT(User." & User_IsVisible_Name & ")"

            'Set width and height
            .CellsSRC(visSectionObject, visRowXFormOut, visXFormHeight).FormulaU = "GUARD(Sheet." & parentId & "!User." & User_RowHeight_Name & ")"
            .CellsSRC(visSectionObject, visRowXFormOut, visXFormWidth).FormulaU = "GUARD(Sheet." & parentId & "!User." & User_ColumnWidth_Name & ")"

            'Set position (PinX and PinY)
            '  =Sheet.1!User.ColumnWidth*IF(User.IsVisible,User.ColumnIndex,1)-Sheet.1!User.ColumnWidth/2
            '  =Sheet.1!Height-Sheet.1!User.RowHeight*IF(User.IsVisible,User.RowIndex,1)+Sheet.1!User.RowHeight/2
            .CellsSRC(visSectionObject, visRowXFormOut, visXFormPinX).FormulaU = "GUARD(Sheet." & parentId & "!User." & User_ColumnWidth_Name & "*IF(User." & User_IsVisible_Name & ",User." & User_ColumnIndex_Name & ",1)-Sheet." & parentId & "!User." & User_ColumnWidth_Name & "/2)"
            .CellsSRC(visSectionObject, visRowXFormOut, visXFormPinY).FormulaU = "GUARD(Sheet." & parentId & "!Height-Sheet." & parentId & "!User." & User_RowHeight_Name & "*IF(User." & User_IsVisible_Name & ",User." & User_RowIndex_Name & ",1)+Sheet." & parentId & "!User." & User_RowHeight_Name & "/2)"

            .CellsSRC(visSectionObject, visRowLock, visLockVtxEdit).FormulaU = "1"
            .CellsSRC(visSectionObject, visRowLock, visLockRotate).FormulaU = "1"
            .CellsSRC(visSectionObject, visRowLock, visLockDelete).FormulaU = "1"
        End With


    End If

    Set CreateGridCell = shpCell

    End Function


    Private Function CreateNumericIndexString(ByVal startInt As Integer, endInt As Integer, delimiter As String) As String
    Dim i As Integer
    Dim IdxString As String

    For i = startInt To endInt
        IdxString = IdxString & CStr(i)
        If Not i = endInt Then
            IdxString = IdxString & delimiter
        End If
    Next i

    CreateNumericIndexString = IdxString

    End Function

End Module
Rhumborl
quelle
Bitte zitieren Sie die wesentlichen Teile der Antwort aus den Referenzlinks, da die Antwort ungültig werden kann, wenn sich die verlinkten Seiten ändern.
DavidPostill
1

Markieren Sie die gesamte Form des Gitters (einschließlich des überschüssigen Platzes) und heben Sie die Gruppierung der Felder auf. Wählen Sie die verwendeten Felder aus, gruppieren Sie sie separat und verschieben Sie sie zur Seite. Es verbleiben weiterhin die verbleibenden Felder, die nicht an derselben ursprünglichen Position verwendet werden. Markieren Sie sie daher und entfernen Sie sie von der Seite (schneiden Sie sie aus). Keine traditionelle Art, das Problem zu lösen, aber es war die einzige Möglichkeit, dies zu tun.

John
quelle
Danke, ich weiß nicht, warum Sie herabgestuft werden. Ihre Problemumgehung funktioniert.
user3651113