Automatisierungsfehler

Informationen und Beispiele zu den hier genannten Dialog-Elementen:
Frame
Bild

Betrifft: Automatisierungsfehler
von: Markus
Geschrieben am: 04.09.2015 16:07:02

Hallo zusammen,
ich bekomme bei folgendem code einen Automatisierungsfehler.
ich teste unter windows 10 mit Excel 2010.
Ich habe in einem anderen Beitrag hier im Forum gelesen dass es wohl an
Set objAl = CreateObject("System.collections.arraylist") im Zusammenhang mit dem fehlenden Netframework 3.5 liegt.
Kann mir jemand helfen den code umzuschreiben sodass er auch ohne netframework 3.5 läuft.
wäre super!
Grüße Markus

  • 
    Private Sub Datum()
        Dim L As Long
        Dim objAl As Object
        Dim vntOut As Variant
        Dim vntDaten As Variant
        Dim strOneLine As String
        
        On Error GoTo ErrHandler
        
        vntDaten = Workbooks("Daten.xlsx").Sheets("Tabelle1").Range("B2:D7000") 'muss geöffnet sein
        Set objAl = CreateObject("System.collections.arraylist")
            
        With ThisWorkbook.Sheets("Tabelle1") 'Anpassen
            
            For L = LBound(vntDaten) To UBound(vntDaten)
                If vntDaten(L, 1) = .Range("C2") Then
                    If vntDaten(L, 3) = .Range("C7") Then
                        objAl.Add (CDbl(vntDaten(L, 2)))
                    End If
                End If
            Next
            
            With objAl
                .Sort 'sortieren
                vntOut = .toArray
            End With
            .Range("C59:C63").ClearContents
            .Range("C59").Resize(UBound(vntOut) + 1) = WorksheetFunction.Transpose(vntOut)
        End With
    ErrHandler:
       Debug.Print Err.Number, Err.Description, strOneLine
       Resume Next
    End Sub


  • Bild

    Betrifft: AW: Automatisierungsfehler
    von: Nepumuk
    Geschrieben am: 04.09.2015 17:03:41
    Hallo,
    ungetestet, da ich deine Mappen nicht vorliegen habe:

    Option Explicit

    Private Sub Datum()
        
        Dim ialngIndex As Long, ialngCount As Long
        Dim avntOutput As Variant
        Dim avntData As Variant
        Dim vntCompare1 As Variant, vntCompare2 As Variant
        
        On Error GoTo ErrHandler
        
        avntData = Workbooks("Daten.xlsx").Sheets("Tabelle1").Range("B2:D7000").Value 'muss geöffnet sein
        
        With ThisWorkbook.Sheets("Tabelle1") 'Anpassen
            
            vntCompare1 = .Range("C2").Value
            vntCompare2 = .Range("C7").Value
            
            For ialngIndex = LBound(avntData) To UBound(avntData)
                
                If avntData(ialngIndex, 1) = vntCompare1 Then
                    
                    If avntData(ialngIndex, 3) = vntCompare2 Then
                        
                        Redim Preserve avntOutput(0 To ialngCount)
                        avntOutput(ialngCount) = avntData(ialngIndex, 2)
                        ialngCount = ialngCount + 1
                        
                    End If
                End If
            Next
            
            Call QuickSort(LBound(avntOutput), UBound(avntOutput), avntOutput)
            
            .Range("C59:C63").ClearContents
            .Range("C59").Resize(UBound(avntOutput) + 1) = WorksheetFunction.Transpose(avntOutput)
            
        End With
        
        Exit Sub
        
        ErrHandler:
        Debug.Print Err.Number, Err.Description
        Resume Next
    End Sub

    Private Sub QuickSort(ByVal pvlngLbound As Long, ByVal pvlngUbound As Long, ByRef pravntArray As Variant)
        
        Dim ialngIndex1 As Long, ialngIndex2 As Long
        Dim vntTemp As Variant, vntBuffer As Variant
        
        ialngIndex1 = pvlngLbound
        ialngIndex2 = pvlngUbound
        
        vntBuffer = pravntArray((ialngIndex1 + ialngIndex2) \ 2)
        
        Do
            
            Do While pravntArray(ialngIndex1) < vntBuffer
                ialngIndex1 = ialngIndex1 + 1
            Loop
            
            Do While vntBuffer < pravntArray(ialngIndex2)
                ialngIndex2 = ialngIndex2 - 1
            Loop
            
            If ialngIndex1 < ialngIndex2 Then
                
                If pravntArray(ialngIndex1) <> pravntArray(ialngIndex2) Then
                    
                    vntTemp = pravntArray(ialngIndex1)
                    pravntArray(ialngIndex1) = pravntArray(ialngIndex2)
                    pravntArray(ialngIndex2) = vntTemp
                    
                End If
                
                ialngIndex1 = ialngIndex1 + 1
                ialngIndex2 = ialngIndex2 - 1
                
            ElseIf ialngIndex1 = ialngIndex2 Then
                
                ialngIndex1 = ialngIndex1 + 1
                ialngIndex2 = ialngIndex2 - 1
                
            End If
        Loop Until ialngIndex1 > ialngIndex2
        
        If pvlngLbound < ialngIndex2 Then Call QuickSort(pvlngLbound, ialngIndex2, pravntArray)
        If ialngIndex1 < pvlngUbound Then Call QuickSort(ialngIndex1, pvlngUbound, pravntArray)
        
    End Sub

    Gruß
    Nepumuk

    Bild

    Betrifft: AW: Automatisierungsfehler
    von: Markus
    Geschrieben am: 06.09.2015 09:34:57
    Hallo Nepumuk,
    vielen Dank für Deine schnelle Antwort.
    Ich teste heute abend.

    Bild

    Betrifft: AW: Automatisierungsfehler
    von: Markus
    Geschrieben am: 06.09.2015 12:11:21
    Hallo Nepumuk,
    klappt noch nicht ganz.
    Fehler:
    13 Typen unverträglich
    Die relevanten Daten sind Datumsangaben im Format DD.MM.YYYY
    vielleicht liegt es daran?
    Gruß Markus

    Bild

    Betrifft: AW: Automatisierungsfehler
    von: Nepumuk
    Geschrieben am: 06.09.2015 16:38:09
    Hallo,
    in welcher Zeile?
    Gruß
    Nepumuk

    Bild

    Betrifft: AW: Automatisierungsfehler
    von: Markus
    Geschrieben am: 06.09.2015 17:03:34
    Hallo Nepumuk,
    also C59:C63 soll ja mit den Übereinstimmungen aus C2 und C7 befüllt werden. Dein code läuft durch auch ohne den Error handler - es werden nur keine Daten in c59:C63 eingetragen.
    In der Quelldatei (daten.xlsx) sind in Spalte B Zahlen und in D stehen Daten (DD.MM.JJJJ).
    Grüße

    Bild

    Betrifft: AW: Automatisierungsfehler
    von: Nepumuk
    Geschrieben am: 06.09.2015 17:20:23
    Hallo,
    ja was jetzt? Kannst du eine Mustermappe hochladen?
    Gruß
    Nepumuk

    Bild

    Betrifft: AW: Automatisierungsfehler
    von: Markus
    Geschrieben am: 06.09.2015 17:46:14
    Hallo,
    Hochladen ist wohl das Beste.
    Danke.
    https://www.herber.de/bbs/user/100046.xlsm
    https://www.herber.de/bbs/user/100047.xlsx

    Bild

    Betrifft: AW: Automatisierungsfehler
    von: Markus
    Geschrieben am: 06.09.2015 17:59:26
    hier die korrigierte
    da war im workbook open noch was drin.
    https://www.herber.de/bbs/user/100048.xlsm

    Bild

    Betrifft: AW: Automatisierungsfehler
    von: Markus
    Geschrieben am: 06.09.2015 18:11:15
    Hallo Nepumuk,
    nachträgliches editieren geht ja nicht.
    Kannst Du den link (https://www.herber.de/bbs/user/100046.xlsm) entfernen.
    berichtigte Datei habe ich hochgeladen.

    Bild

    Betrifft: AW: Automatisierungsfehler
    von: Nepumuk
    Geschrieben am: 06.09.2015 19:29:29
    Hallo,
    ändere mal diese Zeile:
    Dim avntOutput As Variant
    so:
    Dim avntOutput() As Variant
    Gruß
    Nepumuk

    Bild

    Betrifft: AW: Automatisierungsfehler
    von: Markus
    Geschrieben am: 06.09.2015 19:33:18
    Hallo Nepumuk,
    so gehts! Vielen lieben Dank.
    Grüße

    Bild

    Betrifft: AW: Automatisierungsfehler
    von: markus
    Geschrieben am: 06.09.2015 19:56:11
    ...aber nur auf den ersten Blick.
    wenn ich die Werte mit =ISTZAHL(C59) prüfe, dann kommt falsch.
    Ich benötige aber ein richtiges Datum. Die Zell ist mit "Datum" formatiert.
    gibts hierfür noch eine Lösung?
    Danke.

    Bild

    Betrifft: AW: Automatisierungsfehler
    von: Nepumuk
    Geschrieben am: 07.09.2015 11:26:54
    Hallo,
    eigenartig, denn im Array befinden sich eindeutig Datumswerte.
    Ändere diese Zeile:
    avntOutput(ialngCount) = avntData(ialngIndex, 2)
    so:
    avntOutput(ialngCount) = CLng(avntData(ialngIndex, 2))
    Gruß
    Nepumuk

    Bild

    Betrifft: AW: Automatisierungsfehler
    von: Markus
    Geschrieben am: 07.09.2015 21:20:58
    Hallo Nepumuk,
    jetzt gehts und es sind eindeutig datumswerte.
    Vielen Dank.

     Bild

    Beiträge aus den Excel-Beispielen zum Thema "Zeilen mit verschiedenen Probennamen kopieren"