WCM Forum

WCM Forum (http://www.wcm.at/forum/index.php)
-   Programmierung (http://www.wcm.at/forum/forumdisplay.php?f=17)
-   -   Excel-Macro bei Bedarf automatisch ausführen lassen (http://www.wcm.at/forum/showthread.php?t=156303)

Excalibur33 19.01.2005 08:24

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

jak 19.01.2005 08:49

Das Stichwort ist "Ereignis", das das du suchst nennt sich:
"SelectionChange-Ereignis".
Befrag' mal deine Excel-Vba Hilfe.

Jak

Excalibur33 19.01.2005 09:27

Zitat:

Original geschrieben von jak
Das Stichwort ist "Ereignis", das das du suchst nennt sich:
"SelectionChange-Ereignis".
Befrag' mal deine Excel-Vba Hilfe.

Jak

Merci, hilft mir weiter, damit krieg ich das mit der Bezugszelle hin. Werd ich probieren
Bleibt noch die Automatik über :D
mfg Excal

Excalibur33 19.01.2005 21:08

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

jak 19.01.2005 21:29

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

Da kannst du zum testen z.B. mal
Range("B23").Select
reinschreiben, speichern und testen. Wenn das geht, probier mal den Restlichen Code reinzuschreiben.

Jak

Excalibur33 20.01.2005 08:22

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

Excalibur33 25.01.2005 14:16

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

jak 25.01.2005 14:29

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

Excalibur33 25.01.2005 19:00

@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

jak 25.01.2005 19:34

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