macro starten na invoegen rij in excel

Status
Niet open voor verdere reacties.

henkhoogerbrug

Gebruiker
Lid geworden
25 sep 2008
Berichten
107
Wanneer ik in excel een regel invoeg, dan wordt o.a. de opmaak van de bovenliggende rij overgenomen. Ik wil echter maar een gedeelte van de opmaak overnemen.

Probleem is echter dat ik niet weet hoe ik een macro kan starten zodra ik een regel heb ingevoegd (alle mogelijke manieren van regels invoegen moet ik ondervangen).

Ik ben een en ander aan het proberen met Selection_Change (worksheet1).
Ik heb een global variabele waarin het aantal rijen wordt berekend die ik gebruik (na invoegen is dat er dus 1 extra).

Ik kom er echter niet uit hoe ik dit event (invoegen rij in excel) op een nette manier kan ondervangen.
Hopelijk hebben jullie wel een idee en willen jullie dat met me delen...
 
Je kunt het ook ander benaderen: het invoeren van gegevens in een rij kan worden beschouwd als een uitbreiding van het 'database-gebied'.

Code:
Private Sub Worksheet_Change(ByVal Target As Range)
  If Target.Row > 1 Then
    Application.EnableEvents = False
    c0 = Target
    Target.Offset(-1).EntireRow.Copy Rows(Target.Row)
    Target.Entirerow.ClearContents
    Target = c0
    Application.EnableEvents = True
  End If
End Sub
 
@snb bedankt voor je snelle reactie. Helaas begrijp ik je code niet helemaal. Als ik in een werkblad een rij met gegevens wil invoeren, dan blijft alleen de laatst ingevoerde maar zichtbaar. (dus als ik de cijfers 1 t/m 9 wil invoeren, dan begin ik in A1: 1, zodra ik dan in B1: 2 invoer dan verdwijnt A1: 1, etc.)

Ik heb echter op via lang zoeken op internet onderstaande code gevonden ik begrijp alleen niet echt wat die code doet. Misschien kan iemand er wat opmerkingen bij maken, zodat ik begrijp wat er gebeurt.
Wat doet AssignMacro?

De Sub EventHack() moet je eerst uitvoeren om alles werkend te krijgen, met de Sub EventReset() kun je dit weer ongedaan maken.

Het belangrijkste is echter dat dit wel is wat ik zocht!


Code:
Sub EventHack()
AssignMacro "JudgeRng"
End Sub
Sub EventReset()
AssignMacro ""
End Sub

Private Sub AssignMacro(ByVal strProc As String)
Dim lngId As Long
Dim CtrlCbc As CommandBarControl
Dim CtrlCbcRet As CommandBarControls
Dim arrIdNum As Variant

' 295 Insert Cells from worksheet menu
' 296 Insert rows from worksheet menu
' 945 Insert from right click menu (replaced with 3183)

arrIdNum = Array(295, 296, 3183)
For lngId = LBound(arrIdNum) To UBound(arrIdNum)
Set CtrlCbcRet = CommandBars.FindControls(ID:=arrIdNum(lngId))
For Each CtrlCbc In CtrlCbcRet
CtrlCbc.OnAction = strProc
Next
Set CtrlCbcRet = Nothing
Next
End Sub

Sub JudgeRng()
If Not TypeOf Selection Is Range Then Exit Sub
With Selection
If .Address = .EntireRow.Address Then
Call InsertRows("Row:" & .Row, xlUp)
Else
Application.Dialogs(xlDialogEditDelete).Show
End If
End With
End Sub

Sub InsertRows(ByVal str, ByVal lngDerec As Long)
MsgBox "Inserted: " & str & vbCrLf & "Your event code would go here."
Selection.Insert lngDerec

[EIGEN CODE INVOEREN, MSGBOX WEGHALEN]

End Sub
 
Dag Henk,

Ik ben zo vrij om te reageren op deze thread, het aanroepen van een macro bij invoegen van een rij is ook wat ik wil. De methodiek van snb heeft niet mijn voorkeur want een worksheet_change macro vind ik niet wenselijk.

Met de code van Colo, die Henk plaatst, wordt mijn bestand direct onbruikbaar. Henk, als jij nog meer inzicht hebt gekregen in de code hoor ik het graag, andere forumleden zijn ook welkom om de originele vraag zoals uitgezet door Henk te beantwoorden.

Hartelijke groet,
Maarten
 
Dit topic is gedateert. Reageren in een oud topic is niet relevant en ook niet gewenst. Topic gaat op slot. De regel luid: topics
ouder dan drie maanden mogen met rust gelaten mag worden.
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan