Microsoft Excel

Herbers Excel/VBA-Archiv

Fehler 438 bei Range.Copy

Betrifft: Fehler 438 bei Range.Copy von: Lara
Geschrieben am: 02.10.2020 15:09:12

Hallo Zusammen,

mein nachstehendes Makro läuft bei
"wb2.Range(Cells(5, ColumnIndex2), Cells(44, ColumnIndex2)).Copy" immer auf den Fehler 438: Objekt unterstützt diese Eigenschaft oder Methode nicht.

Die Microsoft-Hilfe verstehe ich an der Stelle nicht.

Sieht einer von euch vielleicht, warum es nicht klappt?

Vielen Dank,
Lara

Sub DatenImportieren1()

Dim wb As Workbook
Dim wb2 As Workbook
Dim Name
Dim Path
Dim FileFound
Dim ColumnIndex2 As Integer
Dim Range

Set wb = ActiveWorkbook

Name = wb.Worksheets("Konsolidierung").Range("V6")
Path = wb.Worksheets("Steuerung").Range("C11")

FileFound = Dir(Path & "\" & "*" & Name & "*.xlsx")
    If FileFound <> "" Then
       Workbooks.Open Path & "\" & FileFound
       
       Set wb2 = ActiveWorkbook
        
       For Each Range In ActiveSheet.Columns("D:R")                                       'Prü _
ft ob die Spalte dem Reportmonat entspricht. Wenn ja, dann wird FoundColumn als wahr definiert
            If Range.Cells(4).Value = Cells(1, 2) Then
                ColumnIndex2 = Range.Column
                
                wb2.Range(Cells(5, ColumnIndex2), Cells(44, ColumnIndex2)).Copy
                                
                '[hier soll es danach weiter gehen...]
                              
              
            End If
       
       Next
       
    End If


End Sub

Betrifft: AW: Fehler 438 bei Range.Copy
von: Daniel
Geschrieben am: 02.10.2020 15:23:26

Hi

Nenne die Variable Range mal anders.
Range ist ja auch eine VBA-Funktion und es kann durchaus sein, dass der Interpreter hier anstelle der VBA-Funktion deine Variable annimmt und das passt ja nicht.

Weiterhin solltest du beachten, dass sich Range und Cells ohne Tabellenblattangabe davor immer auf das aktive Tabellenblatt beziehen, das gilt auch für die Cella innerhalb von Range.
Wenn die Zellen, die die Range definieren sollen au einem anderen Blatt liegen als die Range, kommt es zu einem Fehler.

Ich würde hier den Zellbereich zum kopieren so ansprechen:

wb2.Cells(5, ColumnIndex2).Resize(40, 1).Copy

Gruß Daniel

Betrifft: AW: Fehler 438 bei Range.Copy
von: Gerd L
Geschrieben am: 02.10.2020 15:30:49

Moin,

ungetestet in etwa so:
Sub DatenImportieren2()
 
 Dim wb As Workbook
 Dim wb2 As Workbook
 Dim Name
 Dim Path
 Dim FileFound
 Dim ColumnIndex2 As Long
 Dim objRange As Range
 
 Set wb = ActiveWorkbook
 
 Name = wb.Worksheets("Konsolidierung").Range("V6")
 Path = wb.Worksheets("Steuerung").Range("C11")
 
 FileFound = Dir(Path & "\" & "*" & Name & "*.xlsx")
     If FileFound <> "" Then
        Workbooks.Open Path & "\" & FileFound
        
        Set wb2 = ActiveWorkbook
         
        For Each objRange In ActiveSheet.Columns("D:R")                                       ' _
Prü _
 ft ob die Spalte dem Reportmonat entspricht. Wenn ja, dann wird FoundColumn als wahr definiert
             If objRange.Cells(4).Value = Cells(1, 2) Then
                 ColumnIndex2 = objRange.Column
                 
                 wb2.Range(wb2.Range.Cells(5, ColumnIndex2), wb2.Range.Cells(44, ColumnIndex2)). _
Copy
                                 
                 '[hier soll es danach weiter gehen...]
                               
               
             End If
        
        Next
        
     End If
 
 
 End Sub


Gruß Gerd

Betrifft: AW: Es war 2 x .Range zuuviel
von: Gerd L
Geschrieben am: 02.10.2020 15:36:17

Sub DatenImportieren2()
 
 Dim wb As Workbook
 Dim wb2 As Workbook
 Dim Name
 Dim Path
 Dim FileFound
 Dim ColumnIndex2 As Long
 Dim objRange As Range
 
 Set wb = ActiveWorkbook
 
 Name = wb.Worksheets("Konsolidierung").Range("V6")
 Path = wb.Worksheets("Steuerung").Range("C11")
 
 FileFound = Dir(Path & "\" & "*" & Name & "*.xlsx")
     If FileFound <> "" Then
        Workbooks.Open Path & "\" & FileFound
        
        Set wb2 = ActiveWorkbook
         
        For Each objRange In ActiveSheet.Columns("D:R")                                       '  _
_
Prü _
 ft ob die Spalte dem Reportmonat entspricht. Wenn ja, dann wird FoundColumn als wahr definiert
             If objRange.Cells(4).Value = Cells(1, 2) Then
                 ColumnIndex2 = objRange.Column
                 
                 wb2.Range(wb2.Cells(5, ColumnIndex2), wb2.Cells(44, ColumnIndex2)). _
Copy
                                 
                 '[hier soll es danach weiter gehen...]
                               
               
             End If
        
        Next
        
     End If
 
 
 End Sub

Gruß Gerd

Betrifft: AW: Es war 2 x .Range zuuviel
von: Lara
Geschrieben am: 02.10.2020 15:45:47

Hallo Gerd,

der angepasste Code wie unten läuft leider immer noch auf den Fehler Laufzeit 438
Sub DatenImportieren1()

Dim wb As Workbook
Dim wb2 As Workbook
Dim Name
Dim Path
Dim FileFound
Dim ColumnIndex2 As Long
Dim objRange As Range

Set wb = ActiveWorkbook

Name = wb.Worksheets("Konsolidierung").Range("V6")
Path = wb.Worksheets("Steuerung").Range("C11")

FileFound = Dir(Path & "\" & "*" & Name & "*.xlsx")
    If FileFound <> "" Then
       Workbooks.Open Path & "\" & FileFound
       
       Set wb2 = ActiveWorkbook
        
       For Each objRange In ActiveSheet.Columns("D:R")                                       ' _
Prüft ob die Spalte dem Reportmonat entspricht. Wenn ja, dann wird FoundColumn als wahr definiert
            If objRange.Cells(4).Value = Cells(1, 2) Then
                ColumnIndex2 = objRange.Column
                
                wb2.Range(wb2.Cells(5, ColumnIndex2), wb2.Cells(44, ColumnIndex2)).Copy
                                
                '[hier soll es danach weiter gehen...]
                              
              
            End If
       
       Next
       
    End If


End Sub


Betrifft: AW: Es war 2 x .Range zuuviel
von: chris b.
Geschrieben am: 02.10.2020 15:48:45

So sollte es gehen:
Sub DatenImportieren2()
 
 Dim wb As Workbook
 Dim wb2 As Workbook
 Dim Name
 Dim Path
 Dim FileFound
 Dim ColumnIndex2 As Long
 Dim objRange As Range
 
 Set wb = ActiveWorkbook
 
 Name = wb.Worksheets("Konsolidierung").Range("V6")
 Path = wb.Worksheets("Steuerung").Range("C11")
 
 FileFound = Dir(Path & "\" & "*" & Name & "*.xlsx")
     If FileFound <> "" Then
        Workbooks.Open Path & "\" & FileFound
        
        Set wb2 = ActiveWorkbook
         
        For Each objRange In ActiveSheet.Columns("D:R")                                       '  _
_

             If objRange.Cells(4).Value = Cells(1, 2) Then
                 ColumnIndex2 = objRange.Column
                 
    wb2.ActiveSheet.Range(wb2.ActiveSheet.Cells(5, ColumnIndex2), wb2.ActiveSheet.Cells(44,  _
ColumnIndex2)).Copy
                                 
                 '[hier soll es danach weiter gehen...]
                               
               
             End If
        
        Next
        
     End If
 
 
 End Sub


grüße Chris b

Betrifft: AW: Es war 2 x .Range zuuviel
von: Gerd L
Geschrieben am: 02.10.2020 15:55:50

Moin Lara,

ersetze bitte mal in der Schleife wb2 durch ActiveSheet

Gruß Gerd

Betrifft: AW: Fehler 438 bei Range.Copy
von: Lara
Geschrieben am: 02.10.2020 15:33:18

Hallo Daniel,

auch deine Resize Variante läuft auf die gleiche Fehlermeldung. (vgl. Anpassungen unten)

Grüße, Lara
Sub DatenImportieren1()

Dim wb As Workbook
Dim wb2 As Workbook
Dim Name
Dim Path
Dim FileFound
Dim ColumnIndex2 As Integer
Dim Bereich

Set wb = ActiveWorkbook

Name = wb.Worksheets("Konsolidierung").Range("V6")
Path = wb.Worksheets("Steuerung").Range("C11")

FileFound = Dir(Path & "\" & "*" & Name & "*.xlsx")
    If FileFound <> "" Then
       Workbooks.Open Path & "\" & FileFound
       
       Set wb2 = ActiveWorkbook
        
       For Each Bereich In ActiveSheet.Columns("D:R")                                       'Prü _
ft ob die Spalte dem Reportmonat entspricht. Wenn ja, dann wird FoundColumn als wahr definiert
            If Bereich.Cells(4).Value = Cells(1, 2) Then
                ColumnIndex2 = Bereich.Column
                
                wb2.Cells(5, ColumnIndex2).Resize(40, 1).Copy
                                
                '[hier soll es danach weiter gehen...]
                              
              
            End If
       
       Next
       
    End If


End Sub


Betrifft: AW: Fehler 438 bei Range.Copy
von: Daniel
Geschrieben am: 02.10.2020 17:15:50

Hi

Da fehlt zwischen dem Workbook (wb2) und der Zelle (cells) noch das Sheet, sonst ist die hierarchische Reihenfolge Datei- Blatt-Zelle nicht vollständig.

Wenn du den Blattnamen kennst:
wb2.Sheets("Tabelle1"). Cells(...
Wenn du ihn nicht kennst, nimm das erste Blatt:
wb2.Sheets(1). Cells(...
Gruß Daniel