PDF öffnen, Dateiname aus Zelle

  • Excel

Es gibt 17 Antworten in diesem Thema. Der letzte Beitrag () ist von INOPIAE.

    PDF öffnen, Dateiname aus Zelle

    Hallo Zusammen,ich muss mich vorab entschuldigen, wenn ich mich umständlich oder falsch ausdrücke.
    Ich bin absoluter Anfänger was Makro / VBA angeht.
    Mit mehr Glück als Verstand, habe ich es hinbekommen, dass meine Rechnungen per Makro / VBA in einem Ordner, auf meinem Server gespeichert werden.

    Dateiname setzt sich wie folgt zusammen:
    Rechnungsnummer Name, Adresse, Rechnungsdatum.pdf

    Informationen (Dateiname) bekommt Excel aus der Zelle AO1.

    Makro:

    Visual Basic-Quellcode

    1. Dim sPath As String
    2. Dim PDF_NAME As String
    3. sPath = ThisWorkbook.Path & "\Rechnungen 2023"
    4. If sPath = "" Then
    5. MsgBox "Die Datei muß zuerst gespeichert werden"
    6. Exit Sub
    7. End If
    8. sPath = IIf(Right$(sPath, 1) = Application.PathSeparator, sPath, sPath & Application. _
    9. PathSeparator)
    10. On Error GoTo ENDE:
    11. Application.DisplayAlerts = False
    12. PDF_NAME = sPath & Range("AO1").Value & ".pdf" 'ANPASSEN
    13. If Not PDF_NAME = "Falsch" Then
    14. ActiveSheet.ExportAsFixedFormat Type:=xlTypePDF, Filename:=PDF_NAME, Quality:=xlQualityStandard, _
    15. IncludeDocProperties:=True, IgnorePrintAreas:=False, OpenAfterPublish:=True
    16. End If
    17. ENDE:
    18. Application.DisplayAlerts = True
    19. 'MsgBox ThisWorkbook.Path & "\Rechnungen 2023"
    20. End Sub


    Hier fehlt mir eine Fehlermeldung, wenn der Dateiname zum Beispiel ein „/“ enthält. Also das, was nicht in einem Dateinamen vorkommen darf.

    Mein 2. Problem:
    Beispieldatei:
    011-23 Max Mustermann, Musterstraße 8, 55555 Musterstadt 20.04.2023.pdf

    Pfad:
    sPath = ThisWorkbook.Path & "\Rechnungen 2023"

    In dem Übersichtsregister möchte ich durch Eingabe von einem Teil des Dateinamens, die pdf öffnen.
    Im Regelfall soll die Rechnungsnummer als Teil-Name der pdf als Suchbegriff eingegeben werden. Genauso gut kann Name oder Datum eigegeben werden.
    Das Problem hier: Max Mustermann kommt evtl. oft vor, ebenso kann die Rechnungsnummer sich mit einer Adresse oder einer anderen Eingabe überschneiden.
    Keine Ahnung wie so eine Fehlermeldung aussehen kann oder soll.
    Ob ich die Eingabe in einer Zelle oder im Eingabefeld mache, ist egal.

    Vielleicht kann und möchte mir hier jemand helfen.

    Auf alle Fälle vielen Dank an Alle die sich hier für mich Gedanken machen.

    Sollte ich Informationen vergessen haben, kurz nachfragen.

    Liebe Grüße an alle Leser

    Carsten
    1.) azlihassan.com/apps/articles/v…s-a-valid-legal-file-name

    2.)

    Visual Basic-Quellcode

    1. Public Function FileExists(ByVal strFilename As String) As Boolean
    2. ' Überprüfen, ob angegebene Datei existiert
    3. If strFilename = vbNullString Then
    4. FileExists = False
    5. Else
    6. FileExists = (Dir$(strFilename, vbHidden + vbReadOnly + vbSystem + vbArchive) <> vbNullString)
    7. End If
    8. End Function

    If FileExists(PDF_NAME) Then ' ... (Fehler, Datei existiert bereits)
    Besucht auch mein anderes Forum:
    Das Amateurfilm-Forum
    Hallo Marcus Gräfe,
    erst mal herzlichen Dank für die Antwort. :) :thumbsup:

    zu 1
    Leider bin ich absoluter Anfänger, daher bekomme ich das nie zusammengebaut und für meine Zwecke geändert. Mit dem Link alleine komm ich leider nicht weiter. ;(

    zu 2
    011-23 Max Mustermann, Musterstraße 8, 55555 Musterstadt 20.04.2023.pdf

    Ich habe mich wohl verwirrend ausgedrückt ;(
    Durch Eingabe in einer Zelle oder ein Eingabefeld (z.B. Musterstadt oder 011-23), soll durch ein Button die "011-23 Max Mustermann, Musterstraße 8, 55555 Musterstadt 20.04.2023.pdf"
    aus dem Pfad:
    sPath = ThisWorkbook.Path & "\Rechnungen 2023"
    geöffnet werden. Sollte es mehrere Rechnungen aus z.B. Musterstadt geben, Ausgabe = Fehler / 3 Mal vorhanden / mehrfach vorhanden / oder oder oder...
    Was du geschickt hast, verstehe ich als Kontrolle vor dem Speichern, ob der Name schon existiert. ?( :)

    Danke für die Hilfe

    LG
    Carsten
    Zu 1.) Alles von Public Function IsValidFileName(sFileName As String) As Variant bis End Function in ein Modul oder dort, wo du deinen jetzigen Code hast, einfügen.

    Dann das:

    Visual Basic-Quellcode

    1. PDF_NAME = sPath & Range("AO1").Value & ".pdf" 'ANPASSEN
    2. If Not PDF_NAME = "Falsch" Then

    Ersetzen durch:

    Visual Basic-Quellcode

    1. PDF_NAME = Range("AO1").Value & ".pdf"
    2. If IsValidFileName(PDF_NAME) Then
    3. PDF_NAME = sPath & PDF_NAME
    4. ActiveSheet ' [...]
    5. Else
    6. MsgBox "Der Dateiname ist ungültig."
    7. End If

    Zu 2.) Ja, das war zur Kontrolle vor dem Speichern. Du müsstest dein Übersichtsregister durchlaufen und prüfen, ob es Duplikate gibt. Da ich das nicht kenne, kann ich keinen Code liefern.
    Besucht auch mein anderes Forum:
    Das Amateurfilm-Forum
    Hallo nochmal zusammen,

    @Marcus Gräfe
    das klappt nicht.

    Fehler beim kompilieren: Sub oder Function nicht definiert

    Modul1

    Visual Basic-Quellcode

    1. Sub Rechnung_speichern()
    2. 'Druckbereich ist bereits festgelegt
    3. Dim sPath As String
    4. Dim PDF_NAME As String
    5. sPath = ThisWorkbook.Path & "\2023 Rechnungen"
    6. If sPath = "" Then
    7. MsgBox "Die Datei muß zuerst gespeichert werden"
    8. Exit Sub
    9. End If
    10. sPath = IIf(Right$(sPath, 1) = Application.PathSeparator, sPath, sPath & Application. _
    11. PathSeparator)
    12. On Error GoTo ENDE:
    13. Application.DisplayAlerts = False
    14. PDF_NAME = Range("AO1").Value & ".pdf"
    15. If IsValidFileName(PDF_NAME) Then
    16. PDF_NAME = sPath & PDF_NAME
    17. ActiveSheet ' [...]
    18. Else
    19. MsgBox "Der Dateiname ist ungültig."
    20. End If
    21. ActiveSheet.ExportAsFixedFormat Type:=xlTypePDF, Filename:=PDF_NAME, Quality:=xlQualityStandard, _
    22. IncludeDocProperties:=True, IgnorePrintAreas:=False, OpenAfterPublish:=True
    23. End If
    24. ENDE:
    25. Application.DisplayAlerts = True
    26. 'MsgBox ThisWorkbook.Path & "\2023 Rechnungen"
    27. End Sub


    Modul2:

    Visual Basic-Quellcode

    1. Public Function FileExists(ByVal strFilename As String) As Boolean
    2. ' Überprüfen, ob angegebene Datei existiert
    3. If strFilename = vbNullString Then
    4. FileExists = False
    5. Else
    6. FileExists = (Dir$(strFilename, vbHidden + vbReadOnly + vbSystem + vbArchive) <> vbNullString)
    7. End If
    8. End Function


    So sollte das doch sein, oder?

    LG
    Carsten

    die Farbe Rot ist der Moderation vorbehalten und wurde ersetzt ~VaporiZed

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „VaporiZed“ ()

    Hallo INOPIAE

    erst mal sorry, das ich Text rot gemacht habe. Wusste nicht, dass dieses nur Moderatoren dürfen.
    Danke für deine Antwort.

    Ja, ich glaube der Fehler war bei IsValidFileName.

    Was ich alles erreichen möchte, kannst du ja oben nachlesen. :)
    Leider bin ich blutiger Anfänger in Makro / VBA

    LG
    Carsten
    Du verwendest in Modul1 IsValidFileName, hast in Modul2 aber nur FileExists deklariert (was du aber gar nicht verwendest). Du musst natürlich die Funktion von der Verlinkung einfügen, also IsValidFileName.
    Besucht auch mein anderes Forum:
    Das Amateurfilm-Forum
    Nochmal ein Hallo in die Runde,

    leider klappt es nicht. Angezeigter Fehler in Modul1:

    AktiveSheet

    Fehler beim Kompilieren: Unzulässige Verwendung oder Eigenschaft

    Modul1

    Visual Basic-Quellcode

    1. ​Sub Rechnung_speichern()
    2. 'Druckbereich ist bereits festgelegt
    3. Dim sPath As String
    4. Dim PDF_NAME As String
    5. sPath = ThisWorkbook.Path & "\2023 Rechnungen"
    6. If sPath = "" Then
    7. MsgBox "Die Datei muß zuerst gespeichert werden"
    8. Exit Sub
    9. End If
    10. sPath = IIf(Right$(sPath, 1) = Application.PathSeparator, sPath, sPath & Application. _
    11. PathSeparator)
    12. On Error GoTo ENDE:
    13. Application.DisplayAlerts = False
    14. PDF_NAME = Range("AO1").Value & ".pdf"
    15. If IsValidFileName(PDF_NAME) Then
    16. PDF_NAME = sPath & PDF_NAME
    17. ActiveSheet ' [...]
    18. Else
    19. MsgBox "Der Dateiname ist ungültig."
    20. End If
    21. ActiveSheet.ExportAsFixedFormat Type:=xlTypePDF, Filename:=PDF_NAME, Quality:=xlQualityStandard, _
    22. IncludeDocProperties:=True, IgnorePrintAreas:=False, OpenAfterPublish:=True
    23. End If
    24. ENDE:
    25. Application.DisplayAlerts = True
    26. 'MsgBox ThisWorkbook.Path & "\2023 Rechnungen"
    27. End Sub


    Modul2:

    Visual Basic-Quellcode

    1. ​Public Function IsValidFileName(ByVal strFilename As String) As Boolean
    2. ' Überprüfen, ob angegebene Datei existiert
    3. If strFilename = vbNullString Then
    4. IsValidFileName = False
    5. Else
    6. IsValidFileName = (Dir$(strFilename, vbHidden + vbReadOnly + vbSystem + vbArchive) <> vbNullString)
    7. End If
    8. End Function



    Ich danke euch für die Hilfe :)

    LG
    Carsten
    Hallo

    Ich speichere auch Dateinamen mit Adressen ab. Ich verwende dazu eine Funktion, welche die nicht erlaubten Zeichen aus dem String entfernt. Vielleicht wäre das auch etwas für Dich.

    Visual Basic-Quellcode

    1. Public Function TXT_Bereinigen(BR_Text)
    2. Dim neuer_BR_Text
    3. Dim Verboten
    4. Dim n
    5. Verboten = "\/:*?""<>|]*" & Chr(10) & Chr(13)
    6. If IsNull(BR_Text) Then
    7. TXT_Bereinigen = " "
    8. Exit Function
    9. End If
    10. neuer_BR_Text = BR_Text
    11. For n = 1 To Len(Verboten)
    12. neuer_BR_Text = Replace(neuer_BR_Text, Mid(Verboten, n, 1), "")
    13. 'Debug.Print BR_Text
    14. 'Debug.Print neuer_BR_Text
    15. Next
    16. TXT_Bereinigen = neuer_BR_Text
    17. End Function


    Der Aufruf würde ich wie folgt machen:

    Visual Basic-Quellcode

    1. Sub Rechnung_speichern()
    2. 'Druckbereich ist bereits festgelegt
    3. Dim PDF_NAME As String
    4. Dim objFSO As Object
    5. Set objFSO = CreateObject("Scripting.FileSystemObject")
    6. On Error GoTo ENDE:
    7. Application.DisplayAlerts = True
    8. PDF_NAME = ThisWorkbook.Path & "\2023 Rechnungen\" & TXT_Bereinigen(Range("AO1").Value) & ".pdf"
    9. If objFSO.FileExists(PDF_NAME) Then
    10. If MsgBox("Datei existiert, möchten Sie diese überschreiben?", vbOKCancel) = vbCancel Then
    11. MsgBox ("Datei wurde nicht gespeichert, bitte Wert in Feld A01 ändern")
    12. Exit Sub
    13. End If
    14. End If
    15. ActiveSheet.ExportAsFixedFormat Type:=xlTypePDF, Filename:=PDF_NAME, Quality:=xlQualityStandard, _
    16. IncludeDocProperties:=True, IgnorePrintAreas:=False, OpenAfterPublish:=True
    17. Exit Sub
    18. ENDE:
    19. Application.DisplayAlerts = True
    20. MsgBox ("Fehler, bitte überprüfen Sie den Dateinamen im Feld A01")
    21. End Sub

    Dieser Beitrag wurde bereits 3 mal editiert, zuletzt von „Panter“ ()

    @Casi Du solltest die Funktion von der Verlinkung aus Post #2 nehmen (azlihassan.com/apps/articles/v…s-a-valid-legal-file-name), nicht meine Funktion einfach umbenennen (die hat doch einen ganz anderen Zweck). Also die hier:

    Spoiler anzeigen

    Visual Basic-Quellcode

    1. Public Function IsValidFileName(sFileName As String) As Variant
    2. '************************************************************************
    3. 'Written by Azli Hassan
    4. 'http://azlihassan.com.apps
    5. '
    6. 'Function: To determine if a string is a valid file or folder name
    7. '************************************************************************
    8. Dim aReservedChars As Variant, aReservedNames As Variant
    9. Dim i As Long, lngPeriodPos As Long
    10. On Error GoTo ErrHandler
    11. 'Naming Files, Paths, and Namespaces
    12. 'https://msdn.microsoft.com/en-us/library/windows/desktop/aa365247(v=vs.85).aspx
    13. 'Note that a directory is simply a file with a special attribute designating it as a directory,
    14. 'but otherwise must follow all the same naming rules as a regular file.
    15. 'Because the term directory simply refers to a special type of file as far as the file system is concerned,
    16. 'some reference material will use the general term file to encompass both concepts of directories and data files as such.
    17. 'Array of reserved characters/filenames
    18. aReservedChars = Array("< ", ">", ":", """", "/", "\", "|", "*", "?")
    19. 'Array of reserved file names
    20. aReservedNames = Array("CON", "PRN", "AUX", "NUL", _
    21. "COM1", "COM2", "COM3", "COM4", _
    22. "COM5", "COM6", "COM7", "COM8", _
    23. "COM9", "LPT1", "LPT2", "LPT3", _
    24. "LPT4", "LPT5", "LPT6", "LPT7", _
    25. "LPT8", "LPT9")
    26. 'Check sFilename is not error value (Shouldn't be able to pass an error)
    27. If IsError(sFileName) Then
    28. IsValidFileName = False
    29. Exit Function
    30. End If
    31. 'Check that something was passed, and not error
    32. If IsMissing(sFileName) Or sFileName = "" Then
    33. IsValidFileName = False
    34. Exit Function
    35. End If
    36. 'Set initial result to True
    37. IsValidFileName = True
    38. 'Check for RESERVED characters
    39. For i = LBound(aReservedChars) To UBound(aReservedChars)
    40. If InStr(1, sFileName, aReservedChars(i)) > 0 Then
    41. IsValidFileName = False
    42. Exit Function
    43. End If
    44. Next i
    45. 'Check for ILLEGAL characters
    46. 'Integer value zero, sometimes referred to as the ASCII NUL character.
    47. 'vbNullChar / Chr(0) / Character having a value of 0.
    48. 'Characters whose integer representations are in the range from 1 through 31
    49. For i = 0 To 31
    50. If InStr(1, sFileName, Asc(i)) > 0 Then
    51. IsValidFileName = False
    52. Exit Function
    53. End If
    54. Next i
    55. 'Check for RESERVED file names
    56. lngPeriodPos = InStrRev(sFileName, ".")
    57. 'If no ".", then use length so that Left(sFileName, ..) won't fail
    58. If lngPeriodPos = 0 Then lngPeriodPos = Len(sFileName)
    59. 'Use upper case for string comparison to be case-insensitive
    60. sFileName = UCase(sFileName)
    61. For i = LBound(aReservedNames) To UBound(aReservedNames)
    62. 'Do not assume case sensitivity. For example, consider the names OSCAR, Oscar, and oscar to be the same,
    63. 'even though some file systems (such as a POSIX-compliant file system) may consider them as different.
    64. 'ALSO avoid these names followed immediately by an extension; for example, NUL.txt is not recommended.
    65. If sFileName = UCase(aReservedNames(i)) Or Left(sFileName, lngPeriodPos - 1) = UCase(aReservedNames(i)) Then
    66. IsValidFileName = False
    67. Exit Function
    68. End If
    69. Next i
    70. Exit Function
    71. ErrHandler:
    72. 'On error, set result to error
    73. IsValidFileName = CVErr(Err.Number)
    74. Exit Function
    75. End Function

    Darüber hinaus ist das ActiveSheet ' [...] in Zeile 18 natürlich durch deinen Code zu ersetzen. Ich wollte nur nicht deine Zeilen nochmal wiederholen, daher das [...]. Es muss lauten:

    Visual Basic-Quellcode

    1. If IsValidFileName(PDF_NAME) Then
    2. PDF_NAME = sPath & PDF_NAME
    3. ActiveSheet.ExportAsFixedFormat Type:=xlTypePDF, Filename:=PDF_NAME, Quality:=xlQualityStandard, _
    4. IncludeDocProperties:=True, IgnorePrintAreas:=False, OpenAfterPublish:=True
    5. Else
    6. MsgBox "Der Dateiname ist ungültig."
    7. End If
    Besucht auch mein anderes Forum:
    Das Amateurfilm-Forum
    Hallo Panter, hallo Marcus Gräfe,

    @Marcus Gräfe
    Erst mal ein Danke für die Mühe.
    Wie ich geschrieben habe, ich bin totaler Anfänger. :) Das du da einen Platzhalter [...] geschrieben hast, kann ich leider nicht erkennen. Sorry ;( :)

    @Panter
    auch dir erst mal ein herzlichen Dank. Genau so brauche ich das. Echt klasse. :)

    Kann ich in Zeile 12

    If MsgBox("Datei existiert, möchten Sie diese überschreiben?", vbOKCancel) = vbCancel Then

    in den Text, einen Zelleninhalt (Rechnungsnummer) anzeigen lassen?

    Die Rechnung 011/23 existiert bereits.
    Möchten Sie Diese überschreiben?
    Rechnungsnummer befindet sich in Zelle U23.

    --------------------------------------------------------------------------------------------------------------------

    Vielleicht kannst du mir mit dem 2. Problem auch helfen

    Mein 2. Problem:
    Beispiel-pdf:

    011-23 Max Mustermann, Musterstraße 8, 55555 Musterstadt 20.04.2023.pdf

    Pfad:
    Pfad:sPath = ThisWorkbook.Path & "\Rechnungen 2023"

    In dem Übersichtsregister (Excel) möchte ich durch Eingabe von einem Teil des Dateinamens, die pdf öffnen. Eingabe in Textfeld oder Zelle.

    Im Regelfall soll die Rechnungsnummer als Teil-Name der pdf als Suchbegriff eingegeben werden. Genauso gut kann Name oder Datum eigegeben werden.

    Mögliche Eingabe:
    011-23

    Mit dieser Eingabe, sollte die
    011-23 Max Mustermann, Musterstraße 8, 55555 Musterstadt 20.04.2023.pdf
    geöffnet werden.

    Das Problem hier:
    Max Mustermann kommt evtl. oft vor, ebenso kann die Rechnungsnummer sich mit einer Adresse oder einer anderen Eingabe überschneiden.
    Keine Ahnung wie so eine Fehlermeldung aussehen kann oder soll.
    Eventuell werden mir dann, nach Eingabe von "Musterstadt", ALLE Rechnungen aus Musterstadt angezeigt.

    Ob ich die Eingabe in einer Zelle oder im Eingabefeld mache, ist egal.

    Danke an das Forum und den Experten hier.
    Dass es noch Menschen gibt, die solchen Anfängern wie mir helfen, ist nicht selbstverständlich.
    Danke, danke.... :)

    LG

    Carsten
    Versiche es zu Problem 1 mal so:

    VB.NET-Quellcode

    1. ]If objFSO.FileExists(PDF_NAME) Then
    2. If MsgBox("Die Rechnung " & PDF_NAME & " existiert bereits." & vbNewLine & "Möchten Sie Diese überschreiben?", vbOKCancel) = vbCancel Then
    3. MsgBox ("Datei wurde nicht gespeichert, bitte Wert in Feld AO1 ändern")
    4. Range("AO1").SetFocus
    5. Exit Sub
    6. End If
    7. End If


    Ich gehe davon aus das Du die Zelle AO1 und nicht A 0 (Null) 1 meinst.
    NB. Es ist doch schön, wenn man lesbare Namen vergibt. Siehe auch [VB.NET] Beispiele für guten und schlechten Code (Stil).
    Nochmal ein Hallo an Alle,

    Das erste Problem habe ich tatsächlich selbst hin bekommen. 8o

    If MsgBox("Die Rechnung " & (Range("U23").Value) & " existiert bereits." & Chr(10) & "Möchten Sie Diese überschreiben?", vbOKCancel) = vbCancel Then

    Hätte ich nicht gedacht...

    Das 2. Problem bekomme ich nicht hin.

    LG

    Carsten

    @INOPIAE
    Natürlich O wie Otto, nicht 0 wie 007. :)
    Was genau soll
    Range("AO1").SetFocus
    bewirken?


    Wenn ich das einbaue, bekommen ich die 3. Fehlermeldung:
    Fehler, bitte überprüfen Sie den Dateinamen im Feld A01

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von „Casi“ ()

    Mein Fehler: Es muss so Lauten:

    Visual Basic-Quellcode

    1. Range("AO1").Activate


    Damit wird die Zelle AO1 direkt ausgewählt, so dass der Nutzer diese direkt anpassen kann.

    Bitte unterschiede immer sauber zwischen O und 0.

    Zu Deinem zweiten Problem:

    Wie würdest Du das ganze den als normaler Nutzer machen (ohne Programmierung).
    Wenn Du die Schritte kennst, kannst Du diese dann mal mit einem Makro aufzeichnen und Dir dann anschauen.
    Anschließend wird der Code dann noch angepasst.

    Mir schwebt evtl. ein Filter vor.
    NB. Es ist doch schön, wenn man lesbare Namen vergibt. Siehe auch [VB.NET] Beispiele für guten und schlechten Code (Stil).

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „INOPIAE“ ()

    @INOPIAE
    Mit Makro aufzeichnen funktioniert nicht. Explorer öffnen und pdf öffnen wird nicht mit aufgezeichnet.

    Aber hier nochmal meine Frage an Alle:

    Beispiel-pdf:
    011-23 Max Mustermann, Musterstraße 8, 55555 Musterstadt 20.04.2023.pdf

    Pfad:
    Pfad:sPath = ThisWorkbook.Path & "\Rechnungen 2023"

    In dem Übersichtsregister (Excel) möchte ich durch Eingabe von einem Teil des Dateinamens, die pdf öffnen. Eingabe in Textfeld oder Zelle (Beispiel Zelle BC1).

    Im Regelfall soll die Rechnungsnummer als Teil-Name der pdf als Suchbegriff eingegeben werden. Genauso gut kann Name oder Datum eigegeben werden.

    Mögliche Eingabe:
    011-23

    Mit dieser Eingabe, sollte die
    011-23 Max Mustermann, Musterstraße 8, 55555 Musterstadt 20.04.2023.pdf
    geöffnet werden.

    Das Problem hier:
    Max Mustermann kommt evtl. oft vor, ebenso kann die Rechnungsnummer sich mit einer Adresse oder einer anderen Eingabe überschneiden.
    Keine Ahnung wie so eine Fehlermeldung aussehen kann oder soll.

    Mögliche und vielleicht sinnvolle Lösung:
    Nach Eingabe von "Musterstadt", werden ALLE Rechnungen aus Musterstadt angezeigt.

    Ob ich die Eingabe in einer Zelle oder im Eingabefeld mache, ist egal.

    Danke an das Forum und den Experten hier.

    Dass es noch Menschen gibt, die solchen Anfängern wie mir helfen, ist nicht selbstverständlich.

    Danke, danke....

    LG

    Carsten
    Hallo Carsten

    Reicht Dir der Autofilter nicht? (Start . Sortieren und Filtern - Filter)

    Die Tabelle hätte das Feld Suchbegriff, und Link - hier einfach einen Link zur Datei einfügen.

    Falls dir der Autofilter nicht reicht, könntest Du die Filterkriterien per Makro einfügen:

    In meinem Beispiel würde die Tabelle erst ab Zeile 5 anfangen, auf A2 könnte man das Filterkriterium eintragen.

    Dieser könntest du auch mit einem Makro ansprechen:

    Visual Basic-Quellcode

    1. Private Sub Worksheet_Change(ByVal Target As Range)
    2. If Target.Cells.Address = "$A$2" Then
    3. ActiveSheet.Range("$A$5:$B100").AutoFilter Field:=1, Criteria1:="*" & Target.Cells.Value & "*"
    4. End If
    5. End Sub


    Du müsstest Dir dann noch überlegen, wie du die Tabelle pflegst. Evtl. könntest du die Tabelle mir DIR über eine Schlaufe einlesen.. --> Button welches ein Makro startet mit der Beschriftung neu einlesen.

    LG Panter
    Das Öffnen der PDF-Datei kannst Du mit diesem Code realisieren:

    Visual Basic-Quellcode

    1. ActiveWorkbook.FollowHyperlink Address:= sPfad


    Mit dem Makro Aufzeichen meinte ich eigentlich den Teil der Suche.

    Denke mal über einen Filter für die Übersichtstabelle nach.
    NB. Es ist doch schön, wenn man lesbare Namen vergibt. Siehe auch [VB.NET] Beispiele für guten und schlechten Code (Stil).