Hallo,
habe jetzt gerade mal doch den vergleich selbst gemacht, also Formel von hand als Arrayformel definiert, und dann im Code diese mit deinem strPfad verglichen.
Also du musst die Formel in englisch eingeben, und zwar "Komplett".
Das heist nicht nur die Formel-Namen in Englisch, also Vergleich->match, sondern auch die Semikolon durch Kommas erstzten.
"=INDEX('C:\tmp\[mappe1.xlsm]Tabelle1'!$G$11:$MZ$1469,MATCH($F$4&$D9,'C:\tmp\[mappe1.xlsm]Tabelle1'!$G$11:$G$1469&'C:\tmp\[mappe1.xlsm]Tabelle1'!$H$11:$H$1469,0),E$6)"
Ich habe deine Formel im Code mal bis auf eine Stelle korrigiert und die Schleife drin gelassen, die mir dein String und die von Hand eingebgebene Formel vergleicht.
Die Schleife spukt dir sämtliche Stellen aus wo sich die Formeln unterscheien.
Wenn du den letzten Fehler korrigierst, sollte es gehen...
Sub Pfadhinzufügen_Click()
'Ändert/Fügt Dateipfad hinzu
Dim LoSpalte As Long
Dim LoZeile As Long
Dim vardatei As Variant
Dim varPfad1 As Variant
Dim strNameSchichtprotokoll As String
Dim strPfad As Variant
Dim strMatrix As String
Dim strZeile As String
Dim strSpalte As String
LoZeile = 9 '9
LoSpalte = 5 'E
'Dateipfad vom Benutzer abfragen
vardatei = Application.GetOpenFilename("Alle Dateien,*.*", 1, "Auswahl digitales Schichtprotokoll")
'Pfad anpassen
varPfad1 = Left(vardatei, InStrRev(vardatei, "\")) 'Speichert den Dateipfad (ohne Dateinahmen)
varPfad1 = Replace(varPfad1, "H:", "\\hv\fs") 'ersetzt "H:" im Dateipfad durch "\\hv\fs"
strNameSchichtprotokoll = Mid(vardatei, InStrRev(vardatei, "\") + 1) 'Speichert den Dateinamen (ohne zugehörigen Dateipfad)
strPfad = "'" + varPfad1 + "[" + strNameSchichtprotokoll + "]Tabelle1'!" 'setzt Pfad und Dateiname so wieder zusammen, dass direkt auf das Blatt "Schichtprotokoll zugegriffen wird"
strMatrix = "=INDEX(" + strPfad + "$G$11:$MZ$1469," 'INDEX-Funktion (Matrix, Zeile, Spalte) mit Wert für Matrix
strZeile = "MATCH($F$4&$D9;" + strPfad + "$G$11:$G$1469&" + strPfad + "$H$11:$H$1469,0)," 'Wert für Zeile
strSpalte = "E$6)" 'Wert für Spalte
strPfad = strMatrix + strZeile + strSpalte 'die obigen 3 Zeilen zusammengesetzt zur Komplettfunktion
If vardatei = False Then
MsgBox "Hinzufügen wurde unterbrochen!", vbInformation, p_cstrAppName 'MsgBox: Fehlermeldung bei Unterbechung
Else
For i = 1 To Len(strPfad)
' Schleife um Fehler zu finden
If Mid(strPfad, i, 1) <> Mid(Sheets(1).Cells(LoZeile, LoSpalte).FormulaArray, i, 1) Then
MsgBox i & vbCr & Left(strPfad, i) & vbCr & Left(Sheets(1).Cells(LoZeile, LoSpalte).FormulaArray, i)
Stop
End If
Next i
Sheets(1).Cells(LoZeile, LoSpalte).FormulaArray = strPfad 'Funktioniert. Gibt aber #WERT zurück.
End If
End Sub
|