![]() |
![]() |
|
![]() |
![]() |
|
Programmierung Rat & Tat für Programmierer |
![]() |
|
Themen-Optionen | Ansicht |
![]() |
#1 |
Elite
![]() Registriert seit: 18.11.2001
Beiträge: 1.130
|
![]() 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 |
![]() |
![]() |
![]() |
#2 |
Inventar
![]() Registriert seit: 13.06.2001
Beiträge: 1.830
|
![]() Das Stichwort ist "Ereignis", das das du suchst nennt sich:
"SelectionChange-Ereignis". Befrag' mal deine Excel-Vba Hilfe. Jak
____________________________________
Join the DNRC | Godwin\'s Law (thx@stona) Documentation is like sex: If it\'s good, it\'s very, very good. If it\'s bad, it\'s better than nothing. \"In theory, theory and practice are the same. In practice, they are not\" (Lawrence Berra) |
![]() |
![]() |
![]() |
#3 | |
Elite
![]() Registriert seit: 18.11.2001
Beiträge: 1.130
|
![]() Zitat:
Bleibt noch die Automatik über ![]() mfg Excal |
|
![]() |
![]() |
![]() |
#4 |
Elite
![]() Registriert seit: 18.11.2001
Beiträge: 1.130
|
![]() 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 |
![]() |
![]() |
![]() |
#5 |
Inventar
![]() Registriert seit: 13.06.2001
Beiträge: 1.830
|
![]() 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) End Sub Range("B23").Select reinschreiben, speichern und testen. Wenn das geht, probier mal den Restlichen Code reinzuschreiben. Jak
____________________________________
Join the DNRC | Godwin\'s Law (thx@stona) Documentation is like sex: If it\'s good, it\'s very, very good. If it\'s bad, it\'s better than nothing. \"In theory, theory and practice are the same. In practice, they are not\" (Lawrence Berra) |
![]() |
![]() |
![]() |
#6 |
Elite
![]() Registriert seit: 18.11.2001
Beiträge: 1.130
|
![]() 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 ![]() ![]() |
![]() |
![]() |
![]() |
#7 |
Elite
![]() Registriert seit: 18.11.2001
Beiträge: 1.130
|
![]() 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 |
![]() |
![]() |
![]() |
#8 |
Inventar
![]() Registriert seit: 13.06.2001
Beiträge: 1.830
|
![]() 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
____________________________________
Join the DNRC | Godwin\'s Law (thx@stona) Documentation is like sex: If it\'s good, it\'s very, very good. If it\'s bad, it\'s better than nothing. \"In theory, theory and practice are the same. In practice, they are not\" (Lawrence Berra) |
![]() |
![]() |
![]() |
#9 |
Elite
![]() Registriert seit: 18.11.2001
Beiträge: 1.130
|
![]() @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 |
![]() |
![]() |
![]() |
#10 |
Inventar
![]() Registriert seit: 13.06.2001
Beiträge: 1.830
|
![]() 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
____________________________________
Join the DNRC | Godwin\'s Law (thx@stona) Documentation is like sex: If it\'s good, it\'s very, very good. If it\'s bad, it\'s better than nothing. \"In theory, theory and practice are the same. In practice, they are not\" (Lawrence Berra) |
![]() |
![]() |
![]() |
Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1) | |
|
|