Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1456to1460
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
Inhaltsverzeichnis

Arbeitsmappen global referenzieren

Arbeitsmappen global referenzieren
14.11.2015 12:00:46
Sabrina
Hallo Leute,
ich arbeite mit mehreren Mappen die untereinander zugreifen
Muss ich die in jedem Makro deklarieren oder geht das auch global.
Ich habe zum Beispiel Makro1 und Makro2 und einige Deklarationen wiederholen sich eben.

Sub Makro1()
Dim wksA As Worksheet, wksB As Worksheet, wksC As Worksheet
Set wksA = Workbooks("Mappe1.xls").Worksheets("Tabelle1")
Set wksB = Workbooks("Mappe2.xls").Worksheets("Tabelle1")
Set wksC = Workbooks("Mappe3.xls").Worksheets("Tabelle1")
'... gekürzt
wksA.Activate
ActiveWorkbook.Save
wksB.Activate
ActiveWorkbook.Save
wksC.Activate
ActiveWorkbook.Save
'... gekürzt
End Sub
und

Sub Makro2()
Dim wksA As Worksheet, wksC As Worksheet, wksD As Worksheet
Set wksA = Workbooks("Mappe1.xls").Worksheets("Tabelle1")
Set wksC = Workbooks("Mappe2.xls").Worksheets("Tabelle1")
Set wksD = Workbooks("Mappe3.xls").Worksheets("Tabelle1")
'... gekürzt
wksA.Activate
' irgendwas ausführen
wksC.Activate
' irgendwas ausführen
wksD.Activate
ActiveWorkbook.Save
'... gekürzt
End Sub
LG Sabbel

8
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Arbeitsmappen global referenzieren
14.11.2015 13:03:52
Tino
Hallo,
wenn die zwei Makros in einem Modul sind, kannst Du die Deklarierung ganz
oben außerhalb der Makros mit Dim wksA As ... deklarieren.
Sind beide in unterschiedlichen Modulen, geht dies über Public wksA As ...
Aber Achtung,
1. die außerhalb Deklarierten Variablen werden nach Programmende nicht
zurückgesetzt dafür musst Du im Programm sorgen.
2. Eine Überprüfung ob Variable zugewiesen ist müsste dennoch durchgeführt werden
Hier ein Beispiel, ob dieses jetzt sinnvoll ist weiß ich nicht.
kommt als Code in Modul1
Option Explicit 
 
Dim wksA As Worksheet, wksB As Worksheet, wksC As Worksheet 
'' Oder auch 
'Public wksA As Worksheet, wksB As Worksheet, wksC As Worksheet 
 
Sub Makro1() 
Call Zuweisung 
'... gekürzt 
wksA.Activate 
ActiveWorkbook.Save 
wksB.Activate 
ActiveWorkbook.Save 
wksC.Activate 
ActiveWorkbook.Save 
'... gekürzt 
Call Makro2 
End Sub 
 
 
Sub Makro2() 
Call Zuweisung 
'... gekürzt 
wksA.Activate 
' irgendwas ausführen 
wksC.Activate 
' irgendwas ausführen 
wksD.Activate 
ActiveWorkbook.Save 
'... gekürzt 
Call ResetZuweisung 
End Sub 
 
Sub Zuweisung() 
If wksA Is Nothing Then _
    Set wksA = Workbooks("Mappe1.xls").Worksheets("Tabelle1") 
If wksB Is Nothing Then _
    Set wksB = Workbooks("Mappe2.xls").Worksheets("Tabelle1") 
If wksC Is Nothing Then _
    Set wksC = Workbooks("Mappe3.xls").Worksheets("Tabelle1") 
End Sub 
 
Sub ResetZuweisung() 
Set wksA = Nothing 
Set wksB = Nothing 
Set wksC = Nothing 
End Sub 
 
Gruß Tino

Anzeige
AW: Arbeitsmappen global referenzieren
14.11.2015 15:36:33
Sabrina
Hallo Tino,
vielen Dank für die ausführliche Erklärung.
Ich habe nun ein Problem.
Ich suche in der Spalte A der Datei Mappe1.xls im Datenblatt Werte nach dem "Wert"
Bislang habe ich dies verwendet.
Windows("Mappe1.xls").Activate
With Sheets("Werte").Range("A1:A" & Cells(Rows.Count, 1).End(xlUp).Row)
Set c = .Find(wert, LookIn:=xlValues)
Ich versuchte es so zu ändern. Aber dann wird nichts mehr gefunden.
With wksA.Range("A1:A" & Cells(Rows.Count, 1).End(xlUp).Row)
Set c = .Find(wert, LookIn:=xlValues)
Wo liegt mein Fehler?
LG
Sabbel

