Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1532to1536
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

Prüfung bezüglich Worksheet

Prüfung bezüglich Worksheet
15.01.2017 16:43:36
Peter
Hallo ihr Excelspezialisten,
ich suche seit einer Weile nach der Lösung meines Problems.
Ich habe eine umfangreiche Datei in der beim Start der Basisdatei neue Arbeitsblätter angelegt werden.
Das System läuft so, dass links von dem Arbeitsblatt "Eingabe lfd. Schuljahr" Arbeitsblätter eingefügt werden. Als erstes Blatt z.B. "Konto 2016" und rechts davon "Jahresabrechnung 2016". Beim Jahr kommt dann links von "Konto 2016" "Konto 2017" und rechts von "Jahresabrechnung 2016" "Jahresabrechnung 2017".
Dargestellt wie folgt:
Konto 2017 Konto 2016 Jahresabrechnung 2016 Jahresabrechnung 2017 Eing lfd. Schuljahr
Wenn das Konto 2016 und die Jahresabrechnung 2017 neu angelegt sind, kann ein bestimmter Eintrag in Jahresabrechnung 2016 erst dann eingefügt werden, wenn das Konto 2017 und Jahresabrechnung 2017 angelegt sind.
Bei der Neuanlage habe ich im Makro für das Einfügen folgende Prüfung:
If Worksheets("Eingabe lfd. Schuljahr").Index = 0 Then
MsgBox "Bitte zuerst weiteres Konto anlegen"
Exit Sub
Else
Worksheets(Worksheets("Eingabe lfd. Schuljahr").Index - 2).Select
end if
Wenn nun weitere Jahresabrechnungen vorhanden sind soll die jeweils nächste Prüfung erfolgen.
Ich hoffe ich habe mich verständlich ausgedrückt.
Ist das so überhaupt lösbar oder ist es besser über eine Abfrage in der Auflistung
in einer Tabelle?
Ich füge eine Musterdatei bei, die aber nur diesen Bereich betrifft.

Die Datei https://www.herber.de/bbs/user/110568.xlsm wurde aus Datenschutzgründen gelöscht


Besten Dank für Eure Hilfe.
Gruss
Peter

7
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Prüfung bezüglich Worksheet
15.01.2017 17:38:22
Michael
Hi Peter,
Deine Angaben sind sehr bruchstückhaft: alle Blätter sind leer, so daß "ein bestimmter Eintrag in 2016" nicht nachvollziehbar ist.
Für dessen Bestimmung habe ich mal die Zelle B5 (in Jahresabr. 2017) verwendet: falls hier "neu" drinsteht, werd ggf. zwei neue Blätter an passender Position angelegt.
Makro in Modul1:
Option Explicit
Sub naechstesJahrAnlegen()
Dim blatt As String, kBlatt As String, jBlatt As String, k0Blatt As String
Dim jahr As Long, k0 As Long
Dim sh As Worksheet
Dim jOk As Boolean, kOk As Boolean
blatt = ActiveSheet.Name
If InStr(blatt, "Jahresabr") > 0 Then
If Range("B5") = "neu" Then ' irgendeine Bedingung
jahr = Right(blatt, 4) + 1
jBlatt = Left(blatt, Len(blatt) - 4) & jahr
kBlatt = "Konto " & jahr
k0Blatt = "Konto " & jahr - 1
For Each sh In Worksheets
If sh.Name = jBlatt Then jOk = True
If sh.Name = kBlatt Then kOk = True
If sh.Name = k0Blatt Then k0 = sh.Index
Next
If k0 = 0 Then MsgBox "Konto " & jahr - 1 & " nicht vorh. - Abbruch"
If Not jOk Then
MsgBox jBlatt & " existiert nicht"
Sheets.Add after:=ActiveSheet
ActiveSheet.Name = jBlatt
End If
If Not kOk Then
MsgBox kBlatt & " existiert nicht"
Sheets.Add before:=Sheets(k0)
ActiveSheet.Name = kBlatt
End If
If Not (kOk Or jOk) Then Sheets(blatt).Activate ' oder was auch immer
End If
End If
End Sub
Datei: https://www.herber.de/bbs/user/110569.xlsm
Schöne Grüße,
Michael
P.S.: .Index=0 gibt es übrigens nicht, Minimum ist 1.
Anzeige
Prüfung bezüglich Worksheet
15.01.2017 19:22:12
Peter
Hallo Michael,
besten Dank für Deine Hilfe.
Da habe ich mich wohl sehr unglücklich ausgedrückt. Ich benötige kein Makro zum Einfügen der Arbeitsblätter. Das habe ich bereits.
Ich brauche ein Controlling. Ich habe ein Makro mit welchem Daten in das zweite Arbeitsblatt links von dem Arbeitsblatt "Eingabe lfd. Schuljahr" eingefügt wird.
Deshalb: Worksheets(Worksheets("Eingabe lfd. Schuljahr").Index - 2).Select
Da aber zu Beginn des Programms die Arbeitsblätter links noch nicht vorhanden sind und somit
Worksheets(Worksheets("Eingabe lfd. Schuljahr").Index - 2).Select nicht ausgewählt werden kann,
soll hier ein Abbruch stattfinden mit dem HinweisMsgBox "Bitte zuerst weiteres Konto anlegen".
Das Makro kann erst ausgeführt werden, wenn weiteres Schuljahr mit weiteren zwei Arbeitsblätter
angelegt sind.
Daher waren auch die Arbeitsblätter leer.
Wenn Du die vier Arbeitsblätter rechts von "Eingabe lfd. Schuljahr" einordnest und dann die Prüfung vornimmst, dann muss die MsgBox kommen und anschliessend Exit Sub. Wenn Du die vier Blätter nach links einordnest dann muss die Prüfung das zweite Arbeitsblatt neben "Eingabe lfd. Schuljahr" aktivieren.
Ich hoffe, dass ich mich jetzt verständlich ausgedrückt habe.
Nochmals besten Dank für Deine Hilfe.
Gruss
Peter
Anzeige
AW: Prüfung bezüglich Worksheet
15.01.2017 20:40:04
Michael
Hi,
mache einfach ein error-handling für diese Anweisung, also:
on error resume next
Worksheets(Worksheets("Eingabe lfd. Schuljahr").Index - 2).Select
if err.number0 then
msgbox "geht nicht"
Exit sub
endif
on error goto 0
' und weiter im Programm, das richtige Blatt ist ja dann
' bereits selektiert

Siehe auch: http://www.online-excel.de/excel/singsel_vba.php?f=144
Gruß,
M.
Prüfung bezüglich Worksheet, weiterer Fehler
16.01.2017 08:10:36
Peter
Hallo Michael,
besten Dank für Deine Hilfe. Das Makro funktioniert soweit richtig.
Ein Problem besteht jedoch für meine Anwendung noch.
Ich benötige noch eine weitere Prüfung:
Wenn ich aus dem Beispiel das Konto 2017 und Jahresabrechnung 2017 entferne stimmt das ganze nicht mehr.
Es wird dann die 2. Tabelle von links markiert und das wäre fatal.
Hier wäre wohl eine zusätzliche Prüfung erforderlich, welchen Namen die Tabelle hat. Denn es darf ja nur die Vorjahres-Jahresabrechnung markiert werden.
Gruss
Peter
Anzeige
AW: Prüfung bezüglich Worksheet, weiterer Fehler
16.01.2017 10:17:21
Werner
Hallo Peter,
deine Datei kann ich nicht herunterladen, die wird über den eingestellten Link nicht gefunden, da hat es wohl aus irgendeinem Grund den Link zerschossen.
Wenn ich dich richtig verstanden habe, dann reicht es doch wenn du den Index abfragst.
If Worksheets(Worksheets("Eingabe lfd. Schuljahr").Index - 2) 
Gruß Werner
Ergebis gefunden
16.01.2017 16:26:39
Peter
Hallo Werner,
das mit der Auswahl der zutreffenden Seite war doch ein wenig aufwendiger. Es war nicht damit gedient,
nur das Worksheet auszuwählen.
Ich habe das ganze jetzt wie folgt gelöst:
Option Explicit
'wird von ttx_2 benötigt
Function SheetExists(sName As String) As Boolean
Dim sh
For Each sh In Sheets
If sh.Name = sName Then
SheetExists = True
Exit Function
End If
Next
End Function

