910 Aufrufe
Gefragt in Tabellenkalkulation von excel123 Einsteiger_in (3 Punkte)
Hallo liebe Excel-Fangemeinde. In einem Tabellenblatt habe ich mir ein Raster angelegt mit Kalenderwoche und Akkordgruppe. Mein Ziel war es wenn ich auf eine bestimmte Zelle innerhalb dieses Rasters klicke, dass mir dann die zugeordnete Datei geöffnet wird. Als ich dieses Raster angelegt hatte war eine entsprechende Ausführung möglich. Nachdem ich aber nun 64 KW´s und 32 Gruppen als Raster angelegt habe, erscheint beim Anklicken einer Zelle aus diesem Raster die Fehlermeldung: Fehler beim Kompilieren - Prozedur zu groß

Folgende Makros habe ich für die Ausführung angelegt:

In dem Tabellenblatt mit dem Raster unter:

***********************************************************************************************

Private Sub Worksheet_SelectionChange (ByVal Target as Excel.Range)

If Target.Address = "$M$4" Then Call M4

If Target.Address = "$M$5" Then Call M5      ...    usw. für jede Gruppe mit jeder KW

*************************************************************************************************

In einem Modul stehen nun die einzelnen Makros zum Call

Sub M4

ChDir G:\Gruppe 02\Meister\2019

Workbooks.Open Filename: = G:\Gruppe 02\Meister\2019\Grp 2 KW 1 fertig. xlsm"

als nächstes kommt nun Sub M5 usw....

************************************************************************************************

Als ich am Anfang das auf diese Art getestet hatte funktionierte es auch, aber jetzt wo ich alle Makros fertig

habe geht gar nichts mehr bis auf die erwähnte Fehlermeldung.

Gibt es da eine andere Möglichkeit außer evtl. das Raster auf 12 Monatsblätter zu verteilen?

Vielen Dank schon mal an alle die hier reingeschaut und sich für das Thema interessiert haben. Ich wünsche allen noch einen schönen Tag und verbleibe mit freundlichen Grüßen... Helmut

21 Antworten

0 Punkte
Beantwortet von m-o Profi (22.7k Punkte)

Hallo Helmut,

hier ein Beispiel, wie du das lösen könntest

Private Sub Worksheet_SelectionChange(ByVal Target As Range)

Select Case Target.Address
   Case "$M$4"
      Workbooks.Open Filename:= "G:\Gruppe 02\Meister\2019\Grp 2 KW 1 fertig. xlsm"
   Case "$M$5"
      Workbooks.Open Filename:="G:\Gruppe 03\Meister\2019\Grp 3 KW 1 fertig. xlsm"
End Select

End Sub

Auf das ChDir kannst du verzichten, wenn du die Datei nur öffnen willst. Zwischen Select Case und End Select kannst für deine jeweiligen Zellen den Coden entsprechend dem Beispiel ergänzen. Die einzelnen Makros zum Öffnen der Datei in dem allgemenen Modul kannst du löschen. Probiere das aber erst einmal in einer Testdatei.

Gruß

M.O.

0 Punkte
Beantwortet von
Hallo M.O.,

vielen Dank schon mal vorab für Deine Antwort.

Von der Programmierung her sieht das ja schon mal viel kürzer aus wie bei mir - sozusagen 2 Schritte in einem. Dazu werde ich die Datei mal neu speichern und dann umschreiben. Bin mal gespannt ob es dann geht, da es ja bei der Anzahl der Zellenabfrage ja bleibt = 2048 = 2048 Makros...  Ich denke das ich da meinen eigentlichen Knackpunkt habe, aber erstmal Deinen Vorschlag annehmen und mal schauen ob und was dann passiert. Sobald ich das fertig habe werde ich mich wieder (hoffentlich mit einer positiven Info) melden... Thx und LG Helmut
0 Punkte
Beantwortet von m-o Profi (22.7k Punkte)
Hallo Helmut,

bei so vielen Zellen und Makros würde ich mir die Frage stellen, ob es z.B. eine Möglichkeit ggf. den Pfad und den Namen der zu öffnenden Datei dynamisch (z.B. abhängig von Spalte und / oder Zeile) zu ermitteln bzw. zusammenzusetzen.

Gruß

M.O.
0 Punkte
Beantwortet von
Hallo M.O.,

ich glaube das wird so nicht gehen oder müsste mir eine ganz andere Lösung für meine ursprüngliches Aufgabe einfallen lassen.

Das Raster sieht so aus:

KW   Grp.    Grp.   Grp.  usw...

1.      2 -1    3 - 1   4 - 1  usw...        

2.      2 - 2   3  - 2  4 - 2  usw...

Die 2 steht für die Gruppe (02) und die 1 für 1. KW und befindet sich in Zelle M4.

Die Zelle N4 steht für Grp. 03 und 1.KW; Die Zelle O4 für die Grp. 04 und 1.KW.

Über eine benutzerdefinierte Formatierung bekomme ich nun die Zellen farbig angezeigt, welche der Gruppen ihre Daten in eine Sammeldatei übertragen haben und welche nicht.

Durch anklicken der Zelle mit der Info >nicht übertragen< öffne ich dann das Tabellenblatt der jeweiligen Gruppe und KW, damit ich mir die Daten selber in die Sammeldatei übertragen kann.

Von daher denke ich das ich bei dieser Vorgabe die Abfrage nicht anders gestalten kann. Aber ich lasse mich gerne eines besseren belehren ;-)...

Vielen Dank und mit freundlichen Grüßen.. Helmut
0 Punkte
Beantwortet von m-o Profi (22.7k Punkte)

Hallo Helmut,

mal zum Testen: Cursor auf eine Zelle in deiner Tabelle setzen und dann das Makro starten:

Sub test()

Dim strDateiname As String
Dim varGruppe As Variant

'Inhalt der aktiven Zelle wird geteilt; Teiler = -
varGruppe = Split(ActiveCell.Value, "-")
'Dateiname wird zusammengesetzt
strDateiname = "Grp " & varGruppe(0) & " KW " & varGruppe(1) & " fertig.xlsm"

MsgBox strDateiname

End Sub

Schau mal, ob die Dateinamen stimmen. Falls das klappt, kann mit dem Pfad ggf. ähnlich vorgehen.

Gruß

M.O.

0 Punkte
Beantwortet von
Hallo M.O.

das Makro habe ich eingesetzt und es zeigt mir die Grp. mit der entsprechenden KW und dem Zusatz an. Soweit so gut und funktioniert. Werde dann auch mal testen wie es mit den Pfadnamen gehen kann...

Vielen Dank und mfG... Helmut
0 Punkte
Beantwortet von
Guten Tag zusammen,

nachdem M.O. mir geholfen hatte, den Dateinamen zu generieren, habe ich als nächstes den Pfadnamen auf die selbe Art erstellt, was in der Anzeige (Msgbox auch entsprechend gut aussieht) - bis auf... die Daten stehen hintereinanderweg, so dass eine Unterscheidung von dem Pfad zum Dateinamen nicht auf den ersten Blick möglich ist und sicherlich auch der Fehler ist, warum das Makro die jeweilige Datei nicht öffnen kann, da hier anscheinend eine Trennung irgendwie stattfinden muss.

In der Hoffnung das mir jemand helfen kann, anbei das aktuelle Makro.

Ich bedanke mich schon mal für alle Interessierten und wünsche Euch allen ein schönes WE... LG Helmut

Sub test1()
Dim strDateiname As String
Dim strpfadname As String
Dim varGruppe As Variant

'Inhalt der aktiven Zelle wird geteilt; Teiler = -
varGruppe = Split(ActiveCell.Value, "-")
'Dateiname wird zusammengesetzt
strDateiname = "Grp " & varGruppe(0) & " KW " & varGruppe(1) & " fertig.xlsm"
strpfadname = "G:\Fertigung\Abrechnung\Gruppe " & varGruppe(0) & "\Meister\2019\"

Workbooks.Open strpfadname & strDateiname

'Beispielpfad:  G:\Fertigung\Abrechnung\Gruppe 12\Meister\2019
'MsgBox strpfadname & strDateiname
End Sub
0 Punkte
Beantwortet von m-o Profi (22.7k Punkte)
Hallo Helmut,

