Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
260to264
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
260to264
260to264
Aktuelles Verzeichnis
Verzeichnis Index
Verzeichnis Index
Übersicht Verzeichnisse
Inhaltsverzeichnis

Datenblätter suchen

Datenblätter suchen
22.05.2003 13:56:42
Chris
Hallo,

habe es heute schon versucht, allerdings komme ich nicht weiter!

Mein Makro bis jetzt:

Dim Arbeitsblatt As Worksheet
Dim wkb As Workbook
Dim gefunden As Boolean

For Each Arbeitsblatt In wks
If Arbeitsblatt.Name = "Personalstammdaten" Then gefunden = True: GoTo ende1
Next Arbeitsblatt
If Not gefunden Then
GoTo ende2
End If


ende1: Daten werden kopiert
ende2: MsgBox " Falsche Datei geöffnet"


Mein Problem ist, ich starte mit einem Button mein Programm. Dort soll er in den beiden Workbooks überprüfen, ob in den beiden Arbeitsmappen eine Mappe namens "Personalstammdaten" existiert! Falls nicht, geht es zu ende2, wenn ja, dann zu ende 1


Kann mir jemand helfen!?
Danke
Chris

Das ist mein ganzes Makro, falls es jemand weiter hilft:

Private Sub cmdOK1_Click()

Dim Arbeitsblatt As Worksheet
Dim Workbook As Workbook
Dim gefunden As Boolean
Dim Aktuell_Datei As String
Dim Datei As String
Dim Dateiname As String
Dim pos As Integer
Aktuell_Datei = ActiveWorkbook.Name


If optPersonal Then
Unload Me
Datei = Application.GetOpenFilename(" (*.xls), *.xls")

