Makro im Makro deaktivieren ?
Hallo Supprotgemeinde,
hab mal wieder so ein Problemchen.
folgender IST-Zustand
habe eine Tabelle in Excel, nun möchte ich eben per Makro an der aktiven Position eine "Zeile" kopieren und ebenfalls gleich einfügen.
Das sollte ja problemlos machbar sein. Allerdings hat die Sache einen kleinen Hacken.
Das Arbeitsblatt ist mit folgendem Makro versehen:
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If Not Intersect(Target, Range("B1:B3000")) Is Nothing Then Call CopyPA
End Sub
was ja heisst wird die Zelle "aktiv" führt er automatisch das Makro "COPYPA" aus.
Und da liegt das Problem, Versuche ich die Zeile zu makieren, wird ja immer sofort das genannte Makro ausgeführt und somit is Nix mit kopieren.
Vieleicht kennt ja jemand ne Lösung wie man das kurzfristik deaktivieren bzw. aktivieren kann.
Gruß Volker
Antwort schreiben
Antwort 1 von Hajo_Zi vom 02.03.2021, 13:18 Options
Hallo Volker,
Select braucht man in VBA zu 99,9% nicht. mache das kopieren und einfügen per VBA.
Gruß Hajo
Antwort 2 von korfuweb vom 02.03.2021, 13:23 Options
Halo Hajo,
wollte ich ja und zwar wie folgt :
Sub XZKOPIE()
i = ActiveCell.Row
Rows(i + 1 & ":" & i + 1).Select
Selection.Insert Shift:=xlDown
Rows(i & ":" & i).Select
Selection.Copy
Range("A" & i + 1).Select
ActiveSheet.Paste
End Sub
Aber da habe ich ja eben auch das Problem mit dem "automatisch" ausgeführtem Makro.
Gruß
Volker
Antwort 3 von Hajo_Zi vom 02.03.2021, 13:26 Options
Hallo Volker,
Option Explicit
Sub XZKOPIE()
i = ActiveCell.Row
Rows(i + 1 & ":" & i + 1).Insert Shift:=xlDown
Rows(i & ":" & i).Copy Range("A" & i + 1)
End Sub
Gruß Hajo
Antwort 4 von korfuweb vom 02.03.2021, 13:34 Options
Klasse !
Funktioniert soweit, er führt zwar das "automakro" immer noch aus aber jetzt zumindest nachdem er die Zeile eingefügt hat. dait kann ich ja im Moment noch leben.
Nur noch eine kurze Frage, kann ich dem "Kopier" makro irgendwie sagen, das er immer die Zeile 1999 an die aktuelle Stelle einfügen soll?
(Somit krieg ich dann immer ne schöne Leerzeile incl. den enthaltenen Formeln!
Gruß
Volker
Antwort 5 von nighty vom 02.03.2021, 13:40 Options
hi all ^^
vielleicht hilfreich
grus nighty
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Application.EnableEvents = False
If Selection.Count < 2 Then
If Not Intersect(Target, Range("B1:B3000")) Is Nothing Then Call CopyPA
End If
Application.EnableEvents = True
End Sub
Antwort 6 von korfuweb vom 02.03.2021, 16:18 Options
@ nighty
Danke für Deine Antwort
könntest du mir deinen Code mal bischen erläutern !
Will das ja schließlich lernen und mich würde da schon interessieren was der Code genau macht.
Gruß
Volker
Antwort 7 von nighty vom 02.03.2021, 19:32 Options
hi volker ^^
bin aber nicht so gut im beschreiben :-))
gruss nighty
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
'1) schaltet ein ereignis ab,um einen erneuten auftuf innerhalb des ereignisses zu umterbinden
Application.EnableEvents = False
'2)sollte ein bereich kopiert und eingefuegt werden,wird das ereignis ausgeloest,hier bewirkt die abfrage das dein code nur bei einer einzelnen zelle (wechsel des inhaltes) ausgefuehrt wird,daher <2 waere eine einzelne zelle
If Selection.Count < 2 Then
If Not Intersect(Target, Range("B1:B3000")) Is Nothing Then Call CopyPA
End If
'1) schaltet ein ereignis wieder an
Application.EnableEvents = True
End Sub