Ich benütze nachfolgendes Macro, um aus einem Rezeptblatt bestimmte Werte wie den Namen des jeweiligen Rezeptes, den Autor, das Erstellungsdatum und den kalkulierten Preis an eine Rezeptliste ("Inhaltsverzeichnis") zu übergeben. Das Makro erkennt jeweils die letzte Zeile im Inhaltsverzeichnis und schreibt in die entsprechend nachfolgende freie Zeile. Es wird in die Spalten A bis E geschrieben. Das funktioniert so weit ausgezeichnet, aber:
Der Rezeptname soll nicht als blosser Zellwert (String) übergeben werden, sondern als Hyperlink, so das vom Blatt "Inhaltsverzeichnis" beim Anklicken des Rezeptnamens wieder auf das entsprechende Rezeptblatt gesprungen wird. Der Rezeptname wird in Zelle D1 des Rezeptblattes aus dem aus dem Blattname vom Register eingetragen mit der Formel: =TEIL(ZELLE("Dateiname";D1);FINDEN("]";ZELLE("Dateiname";D1))+1;31).
Der Preis soll zweimal übergeben werden. Der Preis wird aus Zelle E40 des Rezeptblattes bezogen. In Spalte B (Kartenpreis) des Blattes "Inhaltsverzeichnis" soll der Preis als Wert (Double) übergeben werden, was auch super funktioniert. In Spalte C (aktueller Preis) soll statt des Wertes ein Zellbezug zu E40 im Rezeptplatt eingefügt werden. Hintergrund: Sollte sich der kalkulierte Preis des Rezeptes durch beispielsweise geänderte Zutatenpreise ändern, soll im Blatt "Inhaltsverzeichnis" der Preisunterschied zum originalen Preis sichtbar gemacht werden (das wird dann mit bedingter Formatierung hervorgehoben).
Sub RezeptKatalog() 'speichert die wichtigsten Daten im Blatt "Inhaltsverzeichnis"
Const dieListe As String = "Inhaltsverzeichnis" 'deklariert das Zielblatt
Dim SuZ1 As Long
Dim Rezept As String
Dim KartPreis As Double
Dim aktPreis As Double
Dim Autor As String
Dim RezDat As Date
Dim objWS As Worksheet
ActiveSheet.Select
Set objWS = ActiveSheet
Rezept = Range("D1").Value
KartPreis = Range("E40").Value
aktPreis = Range("E40").Value
Autor = Range("B6").Value
RezDat = Range("B5").Value
Sheets("Inhaltsverzeichnis").Activate
Call SchutzAus
SuZ1 = 3
While Not (IsEmpty(Sheets(dieListe).Cells(SuZ1, 1)))
SuZ1 = SuZ1 + 1
Wend
Sheets(dieListe).Cells(SuZ1, 1).Formula = Rezept
Sheets(dieListe).Cells(SuZ1, 2).Formula = KartPreis
Sheets(dieListe).Cells(SuZ1, 3).Formula = "=" & objWS.Name & "!E40"
Sheets(dieListe).Cells(SuZ1, 3).Formula = aktPreis
Sheets(dieListe).Cells(SuZ1, 4).Formula = Autor
Sheets(dieListe).Cells(SuZ1, 5).Formula = RezDat
Sheets(dieListe).Hyperlinks.Add Anchor:=Cells(SuZ1, 1), Address:="", SubAddress:=objWS.Name & "! _
$A$18", TextToDisplay:=CStr(objWS.Name)
Call SchutzEin
End Sub
Ich wäre froh, wenn ihr eine Idee dazu hättet :-)
Hier der Link zur Musterdatei: https://www.dropbox.com/s/sk24es44qsd40dq/InventarRezeptkalkulatorVersion6.xlsm?dl=0
Grüssle und merci im Voraus.
Ringo