VBA: Aufruf eines Makros aus einem anderen Makro führt zu Fehler 400
#1
Hallo,

ich verwende in einem Excel-Sheet "Archiv" eine Intelligente Tabelle und mehrere Makros um
a) den Inhalt der Intelligenten Tabelle aus einer anderen Excel-Datei zu aktualisieren
b) Verknüpfungen auf PDF-Dateien in einem bestimmten Verzeichnis zu erzeugen
c) Die Daten in der intelligenten Tabelle nach Datum und Uhrzeit zu sortieren

Alle verwendeten Makros liegen im gleichen Modul.

Über drei Buttons im Excel-Sheet "Archiv" starte ich jeweils eines der drei Makros, welche dann
fehlerfrei abgearbeitet werden und das erwartete Ergebnis bringen.
Bis hierher alles in Ordnung.

Nun möchte ich aus dem Makro "Aktualisieren" (über den Button "Aktualisieren" gestartet) zusätzlich die beiden anderen Makros "Links erzeugen" und "Sortieren" aufrufen,
damit bei einem Klick auf den Button "Aktualisieren" alle drei Makros abgearbeitet werden.

"Aktualisieren" und "Links erzeugen" werden fehlerfrei abgearbeitet, jedoch tritt im dritten Makro "Sortieren" ("Aktualisieren" ruft "Links erzeugen" auf, danach das Makro "Sortieren") 
die Fehlermeldung "400" auf.

Wenn ich im Debugger die gleiche Makroabfolge beginnend mit "Aktualisieren" durchsteppe, tritt der Fehler nicht auf.
Nachfolgend die Makros um die es geht.

Hat jemand eine Erklärung dafür und vielleicht einen Tipp, wie ich dieses Problem lösen kann?



Code:
Sub Aktualisieren8()
'
' Aktualisieren Makro - Zelle innerhalb der intelligenten Tabelle selektieren
    Worksheets("Archiv").Range("C5").Select
    Selection.ListObject.QueryTable.Refresh BackgroundQuery:=False
    '
    Call SetLinks_and_Sort

    ' Alternativ einzelne Aufrufe der Makros führen zu dem gleichen Problem wie bei Call SetLinks_and_Sort
    ' Call LinksSetzen
    ' Call Sortierung_Datum_und_Zeit
    '
End Sub

Sub SetLinks_and_Sort()
    ' Sheets("Archiv").Select
    Call LinksSetzen
    Call Sortierung_Datum_Zeit
End Sub

Sub LinksSetzen()
' Dateilinks wieder herstellen.
    Dim AnzPDF As Integer
    Dim aktZeile As Integer
    Dim StartZeile As Integer
    Dim LetzteZeile As Integer
    Dim PfadKomplett As String
   
    AnzPDF = Worksheets("Archiv").Range("$H$1").Value
    StartZeile = 5
    LetzteZeile = StartZeile + AnzPDF - 1
   
    ' Schleife über alle Datensätze, um die Dateilinks zu aktualisieren
    For aktZeile = StartZeile To LetzteZeile
        ' Link zum PDF-Dokument einfügen
        PfadKomplett = Worksheets("Archiv").Range("$J" & aktZeile).Value
        Sheets("Archiv").Range("$I" & aktZeile).Select
        ActiveSheet.Hyperlinks.Add Anchor:=Selection, Address:=PfadKomplett, TextToDisplay:="[PDF]"
    Next aktZeile
End Sub

Sub Sortierung_Datum_Zeit()
'
' Sortierung über zwei Spalten Zeit, Datum
' Sortierung absteigend (jüngste Einträge oben)
    ActiveWorkbook.Worksheets("Archiv").ListObjects("Archiv_Zeile").Sort.SortFields _
        .Clear

'   Diese Meldung wird direkt vor Auftreten des Fehlers angezeigt.
    MsgBox ("Sortierung Zeit")
' Fehlermeldung '400' bei Ausführung des folgenden Kommandos.
'       Archiv_Zeile ist ein benannter Bereich, welcher die erste Datenzeile der intelligenten Tabelle umfasst
'       Zeit und Datum sind zwei Spaltenköpfe der intelligenten Tabelle
    ActiveWorkbook.Worksheets("Archiv").ListObjects("Archiv_Zeile").Sort.SortFields _
        .Add Key:=Range("Archiv_Zeile[[#All],[Zeit]]"), SortOn:=xlSortOnValues, _
        Order:=xlDescending, DataOption:=xlSortNormal
    With ActiveWorkbook.Worksheets("Archiv").ListObjects("Archiv_Zeile").Sort
        .Header = xlYes
        .MatchCase = False
        .Orientation = xlTopToBottom
        .SortMethod = xlPinYin
        .Apply
    End With
   
'   Diese Meldung wird nicht mehr angezeigt
    MsgBox ("Sortierung Datum")

    ActiveWorkbook.Worksheets("Archiv").ListObjects("Archiv_Zeile").Sort. _
        SortFields.Clear
       
    ActiveWorkbook.Worksheets("Archiv").ListObjects("Archiv_Zeile").Sort. _
        SortFields.Add Key:=Range("Archiv_Zeile[[#All],[Datum]]"), SortOn:= _
        xlSortOnValues, Order:=xlDescending, DataOption:=xlSortNormal
    With ActiveWorkbook.Worksheets("Archiv").ListObjects("Archiv_Zeile").Sort
        .Header = xlYes
        .MatchCase = False
        .Orientation = xlTopToBottom
        .SortMethod = xlPinYin
        .Apply
    End With
End Sub


Ich verwende MS Office 2016 Professional
in einer VM mit Windows 7 Professional (ohne Zugang ins Internet).

Bitte Bescheid geben, wenn weitere Infos benötigt werden.


Gruß
Rodario
Antworten Top
#2
Hi,

da würde ich mal diese Seite empfehlen:

https://learn.microsoft.com/de-de/office...range.sort
Gruß

Edgar

Meine Antworten sind freiwillig und ohne Gewähr!
Über Rückmeldungen würde ich mich freuen.
Antworten Top
#3
Hallöchen,

sofern es keine Programmierfehler sind - bei unerklärlichen Fehlern hilft zuweilen

- Module exportieren und löschen
- andere Codes sichern
- Datei als xlsx speichern, Excel beenden
- xlsx Datei öffnen
- Module importieren
- andere Codes einfügen
- Datei als xlsm oder xlsb speichern
.      \\\|///      Hoffe, geholfen zu haben.
       ( ô ô )      Grüße, André aus G in T  
  ooO-(_)-Ooo    (Excel 97-2019+365)
Antworten Top
#4
Hallo

schau dir bitte deinen Sortiercode einmal genau an, und nehme ihn ggf. mit dem Makrorecorder auf.
Da fehlt vor dem Befehl  .Header = xlYes - schlicht und einfach die Range Angabe des Sortierbereiches.
Ich weiss nicht ob das alleine der Fehler ist, aber den Bereich musst du bitte schon angeben!!

mfg Gast 123
Antworten Top
#5
Moin,

400er Fehler lassen sich leider nicht sehr gut debuggen, weil sie keinen Hinweis auf den Grund des Fehlers liefern. Wie von schauan vorgeschlagen, würde ich auch einfach von vorn anfangen.
Dass eine Range fehlt, wir vom Gast behauptet, kann ich nicht nachvollziehen. Das Listobject bietet ja eine eigene Sort-Methode 

Viele Grüße 
derHöpp
Antworten Top
#6
Speichere die Makros im Makromodule des Arbeitsblattes 'Archiv'
In M_sort das Spaltenummer in .cells(j,2) evt. anpassen für 'Datum/zeit' Spalte.

Code:
Sub M_Aktuell()
    ThisWorkbook.RefreshAll
End Sub

Sub M_Links_Sort()
    M_Links
    M_Sort
End Sub

Sub M_Links()
    With Sheets("Archiv")
        For j = 5 To 5 + .Cells(1, 8) - 1
            .Hyperlinks.Add .Cells(j, 9), .Cells(j, 10), "[PDF]"
        Next
    End With
End Sub

Sub M_Sort()
  With Sheets("Archiv")
      .ListObjects(1).Range.Sort .Cells(1, 2), 2, , , , , , 1
  End With
End Sub
Zum übersetzen von Excel Formeln:

http://dolf.trieschnigg.nl/excel/index.p...gids=en+de
Antworten Top


Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste