Wie verschiebt man Zellen in einer Tabelle in Microsoft Word 2013 nach dem Entfernen/Einfügen um eine Stelle?

Wie verschiebt man Zellen in einer Tabelle in Microsoft Word 2013 nach dem Entfernen/Einfügen um eine Stelle?

Wenn ich eine Tabelle wie diese habe:

A B
C D
E F

Wenn ich Zelle B entferne, möchte ich, dass alle Zellen um eine Stelle in Richtung A verschoben werden, und zwar wie folgt:

A C
D E
F

Wie erreicht man das? Und wie erreicht man das Gegenteil - eine einzelne Zelle irgendwo einzufügen und alle anderen Zellen um eine Stelle zu verschieben?

Antwort1

Vor ein paar Tagen brauchte ich etwas wie das, wonach knezmilos gefragt hatte, und ich konnte nichts finden, um es zu tun. Also habe ich ein VBA-Makro (Word 2016) erstellt, um genau das zu tun. Das Makro funktioniert auf vier verschiedene Arten:

  1. Alle Zellen nach rechts bis zum Ende der Tabelle verschieben (Public Sub MoveCellsRight)
  2. Alle Zellen nach rechts verschieben, bis zur ersten leeren Zelle (Public Sub MoveCellsRightFirstBlankCell)
  3. Alle Zellen nach links bis zum Tabellenanfang verschieben (Public Sub MoveCellsLeft)
  4. Alle Zellen nach links verschieben bis zur ersten leeren Zelle (Public Sub MoveCellsLeftFirstBlankCell)

Dieses MakroWIRD NICHT:

  1. Arbeiten Sie mit Tabellen innerhalb einer Zelle.
  2. Arbeiten Sie mit geteilten Zellen (jede Zeile muss die gleiche Anzahl Spalten haben).
  3. Behält das Format der Zelle bei. (Ich hoffe, dass jemand dieses Makro verbessert, indem er diese Funktion hinzufügt).

Hier ist das Makro:


Option Explicit

Dim vmCurrentTableIndex As Integer
Dim vmCurrentTableRowCount As Integer
Dim vmCurrentTableColCount As Integer
Dim vmCurrentCellRow As Integer
Dim vmCurrentCellCol As Integer
Dim vmDirection As String
Enum StopCellMode
    FirstLastCell = 0
    FirstBlankCell = 1
End Enum

Public Sub MoveCellsRight()
    If SetModuleVariables("right") Then
        If CheckCurrentCellPosition() Then
            MoveCellContent (FirstLastCell)
        End If
    End If
End Sub

Public Sub MoveCellsLeft()
    If SetModuleVariables("left") Then
        If CheckCurrentCellPosition() Then
            MoveCellContent (FirstLastCell)
        End If
    End If
End Sub

Public Sub MoveCellsRightFirstBlankCell()
    If SetModuleVariables("right") Then
        If CheckCurrentCellPosition() Then
            MoveCellContent (FirstBlankCell)
        End If
    End If
End Sub

Public Sub MoveCellsLeftFirstBlankCell()
    If SetModuleVariables("left") Then
        If CheckCurrentCellPosition() Then
            MoveCellContent (FirstBlankCell)
        End If
    End If
End Sub

Private Function SetModuleVariables(vpDirection As String) As Boolean
    Dim vsOK As Boolean
    Dim vsMsgBoxValue As Integer
    'Check if the [cursor | insertion point] is inside a table.
    If ActiveDocument.ActiveWindow.Selection.Information(wdWithInTable) Then
        vsOK = True
        'Get the index of the current table. / Source: https://wordmvp.com/FAQs/MacrosVBA/GetIndexNoOfPara.htm
        vmCurrentTableIndex = ActiveDocument.Range(0, Selection.Tables(1).Range.End).Tables.Count
        vmCurrentTableRowCount = ActiveDocument.Tables(vmCurrentTableIndex).Rows.Count
        vmCurrentTableColCount = ActiveDocument.Tables(vmCurrentTableIndex).Columns.Count
        vmCurrentCellRow = ActiveDocument.ActiveWindow.Selection.Cells(1).RowIndex
        vmCurrentCellCol = ActiveDocument.ActiveWindow.Selection.Cells(1).ColumnIndex
        vmDirection = vpDirection
    Else
        vsMsgBoxValue = MsgBox("This command can be executed only within a table.", vbInformation, "Error")
        vsOK = False
    End If
    SetModuleVariables = vsOK
End Function

Private Function CheckCurrentCellPosition() As Boolean
    Dim vsOK As Boolean
    Dim vsMsgBoxValue As Integer
    vsOK = True
    If vmDirection = "right" Then
        If vmCurrentCellRow = vmCurrentTableRowCount And vmCurrentCellCol = vmCurrentTableColCount Then
            vsMsgBoxValue = MsgBox("This is the last cell. There is no cell to move to the right.", vbCritical, "Error")
            vsOK = False
        End If
    Else
        If vmCurrentCellRow = 1 And vmCurrentCellCol = 1 Then
            vsMsgBoxValue = MsgBox("This is the first cell. There is no cell to move to the left.", vbCritical, "Error")
             vsOK = False
        End If
    End If
    CheckCurrentCellPosition = vsOK
End Function