eigentlich sollte der Code funktionieren. Wenn du eine Datei öffnen willst, brauchst du neben dem Dateinamen natürlich auch den Pfad. Und eine "Trennung" von Pfad und Datei muss nicht stattfinden.

Welche Fehlermeldung wird denn angezeigt (Fehler 1004 - Die Datei ... konnte nicht gefunden werden)? Ggf. prüfe mal, ob die Pfad- und Dateinamen richtig sind.

Gruß

M.O.
0 Punkte
Beantwortet von
Hallo M.O.,

zunächst einmal vielen Dank für Deine Rückmeldung.

Bin echt am verzweifeln mit dem Teil... Habe zwischenzeitlich eine ähnliche Anfrage gefunden und die Antwort sah so aus wie bei mir - allerdings mit einer leicht veränderten Schreibweise - statt & stand da + "\" +  zwischen dem Pfad und dem Dateinamen.

Habe dann mal eine einzelne Zelle 28 - 17 rausgepickt und die Datei auf den Desktop gelegt um mal zu testen was dann passiert.

Dieses Makro funktioniert:   Workbooks.Open Filename:="C:\Users\fingerh\Desktop\Grp 28 KW 17 fertig.xlsm"

Dieses Makro funktioniert nicht - Datei nicht vorhanden, gelöscht, falscher Pfad?):

Dim strDateiname As String
Dim strpfadname As String

strpfadname = "C:\User\fingerh\Desktop"
strDateiname = "Grp 28 KW 17 fertig.xlsm"

Workbooks.Open strpfadname + "\" + strDateiname

**************************************************************************************

Ich habe absichtlich mal die Abfrage mit der Trennung weggelassen und dennoch kommt die Fehlermeldung das die Datei nicht gefunden wird. Entweder übersehe ich da ständig was oder es muss noch was anderes sein.

Vielleicht sieht ja von Euch jemand das was ich nicht sehe... wäre jedenfalls schön zu wissen, dass es doch funktioniert - nur das das Problem davor sass ;-)...  Vielen Dank schon mal für Euer Interesse und have a nice Day... LG Helmut
0 Punkte
Beantwortet von m-o Profi (22.7k Punkte)

Hallo Helmut,

es ist eigentlich egal, ob du den Backslash zwischen Pfad und Dateiname in den Pfad einbaust oder das wie in deinem Beispiel machst.

Aber bei deinem Beispielcode fehlt im Pfad das s nach User (siehe funktionieren Code):

strpfadname = "C:\Users\fingerh\Desktop"

Schau mal, ob das Makro dann funktioniert.

Als ich das gerade schreibe, denke ich: Lies doch noch mal die Frage durch. Und siehe da, ich glaube ich habe den Fehler im Makro gefunden.

In deiner Frage ist der Pfad wie folgt vorgegeben:

Workbooks.Open Filename: = "G:\Gruppe 02\Meister\2019\Grp 2 KW 1 fertig. xlsm"

Durch den Code wird der Pfad aber wie folgt erstellt:

Workbooks.Open Filename: = "G:\Gruppe 2\Meister\2019\Grp 2 KW 1 fertig. xlsm"

Hier fehlt die Null bei der Gruppe im Pfad. Versuch mal den folgenden Code:

Sub test1()
Dim strDateiname As String
Dim varGruppe As Variant

'Inhalt der aktiven Zelle wird geteilt; Teiler = -
varGruppe = Split(ActiveCell.Value, "-")
'Dateiname wird zusammengesetzt
If CLng(varGruppe(0)) < 9 Then
 strDateiname = "G:\Fertigung\Abrechnung\Gruppe 0" & varGruppe(0) & "\Meister\2019\Grp " & varGruppe(0) & " KW " & varGruppe(1) & " fertig.xlsm"
Else
 strDateiname = "G:\Fertigung\Abrechnung\Gruppe " & varGruppe(0) & "\Meister\2019\Grp " & varGruppe(0) & " KW " & varGruppe(1) & " fertig.xlsm"
End If
 
Workbooks.Open strDateiname

End Sub


Gruß

M.O.

...