Supportnet / Forum / Tabellenkalkulation
Makro
Frage
hallo ihr,
ich hätte mal ein kleines Problem.
wie kann ich denn in vba überprüfenlassen, ob ein datenblatt existier. und wenn es da ist soll er in das rein ansonsten die datei schließen.
Danke
Antwort 1 von coros
Hi Martin,
nachfolgendes Makro sollte das machen, was Du Dir vorgestellt hast. Kopiere es in ein StandardModul und starte es über eine Befehlsschaltfläche.
Bei dem Makro wird geprüft, ob ein bestimmtes Tabellenblatt vorhanden ist. Wenn ja, wird das Blatt aufgerufen. Wenn nicht, wird die Datei geschlossen.
Du musst in dem Makro in der Zeile
If Sheets(Wiederholungen).Name = "Blattname" Then
den Text "Blattname" gegen den Blattnamen, des Tabellenblattes, das auf seine Existenz hin geprüft werden soll, geändert werden. Dazu das Wort zwischen den Anführungszeichen ("") ändern, aber ohne die Anführungszeichen zu löschen.
Ich hoffe, Du kommst klar. Bei Fragen melde Dich.
Solltest Du nicht wissen, wie Du den Code in Deine Datei bekommst, dann schau mal auf meiner HP in der Rubrik Anleitungen und dort dann in der Anleitungsnummer 3 nach. Dort stelle ich dazu eine bebilderte Anleitung zur Verfügung, die Dir sicherlich helfen wird.
MfG,
Oliver
Da hier der einzige Lohn für die Helfer eine Rückmeldung ist, wäre es nett, wenn Du ein
Feedback abgeben könntest, ob der Lösungsvorschlag Dein Problem gelöst hat.
nachfolgendes Makro sollte das machen, was Du Dir vorgestellt hast. Kopiere es in ein StandardModul und starte es über eine Befehlsschaltfläche.
Option Explicit
Sub Blattexistenz_prüfen()
Dim Wiederholungen As Integer
For Wiederholungen = 1 To Worksheets.Count
If Sheets(Wiederholungen).Name = "Blattname" Then
Sheets(Wiederholungen).Activate
Exit Sub
End If
Next
ActiveWorkbook.Close False
End Sub
Bei dem Makro wird geprüft, ob ein bestimmtes Tabellenblatt vorhanden ist. Wenn ja, wird das Blatt aufgerufen. Wenn nicht, wird die Datei geschlossen.
Du musst in dem Makro in der Zeile
If Sheets(Wiederholungen).Name = "Blattname" Then
den Text "Blattname" gegen den Blattnamen, des Tabellenblattes, das auf seine Existenz hin geprüft werden soll, geändert werden. Dazu das Wort zwischen den Anführungszeichen ("") ändern, aber ohne die Anführungszeichen zu löschen.
Ich hoffe, Du kommst klar. Bei Fragen melde Dich.
Solltest Du nicht wissen, wie Du den Code in Deine Datei bekommst, dann schau mal auf meiner HP in der Rubrik Anleitungen und dort dann in der Anleitungsnummer 3 nach. Dort stelle ich dazu eine bebilderte Anleitung zur Verfügung, die Dir sicherlich helfen wird.
MfG,
Oliver
Da hier der einzige Lohn für die Helfer eine Rückmeldung ist, wäre es nett, wenn Du ein
Feedback abgeben könntest, ob der Lösungsvorschlag Dein Problem gelöst hat.
Antwort 2 von Martin_1982
Danke für die Hilfe,
konnte leider erst jetzt zurückschreiben.
Das Programm funktioniert.
Hätte nur noch eine Frage.
Da ich das in ein anderes Programm einbauen will und es nicht klappt.
Würde ich gerne Fragen wie ich es zu machen habe.
Also wenn du mir dabei helfen könntest wäre es der Knüller.
Hier ist das andere Programm.
Option Explicit
Sub Zusammenfassung()
Dim Mappen As Integer
Dim zeile As Integer
Dim SearchFolders As Integer
With Application.FileSearch
.NewSearch
.LookIn = "S:Ordner" ´Hier den Ordner angeben, in der die Tabellen sind.
.SearchSubFolders = False
.Filename = "*.xls" ´Alle Dateien werden später einzeln aufgerufen, die auf xls enden.
If .Execute() > 0 Then
For Mappen = 1 To .FoundFiles.Count
Workbooks.Open Filename:=.FoundFiles(Mappen)
ActiveWindow.ScrollRow = 1
Sheets("Sicherheiten").Select ´Programm geht hier in das Datenblatt Sicherheiten.
zeile = Range("A65536").End(xlUp).Row ´letzte Zeile in der Spalte A in der Daten enthalten sind wird gesucht.
Rows("4:" & zeile).Select ´Zeile 4 bis letzte Zeile wird markiert.
Application.CutCopyMode = False
Selection.Copy ´ausgewähltes wird kopiert.
Windows("Sammlung.xls").Activate ´wechselt in die Datei Sammlung.xls.
Sheets("Zusammenstellung").Select ´geht ins Datenblatt Zusammenstellung.
zeile = Range("A65536").End(xlUp).Row ´sucht die letzte Zeile in der Spalte A in der Daten sind.
Rows(zeile + 1).Select ´geht eine Zeile unter die letze befüllte Seit.
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False ´fügt das Kopierte ein. Aber nur die Werte ohne Formate.
Workbooks(2).Close ´schließt die Datei aus der kopiert wurde.
Next Mappen ´geht wieder zur nächsten Datei.
End If
End With
End Sub
Es soll da eingebaut werden, nachdem die Datei geöffnet wird und das Blatt sicherheiten geht und kopiert.
Da ich einige Dateien habe die dieses Blatt nicht haben.
Dank
konnte leider erst jetzt zurückschreiben.
Das Programm funktioniert.
Hätte nur noch eine Frage.
Da ich das in ein anderes Programm einbauen will und es nicht klappt.
Würde ich gerne Fragen wie ich es zu machen habe.
Also wenn du mir dabei helfen könntest wäre es der Knüller.
Hier ist das andere Programm.
Option Explicit
Sub Zusammenfassung()
Dim Mappen As Integer
Dim zeile As Integer
Dim SearchFolders As Integer
With Application.FileSearch
.NewSearch
.LookIn = "S:Ordner" ´Hier den Ordner angeben, in der die Tabellen sind.
.SearchSubFolders = False
.Filename = "*.xls" ´Alle Dateien werden später einzeln aufgerufen, die auf xls enden.
If .Execute() > 0 Then
For Mappen = 1 To .FoundFiles.Count
Workbooks.Open Filename:=.FoundFiles(Mappen)
ActiveWindow.ScrollRow = 1
Sheets("Sicherheiten").Select ´Programm geht hier in das Datenblatt Sicherheiten.
zeile = Range("A65536").End(xlUp).Row ´letzte Zeile in der Spalte A in der Daten enthalten sind wird gesucht.
Rows("4:" & zeile).Select ´Zeile 4 bis letzte Zeile wird markiert.
Application.CutCopyMode = False
Selection.Copy ´ausgewähltes wird kopiert.
Windows("Sammlung.xls").Activate ´wechselt in die Datei Sammlung.xls.
Sheets("Zusammenstellung").Select ´geht ins Datenblatt Zusammenstellung.
zeile = Range("A65536").End(xlUp).Row ´sucht die letzte Zeile in der Spalte A in der Daten sind.
Rows(zeile + 1).Select ´geht eine Zeile unter die letze befüllte Seit.
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False ´fügt das Kopierte ein. Aber nur die Werte ohne Formate.
Workbooks(2).Close ´schließt die Datei aus der kopiert wurde.
Next Mappen ´geht wieder zur nächsten Datei.
End If
End With
End Sub
Es soll da eingebaut werden, nachdem die Datei geöffnet wird und das Blatt sicherheiten geht und kopiert.
Da ich einige Dateien habe die dieses Blatt nicht haben.
Dank
Antwort 3 von Event
Hallo
alles etwas theoretisch aber:
Gruß
alles etwas theoretisch aber:
Option Explicit
Function Blattexistenz_prüfen(blattname$) As Boolean
Dim Wiederholungen As Integer
For Wiederholungen = 1 To Worksheets.Count
If Sheets(Wiederholungen).Name = blattname Then
Sheets(Wiederholungen).Activate
Blattexistenz_prüfen = True
Exit Function
End If
Next
Blattexistenz_prüfen = False
End Function
Sub Zusammenfassung()
Dim Mappen As Integer
Dim zeile As Integer
Dim SearchFolders As Integer
Dim ist_die_Sicherheiten_Tabelle_da As Boolean ´Man will ja Speicher sparen ;-)
With Application.FileSearch
.NewSearch
.LookIn = "S:Ordner" ´Hier den Ordner angeben, in der die Tabellen sind.
.SearchSubFolders = False
.Filename = "*.xls" ´Alle Dateien werden später einzeln aufgerufen, die auf xls enden.
If .Execute() > 0 Then
For Mappen = 1 To .FoundFiles.Count
Workbooks.Open Filename:=.FoundFiles(Mappen)
ActiveWindow.ScrollRow = 1
ist_die_Sicherheiten_Tabelle_da = Blattexistenz_prüfen("Sicherheiten")
If ist_die_Sicherheiten_Tabelle_da = False Then GoTo Nexte_Mappe
Sheets("Sicherheiten").Select ´ Programm geht hier in das Datenblatt Sicherheiten.
zeile = Range("A65536").End(xlUp).Row ´letzte Zeile in der Spalte A in der Daten enthalten sind wird gesucht.
Rows("4:" & zeile).Select ´Zeile 4 bis letzte Zeile wird markiert.
Application.CutCopyMode = False
Selection.Copy ´ausgewähltes wird kopiert.
Windows("Sammlung.xls").Activate ´wechselt in die Datei Sammlung.xls.
Sheets("Zusammenstellung").Select ´geht ins Datenblatt Zusammenstellung.
zeile = Range("A65536").End(xlUp).Row ´sucht die letzte Zeile in der Spalte A in der Daten sind.
Rows(zeile + 1).Select ´geht eine Zeile unter die letze befüllte Seit.
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False ´fügt das Kopierte ein. Aber nur die Werte ohne Formate.
Workbooks(2).Close ´schließt die Datei aus der kopiert wurde.
Nexte_Mappe:
Next Mappen ´geht wieder zur nächsten Datei.
End If
End With
End Sub
Gruß
Antwort 4 von Martin_1982
Vielen Dank Ich muss sagen Ihr seid mir ne große Hilfe hier.
Kannst du mir aber sagen wieso es so ca. 31 Dateien prüft und die Datensätze rausholt und dann einen Laufzeifehler oder sowas bringt??
In dem Ordner sind ca. 200 Dateien
ist es irgendwie begrenzt auf ne anzahl von Tabellen??
Danke
Kannst du mir aber sagen wieso es so ca. 31 Dateien prüft und die Datensätze rausholt und dann einen Laufzeifehler oder sowas bringt??
In dem Ordner sind ca. 200 Dateien
ist es irgendwie begrenzt auf ne anzahl von Tabellen??
Danke