Private Sub MoveCellContent(vpStopCellMode As StopCellMode)
    Dim vsCol As Integer
    Dim vsRow As Integer
    Dim vsStartRow As Integer
    Dim vsStartCol As Integer
    Dim vsEndRow As Integer
    Dim vsEndCol As Integer
    Dim vsStep As Integer
    Dim IsStartColSet As Boolean
    Dim vsCurrentCellContent As String
    Dim vsPreviousCellContent As String
    Dim vsLenght As Integer
    vsPreviousCellContent = ""
    IsStartColSet = False
    vsStartRow = vmCurrentCellRow
    vsStartCol = vmCurrentCellCol
    If vmDirection = "right" Then
        vsStep = 1
        vsEndRow = vmCurrentTableRowCount
        vsEndCol = vmCurrentTableColCount
    Else
        vsStep = -1
        vsEndRow = 1
        vsEndCol = 1
    End If
    For vsRow = vsStartRow To vsEndRow Step vsStep
        For vsCol = vsStartCol To vsEndCol Step vsStep
            vsLenght = Len(ActiveDocument.Tables(vmCurrentTableIndex).Cell(vsRow, vsCol).Range.Text) - 2
            vsCurrentCellContent = Left(ActiveDocument.Tables(vmCurrentTableIndex).Cell(vsRow, vsCol).Range.Text, vsLenght)
            ActiveDocument.Tables(vmCurrentTableIndex).Cell(vsRow, vsCol).Range.Text = vsPreviousCellContent
            vsPreviousCellContent = vsCurrentCellContent
            If vsCurrentCellContent = "" And vpStopCellMode = FirstBlankCell Then
                Exit Sub
            End If
        Next
        If IsStartColSet = False Then
            If vmDirection = "right" Then
                vsStartCol = 1
            Else
                vsStartCol = vmCurrentTableColCount
            End If
            IsStartColSet = True
        End If
    Next
End Sub

Antwort2

Antwortversuch:
Schreiben Sie ein Makro, um:

  1. Erstellen Sie eine separate Kopie der letzten Zelle in der Tabelle unterhalb der Tabelle.
  2. die kopierte Zelle aus der Tabelle entfernen,
  3. Bewegen Sie den Cursor zurück zur letzten verbleibenden Zelle, um eine Wiederholung vorzubereiten.

Testen Sie es und versuchen Sie dann, den Randabstand für die Tabellenausrichtung zu entfernen
und die Randdarstellung anzupassen, um ein funktionierendes Design/Erscheinungsbild zu erhalten.
(Nicht ausprobiert)


Ich probiere Dinge in LibreOffice (v5.1.6.2) Writer aus, um beim Aufzeichnen des Makros zu helfen:

Hinweis: Ich versuche nicht, dies in Write aufzuzeichnen, sondern zeige nur, wie es in Word funktionieren KÖNNTE, vorausgesetzt, es hat die gleichen Tastenkombinationen wie Write. Ich habe derzeit keinen Zugriff auf Word Dies ist ein Beispiel für das DENKEN, das auf das Problem anzuwenden ist. Ich versuche nicht, eine spezifische Antwort auf das Q zu finden.

Menü > Tabelle > Tabelle einfügen (STRG+F12), standardmäßig 2x2-Tabelle ...

Geben Sie Textzeilen mindestens in die letzten beiden Zellenzeilen ein.

Drücken Sie den Cursor nach unten, um die Tabelle zu verlassen, und drücken Sie die EINGABETASTE, um mindestens eine zusätzliche Zeile zwischen der Tabelle und allen kommenden Einfügungen einzufügen.

Nun scheint die folgende Beschreibung vielleicht „fortgeschritten“ zu sein – die praktische Umsetzung ist es jedoch NICHT.

Die Aufzeichnung muss dort beginnen, wo die letzte Zellenzeile herauskopiert wird. Also:

  1. Halten Sie die STRG-Taste gedrückt und drücken Sie den Cursor zweimal nach oben.
    Der Cursor befindet sich jetzt oben links in der rechten Zelle, in der letzten Zeile der Tabelle (dem Startpunkt).
  2. Aufnahme starten (bei Verwendung in Word)
  3. Wählen Sie Menü > Tabelle > Tabelle teilen
    (die letzte Tabellenzeile wird in eine separate Tabelle aufgeteilt)
  4. Halten Sie nun STRG und UMSCHALT gedrückt und drücken Sie zweimal Ende.
    Schreiben Sie die ausgewählte gesamte rechte Zelle der einzeiligen und zweispaltigen Tabelle.
  5. Halten Sie die STRG-Taste gedrückt und drücken Sie die X-Taste, um den Inhalt auszuschneiden.
  6. Halten Sie STRG+UMSCHALT gedrückt und drücken Sie Pos1.
    Beide Zellen sind ausgewählt
  7. Wählen Sie Menü > Tabelle > Zellen verbinden
  8. Cursor zwei Zeilen nach unten bewegen, einfügen (STRG+V)
  9. Halten Sie die STRG-Taste gedrückt und bewegen Sie den Cursor jeweils um einen Schritt nach oben, bis er sich in einer ähnlichen Position befindet wie nach Schritt 1) ​​oben.
  10. Aufzeichnung beenden (bei Verwendung von Word).

Die letzte Zeile der Tabelle wurde in zwei separate „Tabellen“ mit jeweils einer Zelle extrahiert.

Wenn Sie dem Makro nun eine Tastenkombination zuweisen, können Sie loslegen: Am einfachsten ist es, einfach die Taste gedrückt zu halten, während das Makro die Tabelle „auffrisst“. Bei einer großen Tabelle dauert das wahrscheinlich ein paar Minuten, bei größeren Tabellen länger.

verwandte Informationen