If Datei = "Falsch" Then
GoTo ende
Else
Workbooks.Open FileName:=Datei
End If
pos = 0
Do While InStr(pos + 1, Datei, "\", vbTextCompare) > pos
pos = InStr(pos + 1, Datei, "\", vbTextCompare)
Loop
Dateiname = Mid(Datei, pos + 1)

For Each Arbeitsblatt In Workbook
If Arbeitsblatt.Name = "Personalstammdaten" Then gefunden = True: GoTo ende1
Next Arbeitsblatt
If Not gefunden Then
GoTo ende2
End If

ende1:
If (Workbooks(Dateiname).Worksheets("Personalstammdaten").Range("A200") = 123) And _
(Workbooks(Aktuell_Datei).Sheets("Personalstammdaten").Range("A200") = 123) Then

Workbooks(Aktuell_Datei).Sheets("Personalstammdaten").Range("A7:B11") _
= Workbooks(Dateiname).Worksheets("Personalstammdaten").Range("A7:B11").Value

Windows(Dateiname).Activate
ActiveWorkbook.Close
MsgBox "Die Daten wurden eingelesen!"
Else
Unload Me

ende2:
MsgBox "Es wurde das falsche Blatt zum einlesen geöffnet!"
End If
End If
ende:
Workbooks(Aktuell_Datei).Worksheets("Datenblatt").Activate
End Sub

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

Betreff
Datum
Anwender
Anzeige
Re: Datenblätter suchen
22.05.2003 14:07:29
Nepumuk

Hallo Chris,
mach es so:

Gruß
Nepumuk

AN NEPUMUK
22.05.2003 14:16:11
Chris

Hallo Nepumuk,

funktioniert einwandfrei, aber wenn ich das falsche Blatt geöffnet habe sollte er auf "ende2" springen! Wie muss ich das denn noch machen!

Meine Excel-Kenntnisse sind leider sehr beschränkt!

LG Chris

Re: Datenblätter suchen
22.05.2003 14:16:20
Martin Beck

Hallo Chris,

da geht einiges durcheinander. Nochmal zur Erinnerung: objektorientiert programmieren und korrekt referenzieren ;-)

Kommentar zu Deinem Beispielmakro:

Dim Arbeitsblatt As Worksheet
Dim wkb As Workbook
Dim gefunden As Boolean

For Each Arbeitsblatt In wks
If Arbeitsblatt.Name = "Personalstammdaten" Then gefunden = True: GoTo ende1
Next Arbeitsblatt
If Not gefunden Then
GoTo ende2
End If

1. Die Variable wks ist nicht deklariert. Sollte es vielleicht wkb heißen?

2. Du mußt wkb zuerst mit "set" *belegen*, bevor Du es ansprechen kannst.

3. Statt

For Each Arbeitsblatt In wkb

mußt Du

For Each Arbeitsblatt In wkb.Worksheets

schreiben.


Zusammenfassend: Statt

For Each Arbeitsblatt In wks


schreibst Du

Set wkb = Workbooks("MeineDatei")
For Each Arbeitsblatt In wkb.Worksheets

Kommentar zum eigentlichen Makro:

Eine Variable (hier Workbook) sollte niemals so benannt werden, wie ein Objekt, das in VBA schon existiert.


Gruß
Martin Beck



Anzeige
Stellt sich aber noch folgendes Problem!
22.05.2003 14:25:28
Chris

Hallo,

Beide Arbeitsmappen haben die Datei "Personalstammdaten", die eine ist leer, die andere gefüllt! Ich möchte die Daten dort einlesen, um das Makro unfallsicher zu machen, möchte ich neben meiner Primärschlüsselabfrage auch noch die Blattnamen abfragen:

Beide Arbeitsmappen sind geöffnet --> Abfrage WAHR --> wird kopiert

Eine Mappe ist nur geöffnet, und irgendeine andere --> Abfrage vom PC : WAHR --> Kann nicht kopiert werden --> Makro steigt aus


Wie bekomme ich das Problem in den Griff!

LG Chris

Re: Datenblätter suchen
22.05.2003 14:27:22
Martin Beck

Hallo Chris,

noch was. Grundsätzlich würde ich die Sache anders angehen. Wenn eines der beiden Blätter nicht existiert, verursacht die Set-Anweisung den Laufzeitfehler 9. Dies kann man abfragen und in Abhängigkeit vom Ergebnis wird kopiert oder Warnmeldung ausgegeben. Die Prüfung, ob die Blätter existieren, kann man sich dann schenken.

Mein früheres Beispiel sieht entsprechend angepaßt wie folgt aus:

Gruß
Martin Beck



Anzeige
AN MARTIN
22.05.2003 14:37:01
Chris

Hallo Martin,

als was deklariest Du denn tap1 und tap2!?

Dim tap1 As
Dim tap2 As!?

Als String?


Chris

Re: AN NEPUMUK
22.05.2003 15:03:13
Nepumuk

Hallo Chris,
da tauchen jetzt zusätzliche Probleme auf. Du hast zwei Mappen geöffnet, die beide die Tabelle "Personalstammdaten" enthalten. Mein Makro steigt aber schon aus, wenn es eine der beiden Tabellen gefunden hat. Jetzt meine Frage, befindet sich das Programm in der Mappe aus der die Daten exportiert werden, oder in der Mappe in die die Daten importiert werden müssen, oder weder noch?
Gruß
Nepumuk

Re: AN MARTIN
22.05.2003 15:12:58
Martin Beck

Hallo Chris,

entweder gar nicht (schlechter Programmierstil) oder logischerweise als Worksheet. Die ganze Set-Anweisung

Set tab1 = Workbooks("Mappe1").Worksheets("Tabelle1")

bewirkt ja nichts anderes als daß ich die Tabelle "Tabelle1" in der Datei "Mappe1" statt mir der unübersichtlichen Referenzierung Workbooks("Mappe1").Worksheets("Tabelle1") auch mit dem "Kürzel" tab1 ansprechen kann.

Lies Dir auch mal die Hilfe zu SET durch.

Gruß
Martin Beck

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige