2016-04-05 21 views
1

Hallo kann jemand herausfinden, warum ich diese Botschaft bin immer ..MACRO VBA - „Laufzeitfehler‚1004‘Anwendung - definiert oder Objekt definiert Fehler“

Laufzeitfehler ‚1004‘ Anwendung definiert oder Objekt definierte Fehler

hier ist mein Code, scheint das Problem Linie zu sein:

range("A1").Select

hier ist der Rest des Codes:

Sub HorizontalLoop() 
Dim lCol As Long 

Sheets("output").Select 

For lCol = 1 To 100 
    Dim inputrange As String 
     If Not IsEmpty(Cells(lCol).Value) Then 
      inputrange = Cells(1, lCol).Value 
      ActiveCell.EntireColumn.Select 
      Selection.Copy 
      Sheets("input").Select 
      range("A1").Select 
      ActiveSheet.Paste 
      Sheets("output").Select 

     End If 

Next lCol 
End Sub 

Vielen Dank im Voraus :)

+0

einfügen, was Sie erreichen wollen? –

+0

Ich bemerke das in 'range (" A1 "). Wählen Sie' 'range' 'nicht mit einem Großbuchstaben, was bedeutet, dass VB es nicht als' Range'-Methode analysiert hat. Möglicherweise müssen Sie dem Objekt, von dem Sie eine Reichweite erhalten möchten, z. 'ActiveSheet.Range (" A1 "). Wählen Sie". –

+0

Ganz oben (vor 'Sub HorizontalLoop()'), setzen Sie 'Option Explicit', um sicherzustellen, dass Ihre Variablen in Ordnung sind. Ich denke, Sie haben irgendwo eine Variable namens 'range'. Können Sie den Rest Ihres Codes posten? – BruceWayne

Antwort

0

Unter der Annahme, dass die Zelle A13 aktive Zelle in Arbeitsblatt ausgegeben wird, finden Sie in den folgenden Code

worksheets("output").Range("A13").Activate 
ActiveCell.EntireColumn.Copy Worksheets("input").Range("A1") 

es wird die gesamte Spalte kopieren und auf den Arbeitsblatt Eingang

+0

Sie hatten Recht, es gab keine aktive Zelle, IVE ersetzt Acticecell mit 'Zellen (1, lCol) .EntireColumn.Select' und seine funktioniert :) Danke – HushHoney

+0

@HushHoney, bitte markieren Sie, wie dies die Lösung für Ihre Frage ist –

+0

@HushHoney - Während dies sicherlich funktioniert, es verlässt immer noch Ihr Makro mit' .Select' , was nicht die beste Praxis ist. Lesen Sie [diese Seite] (http: // stackoverflow.com/questions/10714251/how-to-meiden-using-select-in-excel-vba-macros) mit '.Select' kann viele Kopfschmerzen, vor allem, wenn Sie zwischen Arbeitsblättern/Arbeitsmappen bounce, was einige des Problems war Hier. – BruceWayne

1

Sie müssen die Range("A1") mit dem dem Arbeitsblatt-Namen qualifizieren (wie in Paul Ogilvie Kommentar erwähnt.

Sie müssen jedoch nicht zwischen den Arbeitsblättern hin und her wechseln, um einzufügen. Nach dem "Kopieren" können Sie einfach das "Ziel" hinzufügen.

Ich habe eine abgespeckte Version des Codes (nur 2 Spalten), so können Sie sehen, was ich meine:

Sub HorizontalLoop2() 

Dim lCol As Long 
Dim inputrange As String 
Dim wsO As Worksheet 
Dim wsI As Worksheet 

Set wsO = ThisWorkbook.Worksheets("output") 
Set wsI = ThisWorkbook.Worksheets("input") 

For lCol = 1 To 2 

If Not IsEmpty(wsO.Cells(lCol).Value) Then 
inputrange = wsO.Cells(lCol).Value 

wsO.Columns(lCol).Copy _ 
Destination:=wsI.Cells(1, lCol) 

End If 

Next lCol 

End Sub 

Dies setzt voraus, natürlich, dass Sie auf die gleiche Spaltennummer einfügen möchten!

Verwandte Themen