WCM - Das österreichische Computer Magazin Forenübersicht
 

Zurück   WCM Forum > Rat & Tat > Programmierung

Programmierung Rat & Tat für Programmierer

Microsoft KARRIERECAMPUS

Antwort
 
Themen-Optionen Ansicht
Alt 19.01.2005, 08:24   #1
Excalibur33
Elite
 
Registriert seit: 18.11.2001
Beiträge: 1.130


Frage 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
Excalibur33 ist offline   Mit Zitat antworten
Alt 19.01.2005, 08:49   #2
jak
Inventar
 
Registriert seit: 13.06.2001
Beiträge: 1.830


Standard

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)
jak ist offline   Mit Zitat antworten
Alt 19.01.2005, 09:27   #3
Excalibur33
Elite
 
Registriert seit: 18.11.2001
Beiträge: 1.130


Standard

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
mfg Excal
Excalibur33 ist offline   Mit Zitat antworten
Alt 19.01.2005, 21:08   #4
Excalibur33
Elite
 
Registriert seit: 18.11.2001
Beiträge: 1.130


Standard

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
Excalibur33 ist offline   Mit Zitat antworten
Alt 19.01.2005, 21:29   #5
jak
Inventar
 
Registriert seit: 13.06.2001
Beiträge: 1.830


Standard

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
____________________________________
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)
jak ist offline   Mit Zitat antworten
Alt 20.01.2005, 08:22   #6
Excalibur33
Elite
 
Registriert seit: 18.11.2001
Beiträge: 1.130


Standard

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
Excalibur33 ist offline   Mit Zitat antworten
Alt 25.01.2005, 14:16   #7
Excalibur33
Elite
 
Registriert seit: 18.11.2001
Beiträge: 1.130


Standard

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
Excalibur33 ist offline   Mit Zitat antworten
Alt 25.01.2005, 14:29   #8
jak
Inventar
 
Registriert seit: 13.06.2001
Beiträge: 1.830


Standard

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)
jak ist offline   Mit Zitat antworten
Alt 25.01.2005, 19:00   #9
Excalibur33
Elite
 
Registriert seit: 18.11.2001
Beiträge: 1.130


Standard

@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
Excalibur33 ist offline   Mit Zitat antworten
Alt 25.01.2005, 19:34   #10
jak
Inventar
 
Registriert seit: 13.06.2001
Beiträge: 1.830


Standard

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)
jak ist offline   Mit Zitat antworten
Antwort


Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
 

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.

Gehe zu


Alle Zeitangaben in WEZ +2. Es ist jetzt 16:13 Uhr.


Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Forum SEO by Zoints
© 2009 FSL Verlag