Microsoft Excel

Herbers Excel/VBA-Archiv

Laufzeitfehler 438


Betrifft: Laufzeitfehler 438 von: Marcus
Geschrieben am: 27.09.2019 11:59:50

Hallo zusammen,

Folgende Fehlermeldung kommt - Objekt unterstützt diese Eigenschaft oder MEthode nicht

markiert wurde diese Zeile:

ActiveWorkbook.Worksheets("Vortag").Sort.SortFields.Add2 Key:=Range( _
"K193:K300"), SortOn:=xlSortOnValues, Order:=xlDescending, DataOption:= _
xlSortNormal

obwohl ich diese Abfrage bei meheren Sheets benutze funktioniert sie hier auf einmal nicht

an was könnte das liegen? hat das auch mit der Umstellung von 32 auf 64Bit System zu tun?

Danke im voraus
Marcus

  

Betrifft: AW: Laufzeitfehler 438 von: Daniel
Geschrieben am: 27.09.2019 12:24:45

Hi
es ist eigentlich logisch, dass der Zellbereich, welcher die Reihenfolge der Sortierung festlegen soll, ein Teil des zu sortierenden Bereichs sein muss.
dh der Zellbereich, den du bei KEY angibst, muss auf dem gleichen Tabellenblatt liegen, wie das Blatt auf dem du sortieren willst.

wenn du jetzt bei Key nur die Range angibst, ohne ein Tabellenblatt davor, dann wird hier automatisch immer das gerade aktive Tabllelenblatt eingesetzt.
Es kommt dann zu dem Fehler, wenn dies ein anderes Blatt ist, als das was du sortieren willst ("Vortag")
sollte zufällig "Vortag" das aktive Blatt sein, dann passt es und der Code funktioniert.
ist ein anderes Blatt aktiv, kommt der Fehler.

die Abhilfe ist hier, auch Key das Tabellenblatt mit anzugeben (und in allen anderen Fällen, wo du Range oder Cells ohne Tabellenblattangabe hast).

ActiveWorkbook.Worksheets("Vortag").Sort.SortFields.Add2 Key:=ActiveWorkbook.Worksheets("Vortag").Range("K193:K300"), SortOn:=xlSortOnValues, Order:=xlDescending, DataOption:=xlSortNormal

Gruß Daniel


  

Betrifft: AW: Laufzeitfehler 438 von: Marcus
Geschrieben am: 27.09.2019 13:54:45

Hi Daniel,

danke für die schnelle Hilfe und die guite Erklärung,

leider funktioniert der Code nicht, leider.

Zuhause läuft das Teil in der Arbeit nicht.

Zuhause Excel 2016 32bit
Arbeit Excel 2016 64bit

das ist der einzigeste Unterschied, hier mal das kpl. Makro (wie gesagt zuhaus eläuft es

Sub vortagdiagramm4()
'
' vortagdiagramm Makro
'

'
    Sheets("Vortag").Select
    ActiveWindow.SmallScroll Down:=-39
    Sheets("Vortag").Select
    ActiveWindow.SmallScroll Down:=-189
    Range("J1:DM2").Select
    Application.CutCopyMode = False
    Selection.Copy
    Range("J9").Select
    ActiveWindow.SmallScroll Down:=177
    Range("J189").Select
    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False
    Application.CutCopyMode = False
    Selection.Copy
    ActiveWindow.SmallScroll Down:=-21
    Range("J193").Select
    Selection.PasteSpecial Paste:=xlPasteAll, Operation:=xlNone, SkipBlanks:= _
        False, Transpose:=True
    Application.CutCopyMode = False
    ActiveWorkbook.Worksheets("Vortag").Sort.SortFields.Clear
'    ActiveWorkbook.Worksheets("Vortag").Sort.SortFields.Add2 Key:=Range( _
'        "K193:K300"), SortOn:=xlSortOnValues, Order:=xlDescending, DataOption:= _
'        xlSortNormal
        
    ActiveWorkbook.Worksheets("Vortag").Sort.SortFields.Add2 Key:=ActiveWorkbook.Worksheets(" _
Vortag").Range("K193:K300"), SortOn:=xlSortOnValues, Order:=xlDescending, DataOption:=xlSortNormal
        
        
        
        
        
    With ActiveWorkbook.Worksheets("Vortag").Sort
        .SetRange Range("J193:K300")
        .Header = xlGuess
        .MatchCase = False
        .Orientation = xlTopToBottom
        .SortMethod = xlPinYin
        .Apply
    End With
    ActiveWindow.SmallScroll Down:=-207
    Range("I5").Select
End Sub



  

Betrifft: AW: Laufzeitfehler 438 von: Daniel
Geschrieben am: 27.09.2019 14:18:31

hi
du musst das Worksheet bei JEDEM "Range" angeben.
jedes "Range" ohne Tabellenblattangabe davor bezieht sich immer auf das aktive Blatt.
du hast deinen Code noch nicht vollständig überarbeitet.
Gruß Daniel


  

Betrifft: AW: Laufzeitfehler 438 von: Marcus
Geschrieben am: 27.09.2019 14:55:01

Hi Daniel,

danke für die schnelle Hilfe und die guite Erklärung,

leider funktioniert der Code nicht, leider.

Zuhause läuft das Teil in der Arbeit nicht.

Zuhause Excel 2016 32bit
Arbeit Excel 2016 64bit

das ist der einzigeste Unterschied, hier mal das kpl. Makro (wie gesagt zuhaus eläuft es

Sub vortagdiagramm4()
'
' vortagdiagramm Makro
'

'
    Sheets("Vortag").Select
    ActiveWindow.SmallScroll Down:=-39
    Sheets("Vortag").Select
    ActiveWindow.SmallScroll Down:=-189
    Range("J1:DM2").Select
    Application.CutCopyMode = False
    Selection.Copy
    Range("J9").Select
    ActiveWindow.SmallScroll Down:=177
    Range("J189").Select
    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False
    Application.CutCopyMode = False
    Selection.Copy
    ActiveWindow.SmallScroll Down:=-21
    Range("J193").Select
    Selection.PasteSpecial Paste:=xlPasteAll, Operation:=xlNone, SkipBlanks:= _
        False, Transpose:=True
    Application.CutCopyMode = False
    ActiveWorkbook.Worksheets("Vortag").Sort.SortFields.Clear
'    ActiveWorkbook.Worksheets("Vortag").Sort.SortFields.Add2 Key:=Range( _
'        "K193:K300"), SortOn:=xlSortOnValues, Order:=xlDescending, DataOption:= _
'        xlSortNormal
        
    ActiveWorkbook.Worksheets("Vortag").Sort.SortFields.Add2 Key:=ActiveWorkbook.Worksheets(" _
Vortag").Range("K193:K300"), SortOn:=xlSortOnValues, Order:=xlDescending, DataOption:=xlSortNormal
        
        
        
        
        
    With ActiveWorkbook.Worksheets("Vortag").Sort
        .SetRange Range("J193:K300")
        .Header = xlGuess
        .MatchCase = False
        .Orientation = xlTopToBottom
        .SortMethod = xlPinYin
        .Apply
    End With
    ActiveWindow.SmallScroll Down:=-207
    Range("I5").Select
End Sub



  

Betrifft: AW: Laufzeitfehler 438 von: Piet
Geschrieben am: 27.09.2019 17:22:19

Hallo marcus

ich habe den Code aus Neugier getestet und hatte auch einen Laufzeitfehler in Excel 2007.
Bitte aendere mal diesen Teil, und zwar OHNE ADD2, - nur ADD! - Danach lief er bei mir!
Ich habe den Code mal ein bisschen bereinigt. Auf Range.Select kann man fast immer verzichten.

mfg Piet

Sub vortagdiagramm4()
'
' vortagdiagramm Makro
    Sheets("Vortag").Select
    Range("J1:DM2").Copy
    Range("J189").PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, _
        SkipBlanks:=False, Transpose:=False
    Range("J193").PasteSpecial Paste:=xlPasteAll, Operation:=xlNone, _
        SkipBlanks:=False, Transpose:=True
    Application.CutCopyMode = False
    With ActiveWorkbook.Worksheets("Vortag").Sort
         .SortFields.Clear
         .SortFields.Add Key:=Range("K193:K300"), SortOn:= _
          xlSortOnValues, Order:=xlDescending, DataOption:=xlSortNormal
    End With
    With ActiveWorkbook.Worksheets("Vortag").Sort
        .SetRange Range("J193:K300")
        .Header = xlGuess
        .MatchCase = False
        .Orientation = xlTopToBottom
        .SortMethod = xlPinYin
        .Apply
    End With
    Range("I5").Select
End Sub



Beiträge aus dem Excel-Forum zum Thema "Laufzeitfehler 438"