VBA-runtimefout 1004 “Door toepassing gedefinieerde of objectgedefinieerde fout” bij het selecteren van bereik

Ik heb een probleem met een fout 1004 “Door een toepassing gedefinieerde of door een object gedefinieerde fout” bij het selecteren van een bereik.

Ik kan nog steeds rijen selecteren (dwz Rows("21:21").select) en bereiken selecteren in andere bladen van dezelfde werkmap. Ik geloof niet dat de fout in de code zit. Misschien is het een instelling waarvan ik niet op de hoogte ben?

Ik heb exact dezelfde code vele malen eerder gebruikt, maar om de een of andere reden kan ik het niet laten werken in deze sub (ik heb commentaar gegeven waar de fout optreedt)…

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

Ik moet helemaal zin krijgen in mijn kopiëren, aangezien het aantal rijen regelmatig zal veranderen. Nogmaals, de onderstaande code is eerder zonder fouten gebruikt… maar niet in dit geval.

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

Antwoord 1, autoriteit 100%

Misschien staat uw code achter Blad1, dus als u de focus wijzigt naar Blad2 kunnen de objecten niet worden gevonden? Als dat het geval is, kan het helpen om eenvoudig uw doelwerkblad te specificeren:

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

Ik ben niet erg bekend met hoe Select werkt, omdat ik het zoveel mogelijk probeer te vermijden :-). U kunt bereiken definiëren en manipuleren zonder ze te selecteren. Het is ook een goed idee om expliciet te zijn over alles waarnaar u verwijst. Zo verlies je het overzicht niet als je van het ene blad of werkmap naar het andere gaat. Probeer dit:

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

Antwoord 2, Autoriteit 70%

Het is een beetje laat, maar kan nuttig zijn voor toekomstig gebruik. Ik had net hetzelfde probleem gehad en ik denk dat het is omdat de macro op het werkbladniveau is geplaatst. Klik met de rechtermuisknop op het modulesknooppunt op het VBA-projectvenster, klik op “Invoegen” = & GT; “Module”, plak vervolgens uw macro in de nieuwe module (zorg ervoor dat u de opname op het werkbladniveau verwijdert).


Antwoord 3, Autoriteit 30%

Ik had ook hetzelfde probleem en reed bijna gek. De oplossing was vrij onverwacht.

Mijn excel wordt standaard verzonden dat ik formules in een Excel-cel invoer, zoals volgt:

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

Houd er rekening mee dat parameters worden gescheiden met een puntkomma ;. Als u nu precies die reeks plakt in een formule binnen VBA, bijvoorbeeld zoals:

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

U krijgt deze 1004-fout met absoluut geen verklaring. Ik heb uren doorgebracht om dit te debuggen .. alles wat je hoeft te doen is alle puntkomma’s vervangen door komma’s.

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

Antwoord 4, Autoriteit 26%

Hetzelfde gebeurde met mij. In mijn geval was het grootste deel van het werkblad in de beschermde modus (hoewel de cellen die relevant zijn voor de macro ontgrendeld). Toen ik de bescherming op het werkblad uitgeschakeld, werkte de macro prima … het lijkt erop dat VBA niet houdt van vergrendelde cellen, zelfs als ze niet door de macro worden gebruikt.


Antwoord 5, Autoriteit 11%

Sommige operaties in Excel zijn beperkt door het beschikbare geheugen. Als u hetzelfde proces herhaalt, kan het een geheugenoverloop produceren en kan Excel het niet meer kunnen herhalen. Dit gebeurde me tijdens het proberen om verschillende lakens in dezelfde werkmap te maken.


Antwoord 6, Autoriteit 11%

kunt u een foutmelding” Runtime-fout 1004 “ontvangen wanneer u programmatisch een Grote array-reeks naar een bereik in Excel 2003

In Office Excel 2003, wanneer u programmatisch een bereikwaarde instelt met een array die een grote reeks bevat, ontvangt u mogelijk een foutmelding op het volgende:

Runtime-fout ‘1004’. Toepassing gedefinieerde of bedieningsgedefinieerde fout.

Dit probleem kan optreden als een of meer van de cellen in een array (bereik van cellen) een tekenreeks bevatten die is ingesteld om meer dan 911 tekens te bevatten.

Om dit probleem te laten werken, bewerk het script zodat er geen cellen in de array een tekenreeks bevatten die meer dan 911 tekens bevat.

Bijvoorbeeld, de volgende regel van code uit het onderstaande voorbeeldcodeblok, definieert een tekenreeks met 912 tekens:

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 versies van Excel of gratis alternatievenzoals Calczou ook moeten werken.


Antwoord 7, autoriteit 7%

Ik zou de fout (Runtime-fout ‘1004’. Door de toepassing gedefinieerde of door bewerking gedefinieerde fout) kunnen verwijderen door de tellers als Single te definiëren


Antwoord 8, autoriteit 4%

Ik had een soortgelijk probleem & opgelost door deze stappen toe te passen:

  1. Bescherming van het blad dat ik wil bewerken opheffen
  2. Het bereik wijzigen dat ik had geselecteerd door elke afzonderlijke cel in het bereik (geëxplodeerd)

Ik hoop dat dit iemand zal helpen.


Antwoord 9, autoriteit 4%

Je moet naar het blad van db gaan om de eerste lege rij te krijgen, je zou deze methode kunnen proberen.

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

Antwoord 10, autoriteit 4%

U kunt de volgende code gebruiken (bijvoorbeeld als men celgegevens van Sheet2naar Sheet1wil kopiëren).

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

Antwoord 11, autoriteit 4%

Ik had een soortgelijk probleem, maar het bleek dat ik alleen verwees naar een cel die niet op de pagina stond {d.w.z. cells(i,1).cut cells (i-1,2)}


Antwoord 12

Ik had een soortgelijk probleem bij het herhalen van elk blad van een werkmap.
Om het op te lossen deed ik zoiets als dit

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

En het werkte prima

Ik hoop dat u het aan uw situatie kunt aanpassen


Antwoord 13

Ik kwam hetzelfde probleem tegen en ontdekte dat de persoon die het werkblad had gemaakt, verschillende kolommen had vergrendeld. Ik heb de bescherming verwijderd en alles werkte zoals bedoeld.


Antwoord 14

Ik heb ook hetzelfde probleem en ik heb het opgelost door zoals hieronder.
in macro heb je een variabele met de naam rijnummer en in eerste instantie stel ik deze in als nul. dit is de fout omdat geen enkel Excel-blad rijnummer als nul bevat. wanneer ik instel als 1 en verhoog wat ik wil.
nu werkt het prima.


Antwoord 15

Ik had ook een soortgelijk probleem. Na het kopiëren en plakken naar een blad wilde ik dat de cursor/geselecteerde cel A1 was, niet het bereik waarin ik zojuist had geplakt.

Dim wkSheet as Worksheet
Set wkSheet = Worksheets(<sheetname>)
wkSheet("A1").Select

maar kreeg een 400-fout die eigenlijk een 1004-fout was

U moet het blad activeren voordat u de geselecteerde cel wijzigt
dit werkte

Dim wkSheet as Worksheet
Set wkSheet = Worksheets(<sheetname>)
wkSheet.Activate
wkSheet("A1").Select

Antwoord 16

U moet de werkelijke reden voor deze veelvoorkomende foutcode achterhalen: 1004. Bewerk uw functie/VBA-code en voer uw programma uit in debug-modus om de regel te identificeren die deze veroorzaakt. En voeg dan onderstaand stukje code toe om de fout te zien,

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

Opmerking:
Debug sneltoetsen die ik op pc gebruik:
Stap in (F8), stap over (Shift + F8), stap uit (Ctrl + Shift + F8)


Antwoord 17

Ik had dit probleem plotseling tijdens VBA-ontwikkeling/debugging omdat een (voor mij onbekende) functie ervoor zorgde dat de cellen werden vergrendeld (misschien hernoemen van benoemde verwijzingen in een problematisch stadium).

Het handmatig ontgrendelen van de cellenwerkte prima:

Alle werkbladcellen selecteren (CTRL+A) en ontgrendelen door right click -> cell formatting -> protection -> [ ] lock(kan anders zijn – vertaald uit het Duits: Zellen formatieren -> Schutz -> [ ] Gesperrt)


Antwoord 18

Ik wilde alleen een extra oplossing toevoegen, omdat ik deze nog nooit was tegengekomen:

Een gebruiker van mij kwam deze runtime-fout tegen met een Excel-werkmap waaruit hij informatie haalt, maar alleen op zijn desktopcomputer, hoewel de hardware en software bijna identiek waren aan zijn laptop (dezelfde hoeveelheid geheugen, besturingssysteem, Office-configuratie , enz.).

Het bleek dat de monitor die op zijn desktopcomputer was aangesloten, te groot was – de oplossing/omzeiling was om een leeg Excel-bestand te openen, het Excel-venster kleiner te maken en vervolgens het bestand te openen waarmee hij problemen had.

Aangezien dit een bestand was dat door een derde partij was gegenereerd, konden we geen van de eerder voorgestelde oplossingen bewerken/implementeren, en ook de macro- of beveiligingsinstellingen veranderden niets (en ze werkten op zijn laptop met dezelfde instellingen hoe dan ook).

Other episodes