Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
732to736
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
732to736
732to736
Aktuelles Verzeichnis
Verzeichnis Index
Verzeichnis Index
Übersicht Verzeichnisse
Inhaltsverzeichnis

Makro wird ungewollt in anderer Tabelle ausgeführt

Makro wird ungewollt in anderer Tabelle ausgeführt
Peter
Guten Abend
Ich lasse ein Makro laufen, das ich in einem selbsterstellten Menu aufrufe. Zweck des Makros ist es, die Daten aus Tabelle "vorUmstellung" in die Tabelle "nachUmstellung zu transferieren und anders darzustellen.
Wenn ich nun zwei gleiche Dateien (die über dieses Makro verfügen) offen habe, wird beim Aufruf in einer Datei die Aktion in der anderen Datei ausgeführt (vielleicht in der zuerst geöffenten?). Dies obwohl in verschiedenen Orten im Code Thisworkbook.activate steht.
Wie kann das verhindert werden in meinem Code?
Danke für Feedback.
Peter
MODUL AUTO OPEN / CLOSE

Sub auto_open()
Menü_Erstellen
End Sub


Sub auto_close()
Menü_Löschen
End Sub

MENUESTEUERUNG
Const MenueName = "&Datenübertrag"
Const Befehl1 = "&Ausführen"

Sub Menü_Erstellen()
Dim MB As Object, MeinMenü As Object, Befehl As Object
Call Menü_Löschen
Set MB = CommandBars.ActiveMenuBar
Set MeinMenü = MB.Controls.Add(Type:=msoControlPopup, Temporary:=True)
MeinMenü.Caption = MenueName
Set Befehl = MeinMenü.Controls.Add(Type:=msoControlButton, ID:=1)
ThisWorkbook.Activate
With Befehl
.Caption = Befehl1
.OnAction = "Machwas1"
End With
End Sub


Sub Menü_Löschen()
On Error Resume Next
CommandBars.ActiveMenuBar.Controls(MenueName).Delete
End Sub


Sub Machwas1()
ThisWorkbook.Activate
Application.StatusBar = "Daten werden übertragen"
Übertrag
Application.StatusBar = ""
End Sub

EIGENTLICHER CODE

Sub Übertrag()
Dim Konto As String
Dim Gkonto As String
Dim Betrag As String
Dim Tx1 As String
Dim Datum As String
ThisWorkbook.Activate
Application.ScreenUpdating = False
Datum = InputBox("Bitte Datum eingeben!")
Gkonto = InputBox("Bitte GKonto eingeben!")
Debug.Print Gkonto
Sheets("nachUmstellung").Select           'Zieldatei anwählen
Cells.Select
Selection.ClearContents                  'alle Zellen löschen
Sheets("vorUmstellung").Select            'Quelldatei anwählen
Application.Goto reference:="R2C1"  'Ausgangsposition in Quelldatei anwählen
Do While ActiveCell <> ""           'Schlaufe bis kein weiterer Datensatz vorhanden
Loop
Sheets("nachUmstellung").Select
Application.ScreenUpdating = True
End Sub

AW: Makro wird ungewollt in anderer Tabelle ausgeführt
16.02.2006 23:11:42
Luschi
Hallo Peter,
hier sollte mit Objekt-Variablen für die Mappen, Tabellen und Bereiche gearbeitet werden.
Sub Machwas1()
Dim wb as WorkBook
Set wb = ThisWorkbook
Application.StatusBar = "Daten werden übertragen"
Übertrag wb
Set wb = Nothing
Application.StatusBar = ""
End Sub
Sub Übertrag(ByRef xWb As WorkBook)
Dim Konto As String
Dim Gkonto As String
Dim Betrag As String
Dim Tx1 As String
Dim Datum As String
Dim ws As WorkSheet
Application.ScreenUpdating = False
Datum = InputBox("Bitte Datum eingeben!")
Gkonto = InputBox("Bitte GKonto eingeben!")
Debug.Print Gkonto
Set ws = xWb.WorkSheets("nachUmstellung")
ws.Cells.Select
Selection.ClearContents                  'alle Zellen löschen
ws.Select            'Quelldatei anwählen
Application.Goto Reference:=ws.Range("A2")  'Ausgangsposition in Quelldatei anwählen
Do While ActiveCell <> ""           'Schlaufe bis kein weiterer Datensatz vorhanden
Loop
ws.Select
Set ws = Nothing
set xWb = Nothing
Application.ScreenUpdating = True
End Sub

So wird immer auf das Objekt zugeriffen, das auch gemeint ist. Da die Symboleiste der Arbeitsmappe gehört, die sie erzeugt hat, wird beim Klick auf das Symbol in der Leiste auch das Makro "Machwas1" aus dieser Mappe aufgerufen. Hier wird 1 Objekt der Arbeitsmappe (wb) erzeugt und der Procedure "Übertrag" übergeben. Dann wird ein Objekt der Tabelle "nachUmstellung" (ws) erzeugt und damit weiter gearbeitet.
Zum Schluß werden die Objekte wieder deaktiviert (auf Nothing gesetzt). Das vermisse ich übrigens in der Sub "Menü_Erstellen". Jedes Object sollte wieder deaktiviert werden, um Referenzprobleme zu vermeiden.
Gruß von Luschi
aus klein-Paris
Anzeige
AW: Makro wird ungewollt in anderer Tabelle ausgeführt
17.02.2006 00:04:48
Peter
Hallo Luschi
Vielen Dank für die ausführliche Antwort - ich werde das am "nächsten Feierabend" verdauen. Und nun weiss ich auch - dank dir - dass es klein Paris gibt und - dank Google - wo das zu finden ist.
Gruss, Peter
AW: Makro wird ungewollt in anderer Tabelle ausgeführt
17.02.2006 00:23:54
Peter
Hallo Luschi
Ich muss trotzdem nochmals nachfragen:
Du hast ws den Worksheet-Namen "nachUmstellung" zugewiesen. Die Quelldatei ist jedoch "vorUmstellung" - diese ist, wenn ich es richtig sehe, nicht definiert. Ich nehme an, dass ich einen weiteren Variablen den zweiten Worksheet-Namen zuweisen muss, oder habe ich das ganze nicht begriffen?
Ich habe nachfolgend den ganzen Code vom

Sub Übertrag reinkopiert, damit ersichtlich ist, was ich mache (vielleicht viel zu kompliziert).
Zuerst fülle ich die Spaltenbezeichnungen in der Zieltabelle ein, dann frage ich die einzelnen Zeilen in der Quelltabelle ab - aus jeder Zeile in der Quelltabelle gibt es zwei Zeilen in der Zieltabelle.

Sub Übertrag()
Dim Konto As String
Dim Gkonto As String
Dim Betrag As String
Dim Tx1 As String
Dim Datum As String
ThisWorkbook.Activate
Application.ScreenUpdating = False
Datum = InputBox("Bitte Datum eingeben!")
Debug.Print Datum
Gkonto = InputBox("Bitte GKonto eingeben!")
Debug.Print Gkonto
Sheets("nachUmstellung").Select           'Zieldatei anwählen
Cells.Select
Selection.ClearContents                  'alle Zellen löschen
Application.Goto reference:="R1C1"  'Ausgangsposition in Zieldatei anwählen
ActiveCell = "Blg"
ActiveCell.Offset(0, 1).Select
ActiveCell = "Datum"
ActiveCell.Offset(0, 1).Select
ActiveCell = "Kto"
ActiveCell.Offset(0, 1).Select
ActiveCell = "S/H"
ActiveCell.Offset(0, 1).Select
ActiveCell = "Grp"
ActiveCell.Offset(0, 1).Select
ActiveCell = "GKto"
ActiveCell.Offset(0, 1).Select
ActiveCell = "SId"
ActiveCell.Offset(0, 1).Select
ActiveCell = "SIdx"
ActiveCell.Offset(0, 1).Select
ActiveCell = "KIdx"
ActiveCell.Offset(0, 1).Select
ActiveCell = "BTyp"
ActiveCell.Offset(0, 1).Select
ActiveCell = "MTyp"
ActiveCell.Offset(0, 1).Select
ActiveCell = "Code"
ActiveCell.Offset(0, 1).Select
ActiveCell = "Netto"
ActiveCell.Offset(0, 1).Select
ActiveCell = "Steuer"
ActiveCell.Offset(0, 1).Select
ActiveCell = "FW-Betrag"
ActiveCell.Offset(0, 1).Select
ActiveCell = "Tx1"
ActiveCell.Offset(0, 1).Select
ActiveCell = "Tx2"
ActiveCell.Offset(0, 1).Select
ActiveCell = "PkKey"
ActiveCell.Offset(0, 1).Select
ActiveCell = "Opld"
ActiveCell.Offset(0, 1).Select
ActiveCell = "Flag"
ActiveCell.Offset(1, -18).Select
Sheets("vorUmstellung").Select            'Quelldatei anwählen
Application.Goto reference:="R2C1"  'Ausgangsposition in Quelldatei anwählen
Do While ActiveCell <> ""           'Schlaufe bis kein weiterer Datensatz vorhanden
Konto = ActiveCell
ActiveCell.Offset(0, 2).Select
Tx1 = ActiveCell
ActiveCell.Offset(0, 4).Select
Betrag = ActiveCell * -1
ActiveCell.Offset(1, -6).Select
Sheets("nachUmstellung").Select
ActiveCell = Datum
ActiveCell.Offset(0, 1).Select
ActiveCell = Gkonto
ActiveCell.Offset(0, 1).Select
ActiveCell = "S"
ActiveCell.Offset(0, 2).Select
ActiveCell = Konto
ActiveCell.Offset(0, 7).Select
ActiveCell = Betrag
ActiveCell.Offset(0, 1).Select
ActiveCell = 0
ActiveCell.Offset(0, 2).Select
ActiveCell = Tx1
ActiveCell.Offset(1, -14).Select
ActiveCell = Datum
ActiveCell.Offset(0, 1).Select
ActiveCell = Konto
ActiveCell.Offset(0, 1).Select
ActiveCell = "H"
ActiveCell.Offset(0, 2).Select
ActiveCell = Gkonto
ActiveCell.Offset(0, 7).Select
ActiveCell = Betrag
ActiveCell.Offset(0, 1).Select

Sub Übertrag()
Dim Konto As String
Dim Gkonto As String
Dim Betrag As String
Dim Tx1 As String
Dim Datum As String
ThisWorkbook.Activate
Application.ScreenUpdating = False
Datum = InputBox("Bitte Datum eingeben!")
Debug.Print Datum
Gkonto = InputBox("Bitte GKonto eingeben!")
Debug.Print Gkonto
Sheets("nachUmstellung").Select           'Zieldatei anwählen
Cells.Select
Selection.ClearContents                  'alle Zellen löschen
Application.Goto reference:="R1C1"  'Ausgangsposition in Zieldatei anwählen
ActiveCell = "Blg"
ActiveCell.Offset(0, 1).Select
ActiveCell = "Datum"
ActiveCell.Offset(0, 1).Select
ActiveCell = "Kto"
ActiveCell.Offset(0, 1).Select
ActiveCell = "S/H"
ActiveCell.Offset(0, 1).Select
ActiveCell = "Grp"
ActiveCell.Offset(0, 1).Select
ActiveCell = "GKto"
ActiveCell.Offset(0, 1).Select
ActiveCell = "SId"
ActiveCell.Offset(0, 1).Select
ActiveCell = "SIdx"
ActiveCell.Offset(0, 1).Select
ActiveCell = "KIdx"
ActiveCell.Offset(0, 1).Select
ActiveCell = "BTyp"
ActiveCell.Offset(0, 1).Select
ActiveCell = "MTyp"
ActiveCell.Offset(0, 1).Select
ActiveCell = "Code"
ActiveCell.Offset(0, 1).Select
ActiveCell = "Netto"
ActiveCell.Offset(0, 1).Select
ActiveCell = "Steuer"
ActiveCell.Offset(0, 1).Select
ActiveCell = "FW-Betrag"
ActiveCell.Offset(0, 1).Select
ActiveCell = "Tx1"
ActiveCell.Offset(0, 1).Select
ActiveCell = "Tx2"
ActiveCell.Offset(0, 1).Select
ActiveCell = "PkKey"
ActiveCell.Offset(0, 1).Select
ActiveCell = "Opld"
ActiveCell.Offset(0, 1).Select
ActiveCell = "Flag"
ActiveCell.Offset(1, -18).Select
Sheets("vorUmstellung").Select            'Quelldatei anwählen
Application.Goto reference:="R2C1"  'Ausgangsposition in Quelldatei anwählen
Do While ActiveCell <> ""           'Schlaufe bis kein weiterer Datensatz vorhanden
Konto = ActiveCell
ActiveCell.Offset(0, 2).Select
Tx1 = ActiveCell
ActiveCell.Offset(0, 4).Select
Betrag = ActiveCell * -1
ActiveCell.Offset(1, -6).Select
Sheets("nachUmstellung").Select
ActiveCell = Datum
ActiveCell.Offset(0, 1).Select
ActiveCell = Gkonto
ActiveCell.Offset(0, 1).Select
ActiveCell = "S"
ActiveCell.Offset(0, 2).Select
ActiveCell = Konto
ActiveCell.Offset(0, 7).Select
ActiveCell = Betrag
ActiveCell.Offset(0, 1).Select
ActiveCell = 0
ActiveCell.Offset(0, 2).Select
ActiveCell = Tx1
ActiveCell.Offset(1, -14).Select
ActiveCell = Datum
ActiveCell.Offset(0, 1).Select
ActiveCell = Konto
ActiveCell.Offset(0, 1).Select
ActiveCell = "H"
ActiveCell.Offset(0, 2).Select
ActiveCell = Gkonto
ActiveCell.Offset(0, 7).Select
ActiveCell = Betrag
ActiveCell.Offset(0, 1).Select
ActiveCell = 0
ActiveCell.Offset(0, 2).Select
ActiveCell = Tx1
ActiveCell.Offset(1, -14).Select
Sheets("vorUmstellung").Select
Loop
Sheets("nachUmstellung").Select
Application.ScreenUpdating = True
End Sub

Anzeige
AW: Makro wird ungewollt in anderer Tabelle ausgeführt
17.02.2006 09:14:53
Luschi
Hallo Peter,
genau so ist es. Wenn Du ein kleine Demo-Datei bereistellst, würde ich den Schleifenteil umprogrammieren. Der ist doch ein bischen umständlich und die
Select-Positionierung macht den Datenaustausch langsam.
Gruß von Luschi
aus klein-Paris
AW: Makro wird ungewollt in anderer Tabelle ausgeführt
17.02.2006 21:26:42
Peter
Hallo Luschi
Gerne mache ich von deinem Angebot Gebrauch und habe die Datei bereitgestellt.
Schon mal herzlichen Dank zum Voraus und
freundlicher Gruss
Peter
https://www.herber.de/bbs/user/31166.xls
AW: Makro wird ungewollt in anderer Tabelle ausgeführt
18.02.2006 09:51:08
Luschi
Hallo peter,
habe mal meine Vba-Wut an Deiner Datei ausgelassen.
https://www.herber.de/bbs/user/31171.xls
Gruß von Luschi
aus klein-Paris
Anzeige
AW: Makro wird ungewollt in anderer Tabelle ausgeführt
18.02.2006 10:52:01
Peter
Hallo Luschi
Das ist GROSSARTIG. Vielen Dank! Ich werde den Code noch durchstudieren und dabei sicher eine Menge lernen!
Ich habe noch eine kleine Anschlussfrage:
Als Datum, das dann für die Inputbox verwendet wird als Default, hast du das aktuelle Datum definiert.
Datum = Format(Now, "dd.mm.yyyy")
Wie muss die Formel umgeschrieben werden, damit anstelle dem heutigen Datum dasjenige des letzten Tages des Vormonats erscheint (für heute wäre das der 31.01.2006)?
Gruss, Peter
AW: Makro wird ungewollt in anderer Tabelle ausgeführt
18.02.2006 11:19:04
Luschi
Hallo Peter,
so geht's:
Datum = Format(DateSerial(Year(Now), Month(Now), 1) - 1, "dd.mm.yyyy")
Es wird auch der Jahreswechsel im Januar berücksichtigt.
Der Trick dabei: Man nimmt den 1. des aktuellen Monats und zieht 1 Tag ab.
Excel hat 1 guten internen Kalender und kennt auch die Schaltjahre.
Gruß von Luschi
aus klein-Paris
Anzeige
AW: Makro wird ungewollt in anderer Tabelle ausgeführt
18.02.2006 11:21:42
Peter
Hallo Luschi
Herzlichen Dank!
und schönes Wochenende
Peter

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige