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

VBA: flexibler Bezug Dateiname & Reiter

VBA: flexibler Bezug Dateiname & Reiter
21.07.2020 07:56:59
Jens
Guten Morgen,
ich möchte folgende Formel an zwei Stellen "flexibel" gestalten.
1) Aus AD1 soll der Name der Datei ergänzt weden. Dort steht eine Kalenderwoche, also z.B. 30. In der Formel soll dann die Datei "WochenplanKW 3020.xlsx" (20 steht hier für das Jahr, also 2020).
2) aus AE1 soll das Tabellenblatt (MO, DIE, usw.) für die Formel gezogen werden.
Leider habe ich von VBA keine Ahnung.
Hier mein Versuch (der flexible Bezug für das Tabellenblatt fehlt noch komplett) .... der erste Teil (in kursiv) bezieht sich auf eine andere Formel, die so passt und auch funktioniert (Dank Hilfe aus dem Forum!).
Danke für Eure Hilfe.
JBE

Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Address(0, 0) = "B2" Then
Range("D5:Y5").FormulaLocal = "='X:\PFAD\[WochenplanKW " & Format(Target, "00") & "20. _
xlsx]Mon'!K$47"
End If
If Target.Address(0, 0) = "AD1" Then Range("z20:ah20").FormulaLocal = "='WENNFEHLER(INDEX('X:\PFAD\[WochenplanKW " & Format( _ Target, "00") & "20.xlsx]Mon'!$B:$B;AGGREGAT(15;6;ZEILE('X:\PFAD\[WochenplanKW " & Format(Target, "00") & "20.xlsx]Mon'!K$3:K$42)/('X:\PFAD\[WochenplanKW " & Format(Target, "00") & "20.xlsx]Mon'!K$3:K$42=1)/('X:\PFAD\[WochenplanKW " & Format(Target, "00") & "20.xlsx]Mon'!J$3:J$421);ZEILE(A1)));"")" End If End Sub

4
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: VBA: flexibler Bezug Dateiname & Reiter
22.07.2020 08:21:08
fcs
Hallo Jens,
soweit ich das jetzt erkennen konnte hast du einen Syntaxfehler eingebaut. Das Hochkomma "'" vor WENNFEHLER darf da nicht stehen.
es ist ratsam, die Informationen zu Pfad, Dateiname, Blattname, KW in Variablen zu erfassen und auch die Formel selbst in einer Variablen zusammenzubauen.
Dann kann man ggf. die Werte prfüfen.
Ich hab das Makro entsprechend angepasst, so das bei Änderung von KW oder Wochentag die Formel angepasst wird.
Außerdem erfolgt eine Prüfung, ob die Eingabewerte OK sind.
Getestet hab ich jetzt nicht, aber es sollte passen.
LG
Franz
Private Sub Worksheet_Change(ByVal Target As Range)
Dim sPfad$, sDatei$, sBlatt$, sFormelBlatt$, sFormel$, iKW%
sPfad = "X:\PFAD\"
If Target.Address(0, 0) = "B2" Then
sDatei = "WochenplanKW " & Format(Target, "00") & "20.xlsx"
sBlatt = "Mon"
sFormelBlatt = "'" & sPfad & "[" & sDatei & "]" & sBlatt & "'"
Range("D5:Y5").FormulaLocal = "=" & sFormelBlatt & "!K$47"
End If
If Target.Address(0, 0) = "AD1" Or Target.Address(0, 0) = "AE1" Then
iKW = Range("AD1").Value
sBlatt = Range("AE1").Text
'Eingaben prüfen
Select Case iKW
Case 1 To 53
Case Else
MsgBox "Eingabe KW fehlt oder ist nicht im Bereich von 1 bis 53"
Exit Sub
End Select
Select Case UCase(sBlatt)
Case "MO", "Di", "MI", "DO", "FR", "SA", "SO" ' Kurzform der Wochentage ggf anpassen
Case Else
MsgBox "Eingabe für Wochentag fehlt oder stimmt nicht mit den Vorgaben für " _
& "die Schreibweise überein" & vbLf _
& "MO, DI, MI, DO, FR, SA, SO"
Exit Sub
End Select
sDatei = "WochenplanKW " & Format(iKW, "00") & "20.xlsx"
sFormelBlatt = "'" & sPfad & "[" & sDatei & "]" & sBlatt & "'"
sFormel = "=WENNFEHLER(INDEX(" & sFormelBlatt & "!$B:$B;AGGREGAT(15;6;ZEILE(" _
& sFormelBlatt & "!K$3:K$42)/(" & sFormelBlatt & "!K$3:K$42=1)/(" _
& sFormelBlatt & "!J$3:J$421);ZEILE(A1)));"")"""
Range("z20:ah20").FormulaLocal = sFormel
End If
End Sub

Anzeige
AW: VBA: flexibler Bezug Dateiname & Reiter
24.07.2020 07:25:06
Jens
Lieber Franz,
hab vielen herzlichen Dank.
Habe das jetzt so eingebaut und auch an den von Dir markierten Stellen angepasst.
Das Makro läuft soweit ohne Fehler durch .... meldet dann aber beim Debuggen einen Fehler und bleibt hiert "stehen":
Range("z20:ah20").FormulaLocal = sFormel
Somit wird die Formel in den Spalen Z20:AH20 auch nicht verändert.
Hast Du einen Tipp für mich was da nicht stimmt?
Danke Dir.
JBE
AW: VBA: flexibler Bezug Dateiname & Reiter
24.07.2020 10:58:37
fcs
Hallo Jens,
ich hatte jetzt nicht alles nachgebaut und getestet.
in der Formel steckte noch ein Syntaxfehler drin - Klammersetzng am Ende der Formel und unter VBA müssen die " in einer Formel verdoppelt werden zu "".
Korrektur:
      sFormel = "=WENNFEHLER(INDEX(" & sFormelBlatt & "!$B:$B;AGGREGAT(15;6;ZEILE(" _
& sFormelBlatt & "!K$3:K$42)/(" & sFormelBlatt & "!K$3:K$42=1)/(" _
& sFormelBlatt & "!J$3:J$421);ZEILE(A1)));"""")"

So sollte es funktionieren.
Wenns geht, dann sollte man die Eingabe der Formeln mit dem Makrorekorder aufzeichnen. Dann hat man zumindest die Syntax richtig. Allerdings werden beim Aufzeichnen die US-Formelbezeichnungen verwendet und die Formeln sind bei den Zelladressen in der R1C1-Schreibweise - etwas gewöhnungsbedürftig aber uneter VAB meist einfacher zu modifizieren.
Weiterer Vorteil: In dieser Formel funktioniert das Einfügen von Formeln unabhängig von den lokalen Spracheinstellungen.
LG
Franz
Anzeige
AW: VBA: flexibler Bezug Dateiname & Reiter
27.07.2020 06:27:04
Jens
Lieber Franz,
herzlichen Dank.
Das funktioniert!
Dir einen schönen Start in die neue Woche.
Jens

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige