Přidat otázku mezi oblíbenéZasílat nové odpovědi e-mailemVyřešeno VBA Excel – Presúvanie riadkov v rámci tabuľky

Aha, tak to zadanie som predtým nepochopil správne. Takže aj s tým posúvaním riadkov a nepresúvaním na prázdnu bunku by to mohlo vyzerať takto:

Dim Source As Range

Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
    Dim aTable As Range
    Dim aRange As Range

    Set aTable = Range("B3:H22")
    Set aRange = Intersect(Target.Resize(1, 1), aTable.Resize(aTable.Rows.Count, 1))
    If Not aRange Is Nothing Then
        Set Source = aRange.Resize(1, aTable.Columns.Count)
        Source.Copy
        Cancel = True
    End If
End Sub

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
    Dim aTable As Range
    Dim aRange As Range
    Dim aValue As Variant
    Dim nRows As Integer
    
    If Not Source Is Nothing Then
        If Application.CutCopyMode = xlCopy Then
            Set aTable = Range("B3:H22")
            Set aRange = Intersect(Target.Resize(1, 1), aTable.Resize(aTable.Rows.Count, 1))
            If Not aRange Is Nothing Then
                If Target.Resize(1, 1).Value <> "" Then
                    nRows = Target.Row - Source.Row
                    Select Case Sgn(nRows)
                        Case 1
                            Set aRange = Source.Offset(1)
                        Case -1
                            Set aRange = Target
                        Case 0
                            Set aRange = Nothing
                    End Select
                    If Not aRange Is Nothing Then
                        Set aRange = aRange.Resize(Abs(nRows), aTable.Columns.Count)
                        aValue = Source.Value
                        aRange.Offset(-Sgn(nRows)) = aRange.Value
                        Source.Offset(nRows) = aValue
                    End If
                End If
            End If
            Application.CutCopyMode = False
        End If
        Set Source = Nothing
    End If
End Sub

Vo VBA nie je možné odlíšiť ľavé a pravé tlačidlo myši. Pri ľavom tlačidle sa vyberie bunka, čo spustí udalosť SelectionChange. Pri pravom tlačidle sa síce spustí udalosť BeforeRightClick, ale pred touto udalosťou sa spustí ešte aj SelectionChange, pretože sa zmení vybraná bunka.

Alternatíva pomocou klávesy Ctrl je realizovateľná, ale musí sa využiť Windows API, pretože priamo cez VBA sa nedá zistiť, či bol Ctrl stlačený alebo nie.

Reakce na odpověď

1 Zadajte svou přezdívku:
2 Napište svou odpověď:
3 Pokud chcete dostat ban, zadejte libovolný text:

Zpět do poradny