![]() |
Excel-Macro bei Bedarf automatisch ausführen lassen
Hab folgendes Problem :
Im Rechnungsformular soll eine Zeile(=Zellenreihe) automatisch eingefügt werden, wenn zuwenig Zeilen, bzw, Zeilen ausgefüllt. Macro funkt. zwar per Button: Sub AutoInsert() ' ' AutoAusfüllen Makro ' Makro am 17.01.2005 geschrieben von WR2 ' Rows("33:33").Select Selection.Copy Selection.Insert Shift:=xlDown Range("B34").Select End Sub Sollte aber automatisch funken, wenn ("B35")beschrieben ist. Das krieg ich nicht hin. Weiters Prob. ist, wenn Zeile eingefügt wird, ändert sich Bezugszelle(aus B35 wird B36, usw) Hat wer ne Idee? mfg Excal |
Das Stichwort ist "Ereignis", das das du suchst nennt sich:
"SelectionChange-Ereignis". Befrag' mal deine Excel-Vba Hilfe. Jak |
Zitat:
Bleibt noch die Automatik über :D mfg Excal |
Hab jetzt probiert als Klassenmodul:
Dim bln As Boolean Private Sub Worksheet_SelectionChange(ByVal Target As Excel.Range) Dim rng As Range Set rng = Range("B35") If Target.Address = rng.Address Then bln = True If bln = True And Target.Address <> rng.Adress Then Call AutoInsert bln = False End If End Sub Sub AutoInsert() ' AutoAusfüllen Makro ' Makro am 17.01.2005 von WR2 aufgezeichnet ' Rows("23:23").Select Selection.Copy Selection.Insert Shift:=xlDown Range("B23").Select End Sub Sollte nach Eingabe in B35 ausgeführt werden, funkt nicht. Wo ist der Wurm drin? mfg Excal |
Rechtsklick auf Tabelle1 ganz unten (oder wie das Sheet sonst so heißt), Code anzeigen.
Jetzt sollte der VBA-Editor gestartet werden. Linkes Dropdown "Worksheet" auswählen Rechtes Dropdown "SelectionChange" auswählen. Jetzt sollte dort etwa so was stehen: Code:
Private Sub Worksheet_SelectionChange(ByVal Target As Range) Range("B23").Select reinschreiben, speichern und testen. Wenn das geht, probier mal den Restlichen Code reinzuschreiben. Jak |
Merci, tausendmal, du hast mir sehr geholfen.
Funkt schon.:Fehler war, der Code war erst im Modul. Jetzt in Tabelle 1 und es funkt damit: Private Sub Worksheet_SelectionChange(ByVal Target As Range) If Target.Row =35 Then Rows("33:33").Select Selection.Copy Selection.Insert Shift:=xlDown Range("B34").Select End If End Sub mfg Excal :D :D |
Kleines Problem an Rande:wenn ich
Private Sub Worksheet_SelectionChange(ByVal Target As Range) If Target.Row> =35 Then Rows("33:33").Select Selection.Copy Selection.Insert Shift:=xlDown Range("B34").Select End If End Sub die Zielreihe gleich und grösser als 35 einsetze,wird immer eine Zeile eingefügt, sobald ich über Reihe 35 was eingebe. Bräuchte aber nur 35 bis 45 Geb ich als Ziel ein: "> =35 <45" fügt er pausenlos Zeilen ein ohne Unterbrechung. Wie kann ich das limitieren? Setz ich den kompletten IF-Block nochmal mit Ziel 36 ein, werden 2 Zeilen auf einmal eingefügt mfg Excal |
Ich weiß jetzt nicht auswendig wie Excel Bedingungen verknüpft (hab' im Moment kein Office bei der Hand).
Aber probier mal: If (Target.Row >= 35) && (Target.Row <= 45) Then ... Endif Vielleicht ist es auch AND, vielleicht muß man auch um's ganze noch eine Klammer machen, also: ((Target.Row >= 35) && (Target.Row <= 45)) Einfach mal ausprobieren ;). Jak |
@jak
Merci, haut schon hin. Du bist ja super gut mit Macros unterwegs Mit "And" und den Klammern hats gefunkt If (Target.Row >= 35)And (Target.Row <= 45) Then mfg Excal |
Danke für die Blumen! :)
An sich kenn' ich mich mit VBA nicht sooo toll aus. Ich hab' nur mal vor ein paar Jahren eine Lagerverwaltung in VBA gemacht (damals hab' ich mich noch nicht mit Db's ausgekannt...). Aber die Programmiersprachen ähneln sich alle, und wenn man ein paar Grundprinzipien kapiert hat und die Hilfe bedienen kann kommt man ziemlich weit. Jak |
Alle Zeitangaben in WEZ +2. Es ist jetzt 12:31 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
© 2009 FSL Verlag