it-swarm.com.de

VBA-Laufzeitfehler 1004 "Anwendungsdefinierter oder Objektdefinierter Fehler" beim Auswählen des Bereichs

Ich habe ein Problem mit einem Fehler 1004 "Anwendungsdefiniert oder Objektdefiniert" bei der Auswahl eines Bereichs. 

Ich kann immer noch Zeilen auswählen (dh Rows("21:21").select) und Bereiche in anderen Arbeitsblättern derselben Arbeitsmappe auswählen. Ich glaube nicht, dass der Fehler im Code liegt. Vielleicht ist es eine Einstellung, die ich nicht kenne?

Ich habe den gleichen Code schon oft verwendet, aber aus irgendeinem Grund kann ich ihn nicht in diesem U-Boot funktionieren lassen (ich habe den Fehler angegeben).

Sub CopySheet1_to_PasteSheet2()

    Dim CLastFundRow As Integer
    Dim CFirstBlankRow As Integer

    'Finds last row of content
    Windows("Excel.xlsm").Activate
    Sheets("Sheet1").Activate
    Range("C21").Select
         '>>>Error 1004 "Application-defined or Object-defined error" Occurs
    Selection.End(xlDown).Select
    CLastFundRow = ActiveCell.Row
    'Finds first row without content
    CFirstBlankRow = CLastFundRow + 1

    'Copy Data
    Range("A21:C" & CLastFundRow).Select
    Selection.Copy
    'Paste Data Values
    Sheets("PalTrakExport PortfolioAIdName").Select
    Range("A21").Select
    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False

    'Bring back to top of sheet for consistancy
    Range("A21").Select
    Range("A1").Select
End Sub

Ich brauche alle Lust auf meine Kopien, da sich die Anzahl der Zeilen häufig ändert. Wieder wurde der folgende Code zuvor ohne Fehler verwendet ... aber in diesem Fall nicht.

Dim CLastFundRow As Integer
Dim CFirstBlankRow As Integer

'Finds last row of content
Windows("Excel.xlsm").Activate
Sheets("Sheet1").Activate
Range("C21").Select
     '>>>Error 1004 "Application-defined or Object-defined error" Occurs
Selection.End(xlDown).Select
CLastFundRow = ActiveCell.Row
'Finds first row without content
CFirstBlankRow = CLastFundRow + 1
16
thomas

Möglicherweise befindet sich Ihr Code hinter Sheet1. Wenn Sie den Fokus auf Sheet2 ändern, können die Objekte nicht gefunden werden. Wenn dies der Fall ist, kann es hilfreich sein, das Ziel-Arbeitsblatt anzugeben.

Sheets("Sheet1").Range("C21").Select

Ich bin nicht sehr vertraut mit der Funktionsweise von Select, da ich so weit wie möglich vermeiden will :-). Sie können Bereiche definieren und bearbeiten, ohne sie auszuwählen. Es ist auch eine gute Idee, über alles, was Sie referenzieren, explizit zu sein. Auf diese Weise verlieren Sie nicht den Überblick, wenn Sie von einem Arbeitsblatt zum anderen wechseln. Versuche dies:

Option Explicit

Sub CopySheet1_to_PasteSheet2()

    Dim CLastFundRow As Integer
    Dim CFirstBlankRow As Integer
    Dim wksSource As Worksheet, wksDest As Worksheet
    Dim rngStart As Range, rngSource As Range, rngDest As Range

    Set wksSource = ActiveWorkbook.Sheets("Sheet1")
    Set wksDest = ActiveWorkbook.Sheets("Sheet2")

    'Finds last row of content
    CLastFundRow = wksSource.Range("C21").End(xlDown).Row
    'Finds first row without content
    CFirstBlankRow = CLastFundRow + 1

    'Copy Data
    Set rngSource = wksSource.Range("A2:C" & CLastFundRow)

    'Paste Data Values
    Set rngDest = wksDest.Range("A21")
    rngSource.Copy
    rngDest.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks:=False, Transpose:=False
    'Bring back to top of sheet for consistancy
    wksDest.Range("A1").Select

End Sub
21
Frank H.

Es ist etwas spät, kann aber für die spätere Verwendung hilfreich sein. Ich hatte gerade das gleiche Problem und ich denke es liegt daran, dass das Makro auf Arbeitsblattebene aufgezeichnet wird. Klicken Sie mit der rechten Maustaste auf den Modulknoten im VBA-Projektfenster, klicken Sie auf Einfügemodul und fügen Sie Ihr Makro in das neue Modul ein (stellen Sie sicher, dass Sie das auf Arbeitsblattebene aufgezeichnete löschen).

Ich hoffe das hilft.

11
Kam

Mir geht es genauso. In meinem Fall befand sich der größte Teil des Arbeitsblatts im geschützten Modus (obwohl die für das Makro relevanten Zellen nicht gesperrt waren). Wenn ich den Schutz für das Arbeitsblatt deaktiviert habe, funktionierte das Makro einwandfrei ... VBA mag gesperrte Zellen nicht, auch wenn sie nicht vom Makro verwendet werden.

5
Emily

Einige Vorgänge in Excel sind durch den verfügbaren Speicher begrenzt. Wenn Sie den gleichen Vorgang immer wieder wiederholen, kann dies zu einem Speicherüberlauf führen, der von Excel nicht mehr wiederholt werden kann. Dies ist mir passiert, als ich versuchte, mehrere Blätter in derselben Arbeitsmappe zu erstellen.

2
Dave

Wenn Sie programmgesteuert eine große Array-Zeichenfolge auf einen Bereich in Excel 2003 festlegen, wird möglicherweise eine Fehlermeldung "Laufzeitfehler 1004" angezeigt

Wenn Sie in Office Excel 2003 programmgesteuert einen Bereichswert mit einem Array festlegen, das eine große Zeichenfolge enthält, wird möglicherweise eine Fehlermeldung angezeigt, die der folgenden ähnelt:

Laufzeitfehler '1004'. Anwendungsdefinierter oder durch die Operation definierter Fehler.

Dieses Problem kann auftreten, wenn eine oder mehrere Zellen in einem Array (Zellbereich) eine Zeichenfolge enthalten, die mehr als 911 Zeichen enthält.

Um dieses Problem zu umgehen, bearbeiten Sie das Skript so, dass keine Zellen im Array eine Zeichenfolge enthalten, die mehr als 911 Zeichen enthält.

Beispielsweise definiert die folgende Codezeile aus dem folgenden Beispielcodeblock eine Zeichenfolge, die 912 Zeichen enthält:

Sub XLTest()
Dim aValues(4)

  aValues(0) = "Test1"
  aValues(1) = "Test2"
  aValues(2) = "Test3"

  MsgBox "First the Good range set."
  aValues(3) = String(911, 65)

  Range("A1:D1").Value = aValues

  MsgBox "Now the bad range set."
  aValues(3) = String(912, 66)
  Range("A2:D2").Value = aValues

End Sub

Andere Versionen von Excel oder kostenlose Alternativen wie Calc sollten ebenfalls funktionieren.

2
Cees Timmerman

Ich hatte ein ähnliches Problem, aber es stellte sich heraus, dass ich gerade auf eine Zelle verwiesen habe, die sich außerhalb der Seite befand. Zellen (i, 1) .cut-Zellen (i-1,2)}

1
WannabeProger

Ich könnte den Fehler entfernen (Laufzeitfehler '1004'. Anwendungsdefinierter oder durch die Operation definierter Fehler), indem ich die Zähler als Single definiere

1
Rolf

Ich hatte ein ähnliches Problem und behebte es mit diesen Schritten:

  1. Den Bogen, den ich bearbeiten möchte, nicht schützen
  2. Ändern des Bereichs, den ich für jede einzelne Zelle in dem Bereich ausgewählt hatte (explodiert)

Ich hoffe das hilft jemandem.

1
Fabian

Sie müssen zum Blatt db gehen, um die erste leere Zeile zu erhalten. Sie können diese Methode ausprobieren.

Sub DesdeColombia ()    
  Dim LastRowFull As Long

  'Here we will define the first blank row in the column number 1 of sheet number 1:
  LastRowFull = Sheet1.Cells(Rows.Count,1).End(xlUp).Offset(1,0).Row

  'Now we are going to insert information
  Sheet1.Cells(LastRowFull, 1).Value = "We got it"    
End Sub
1
Alex Merlano

Ich hatte ein ähnliches Problem, als ich versuchte, auf jedem Arbeitsblatt einer Arbeitsmappe eine Schleife zu machen ... Um dies zu beheben, habe ich so etwas getan

dim mySheet as sheet

for each mysheet in myWorkbook.sheets

    mySheet.activate
    activesheet.range("A1").select

    with Selection
    'any wanted operations here
    end with

next

Und es hat gut funktioniert

Ich hoffe, Sie können es an Ihre Situation anpassen

0
user6292909

Ich hatte auch ein ähnliches Problem. Nach dem Kopieren und Einfügen in ein Blatt wollte ich, dass der Cursor/die ausgewählte Zelle A1 nicht der Bereich ist, in den ich gerade eingefügt habe.

Dim wkSheet as Worksheet
Set wkSheet = Worksheets(<sheetname>)

wkSheet("A1").Select

bekam aber einen Fehler 400, der eigentlich ein Fehler 1004 war 

Sie müssen das Arbeitsblatt aktivieren, bevor Sie die ausgewählte Zelle ändern

Dim wkSheet as Worksheet
Set wkSheet = Worksheets(<sheetname>)

wkSheet.Activate
wkSheet("A1").Select
0
Dave Pile

Ich hatte auch das gleiche Problem und wäre fast verrückt geworden. Die Lösung war ziemlich unerwartet.

Mein Excel ist standardmäßig ausgeliefert, dass ich Formeln in eine Excel-Zelle wie folgt eingebe:

=COUNTIF(Range; Searchvalue)
=COUNTIF(A1:A10; 7) 'Example

Bitte beachten Sie, dass die Parameter durch ein Semikolon; getrennt sind. Wenn Sie nun genau diese Zeichenfolge in eine Formel in VBA einfügen, zum Beispiel:

Range("C7").FormulaArray = "=COUNTIF(A1:A10; 7)" 'this will not work

Sie erhalten diesen 1004-Fehler ohne jegliche Erklärung. Ich habe Stunden damit verbracht, das zu debuggen. Alles, was Sie tun müssen, ist, das gesamte Semikolon durch Kommas zu ersetzen.

Range("C7").FormulaArray = "=COUNTIF(A1:A10, 7)" 'this works
0
Zim84

Ich habe auch das gleiche Problem und löste mich wie folgt.
in macro hat eine Variable namens rownumber und ich habe sie anfangs auf Null gesetzt. Dies ist der Fehler, da keine Excel-Tabelle die Zeilennummer als Null enthält. Wenn ich als 1 eingestellt bin und erhöhen, was ich will. 
jetzt funktioniert es gut.

0
Singaravelan

Sie können den folgenden Code verwenden (beispielsweise, wenn Sie Zellendaten von Sheet2 nach Sheet1 kopieren möchten).

Sub Copy
Worksheets("Sheet1").Activate                    
Worksheets("Sheet1").Range(Cells(i, 6), Cells(i, FullPathLastColumn)).Copy_
Destination:=Worksheets("Sheet2").Cells(Path2Row, Path2EndColumn + 1)
End Sub
0
parpaei

Ich stieß auf das gleiche Problem und stellte fest, dass die Person, die das Arbeitsblatt erstellte, mehrere Spalten gesperrt hatte. Ich entfernte den Schutz und alles funktionierte wie geplant.

0
Chris Cooksey

Sie müssen den tatsächlichen Grund für diesen allgemeinen Fehlercode ermitteln: 1004. Bearbeiten Sie Ihren Funktions-/VBA-Code und führen Sie Ihr Programm im Debug-Modus aus, um die Zeile zu identifizieren, die den Fehler verursacht. Und dann fügen Sie den Code unten hinzu, um den Fehler zu sehen.

On Error Resume Next
//Your Line here which causes 1004 error
If Err.Number > 0 Then
  Debug.Print Err.Number & ":" & Err.Description
End If

Hinweis: Debuggen-Tastenkombinationen, die ich in PC verwende: Step Into (F8), Step Over (Umschalt + F8), Step Out (Strg + Umschalt + F8) 

0
Bhuvanesh Mani

Ich hatte dieses Problem während der VBA-Entwicklung/des Debuggens plötzlich, weil eine (mir unbekannte) Funktion (ality) dazu führte, dass die Zellen gesperrt wurden (möglicherweise mbenennung der benannten Referenzen in einem problematischen Stadium ).

Das manuelle Entsperren der Zellen hat gut funktioniert:

Auswählen aller Arbeitsblattzellen (CTRL+A) und Entsperren mit right click -> cell formatting -> protection -> [ ] lock (kann abweichen) Zellen formatieren -> Schutz -> [ ] Gesperrt)

0