Anzeige
AW: Arbeitsmappen global referenzieren
14.11.2015 16:36:39
Tino
Hallo,
ich sehe zwar keinen direkten Fehler, aber versuch es mal so!
Evtl. fehlt bei Cells die Verbindung zur Tabelle wksA, weil so ist Cells auf der aktiven Tabelle?!
With wksA.Columns(1)
'nicht ges. Inhalt vergleichen, nicht Groß-Kleinschreibweise beacheten
Set c = .Find(wert, LookIn:=xlValues, LookAt:=xlPart, _
SearchDirection:=xlNext, MatchCase:=False)
If Not c Is Nothing Then MsgBox c.Address(external:=True)
'Oder ges. Inhalt vergleichen, nicht Groß-Kleinschreibweise beacheten
Set c = .Find(wert, LookIn:=xlValues, LookAt:=xlWhole, _
SearchDirection:=xlNext, MatchCase:=False)
If Not c Is Nothing Then MsgBox c.Address(external:=True)
End With
Grß Tino

Anzeige
AW: Arbeitsmappen global referenzieren
14.11.2015 17:43:59
Sabrina
Danke .. jetzt wird der Wert gefunden.
Aber es kommt eine neue Fehlermeldung in der Zeile c.Select "Laufzeitfehler 1004. Die Select Methode konnte nicht ausgeführt werden"
Die gefundene Zeile soll aktiviert werden ...

With wksA.Columns(1)
Set c = .Find(wert, LookIn:=xlValues, LookAt:=xlPart, _
SearchDirection:=xlNext, MatchCase:=False)
c.Select
ActiveCell.Select
ActiveCell = wert
RechnungsNr = Selection.Offset(0, 1)
KundenNr = Selection.Offset(0, 2)
.... und so weiter
End With

LG Sabbel

AW: Arbeitsmappen global referenzieren
14.11.2015 17:51:19
Tino
Hallo,
für select muss die Tabelle aktiv sein!
Versuch es mit Application.GoTo c
Gruß Tino

Anzeige
AW: Arbeitsmappen global referenzieren
14.11.2015 21:36:26
Sabrina
Vielen Dank :D
du hast mir sehr weiter geholfen.
Nun hänge ich aber schon wieder :(
Wenn der Wert nicht gefunden wird soll die letzte Zeile aktiviert werden und dann dort reingeschrieben werden .. das geht nun auch nicht mehr :(
With wksA.Columns(1)
Set c = .Find(wert, LookIn:=xlValues, LookAt:=xlWhole, _
SearchDirection:=xlNext, MatchCase:=False)
If Not c Is Nothing Then
Application.GoTo c
GoTo weiter
End If
Cells(Cells(Rows.Count, 1).End(xlUp).Row + 1, 1).Select 'erste leere zelle
ActiveCell.Select
ActiveCell = wert
Selection.Offset(0, 1) = RechnungsNr
Selection.Offset(0, 2) = KundenNr
Selection.Offset(0, 3) = Geraetenummer
Selection.Offset(0, 4) = ExterneNummer
LG
Sabbel

Anzeige
AW: Arbeitsmappen global referenzieren
14.11.2015 22:18:30
Tino
Hallo,
versuch es so. (nicht getestet)
With wksA.Columns(1)
Set c = .Find(wert, LookIn:=xlValues, LookAt:=xlWhole, _
SearchDirection:=xlNext, MatchCase:=False)
If Not c Is Nothing Then
Application.Goto c
GoTo weiter
End If
With .Cells(.Cells(.Rows.Count, 1).End(xlUp).Row + 1, 1).EntireRow
.Cells(1, 1).Value = RechnungsNr
.Cells(1, 2).Value = KundenNr
.Cells(1, 3).Value = Geraetenummer
.Cells(1, 4).Value = ExterneNummer
Application.Goto .Cells(1, 1)
End With
End With
Gruß Tino

Oh, Danke Tino. du bist der Beste o.T.
14.11.2015 23:13:40
Sabrina
.

299 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige