Excel - Vba rij invoegen en bereikbereik behouden
Kwestie
In VBA, hoe kopieer / plaats ik (op zijn plaats) een rij en zorg ervoor dat als de bronrij een kolombereik kruist, de nieuwe rij ook binnen het bereik valt en het bereik met 1 groter wordt (di de ingevoegde rij) .Als de cursor zich op een rij boven aan een bereik bevindt, wordt de nieuwe rij geen lid van het bereik en wordt het bereik niet met één rij vergroot.
xlUp en xlDown maken geen verschil en laten ze ook niet weg (wat Excel zegt is het beste wat je kunt doen als je kolombereiken hebt die elkaar snijden).
Oplossing
Ik maak het volledig automatisch. U hoeft het bereik niet te benoemen. de macro "test" doet het. alleen de invoer die u moet zetten is dat u het nummer moet invoeren van de rij die moet worden verwijderd, bijvoorbeeld 2 of 3 of 4 wanneer het invoervak verschijnt. Macro "ongedaan maken" maakt ongedaan wat de macro doet.De database is als volgt van A1 naar A5
1
2
3
4
5
doe niets gewoon de macro "test" uitvoeren (beide macro's moeten gekopieerd worden in de module). Sorry dit is een ingewikkelde macro geworden. Ik heb geprobeerd 'formaat wijzigen' te gebruiken. op de een of andere manier lukte het me niet. Misschien kan een expert een betere oplossing bieden. Maar deze oplossing werkt. als je wilt dat het bereik van het benoemde bereik anders is, pas deze verklaring dan aan in de macro-test die bij je past
Bereik ("A2: a4"). Name = "myrange"
De macro's zijn:
Macro 1
Sub test ()Dim r As Range, j As Integer, k As Integer, m As Integer
ongedaan maken
Bereik ("A2: a4"). Name = "myrange"
Set r = Range ("myrange")
m = WorksheetFunction.Count (r)
'MsgBox m
k = InputBox ("typ het nummer van de te selecteren rij")
Tr (k) rechtenmenu.Selecteer
Set r = Range ("myrange")
j = Bereik ("myrange"). Cellen (1, 1) .Row
'MsgBox j
Selection.Rows.Insert
Als Selection.Row = j Dan
ActiveWorkbook.Names ( "mijnBereik"). Delete
Bereik (Cellen (Selection.Row, "A"), r.Cells (m, 1)). Name = "myrange"
Stop als
MsgBox-bereik ("myrange"). Adres
End Sub
Macro 2
Sub ongedaan maken ()Dim r As Range, c As Range
Stel r = Bereik (Bereik ("A1"), Cellen (Rows.Count, "A"). Einde (xlUp))
Voor elke c In r
Als c = "" Dan c.EntireRow.Delete
Volgende c
End Sub