Sub Prüfung_Jahresabrechnung_vorhanden()
Dim Vorjahr1 As String  'aus Worksheets("Vorschau und Drucken")
Dim Vorjahr2 As String  'aus Worksheets("Anfang und Enddatum")
Worksheets("Vorschau und Drucken").Activate
'markiert den erforderlichen Wert aus Tabelle "Anfang und Enddatum" Range R6
'Call Wert_ausZelle_R6_suchen_markieren
Dim Liste As Range
Dim Suchbegriff As String
Dim Zelle As Range
Suchbegriff = Worksheets("Anfang und Enddatum").Range("R6").Value
'Debug.Print Suchbegriff
Set Liste = Range(Cells(2, 23), Cells(Cells(1, 1).CurrentRegion.Rows.Count, 23))
For Each Zelle In Liste
'        If zelle.Value = "2017" Then
If Zelle.Value = Suchbegriff Then
'            zelle.Delete Shift:=xlToLeft
Zelle.Select
End If
Next
'ab hier Prüfung Vorjahr
Vorjahr1 = ActiveCell
Vorjahr2 = Worksheets("Anfang und Enddatum").Range("R6").Value
'Debug.Print Vorjahr1
'Debug.Print Vorjahr2
If Worksheets("Vorschau und Drucken").Range("V2") = "" Then
MsgBox "Es ist noch keine Tabelle vorhanden"
Exit Sub
Else
If Vorjahr2 = ActiveCell Then
MsgBox "beide Zellen sind identisch"
ActiveCell.Offset(0, -1).Select
'ab hier erfolgt Prüfung, ob Tabelle existiert
Dim sName As String
sName = ActiveCell
If SheetExists(sName) Then
Application.DisplayAlerts = False
Sheets(sName).Select
Application.DisplayAlerts = True
Else
Worksheets.Add
ActiveSheet.Name = sName
End If
'MeinMakro ausführen: Modul1 - Jahresabrechnung_Übertrag_vorherigesSchuljahrKassenprüfung
Call Jahresabrechnung_Übertrag_vorherigesSchuljahrKassenprüfung
Else
'hier Abbruch, wenn noch keine zweite Jahresabrechnung besteht
MsgBox "Es ist keine zweite Tabelle vorhanden"
Exit Sub
End If
End If
End Sub

Besten Dank noch für Deine Hilfe.
Gruss Peter
Anzeige
AW: Prüfung bezüglich Worksheet
16.01.2017 16:27:21
Peter
Hallo Michael,
das mit der Auswahl der zutreffenden Seite war doch ein wenig aufwendiger. Es war nicht damit gedient,
nur das Worksheet auszuwählen.
Ich habe das ganze jetzt wie folgt gelöst:
Option Explicit
'wird von ttx_2 benötigt
Function SheetExists(sName As String) As Boolean
Dim sh
For Each sh In Sheets
If sh.Name = sName Then
SheetExists = True
Exit Function
End If
Next
End Function

Sub Prüfung_Jahresabrechnung_vorhanden()
Dim Vorjahr1 As String  'aus Worksheets("Vorschau und Drucken")
Dim Vorjahr2 As String  'aus Worksheets("Anfang und Enddatum")
Worksheets("Vorschau und Drucken").Activate
'markiert den erforderlichen Wert aus Tabelle "Anfang und Enddatum" Range R6
'Call Wert_ausZelle_R6_suchen_markieren
Dim Liste As Range
Dim Suchbegriff As String
Dim Zelle As Range
Suchbegriff = Worksheets("Anfang und Enddatum").Range("R6").Value
'Debug.Print Suchbegriff
Set Liste = Range(Cells(2, 23), Cells(Cells(1, 1).CurrentRegion.Rows.Count, 23))
For Each Zelle In Liste
'        If zelle.Value = "2017" Then
If Zelle.Value = Suchbegriff Then
'            zelle.Delete Shift:=xlToLeft
Zelle.Select
End If
Next
'ab hier Prüfung Vorjahr
Vorjahr1 = ActiveCell
Vorjahr2 = Worksheets("Anfang und Enddatum").Range("R6").Value
'Debug.Print Vorjahr1
'Debug.Print Vorjahr2
If Worksheets("Vorschau und Drucken").Range("V2") = "" Then
MsgBox "Es ist noch keine Tabelle vorhanden"
Exit Sub
Else
If Vorjahr2 = ActiveCell Then
MsgBox "beide Zellen sind identisch"
ActiveCell.Offset(0, -1).Select
'ab hier erfolgt Prüfung, ob Tabelle existiert
Dim sName As String
sName = ActiveCell
If SheetExists(sName) Then
Application.DisplayAlerts = False
Sheets(sName).Select
Application.DisplayAlerts = True
Else
Worksheets.Add
ActiveSheet.Name = sName
End If
'MeinMakro ausführen: Modul1 - Jahresabrechnung_Übertrag_vorherigesSchuljahrKassenprüfung
Call Jahresabrechnung_Übertrag_vorherigesSchuljahrKassenprüfung
Else
'hier Abbruch, wenn noch keine zweite Jahresabrechnung besteht
MsgBox "Es ist keine zweite Tabelle vorhanden"
Exit Sub
End If
End If
End Sub

Besten Dank noch für Deine Hilfe.
Gruss Peter
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige