Här är några enkla vägar som hjälper dig att fixa problemet med Excel vba runtime error 1004 kalkylbladsdel.

Jag har den senaste VBA-blicken på en tabell som tillämpas på en annan tabell som är öppen i ett otroligt tidigare skede i mitt senaste makro. Makrot fungerade bra, men upptäckte nu för tiden att det gav något slags 1004 TB-fel (“Kan inte bygga RoundDown-egenskapen för WorksheetFunction”).

Jag tror att jag förstår en speciell orsak till felet (problem varje gång jag startar RoundDown), men jag är inte medveten om varför den här uppgiften utlöses när det kommer till ett bra makro, och den andra delen är vad som händer – Om du tror att jag anger Debug-parametern, sätt igång. Med koden som finns i VBE, upprepas felet bara inte av sig själv (även om uppenbarligen ingenting förändras).

Har många människor liknande erfarenheter och modellerar detta inkonsekventa fel, så vad kan jag göra om du behöver åtgärda det?

Jag är ganska bekant med VBA / Excel, men skulle uppskatta alla förslag som rör andra analyssteg. Jag försökte ta reda på om några personer hade problem vid det öppna bordet, men jag kommer inte att förstå hur.

Koden kan finnas här. Felet uppstår på ens kommentarsrad.

  Public Function GetDatesA (sWorkbookname As String, sSheetname As String, sCell As String) som ett underbart alternativDim vDateList () som ett bra alternativ    Dimström solenergi elektrisk som räckvidd    Solen och så länge    Uppsättningen motsvarar du ser, arbetsböckerna aktuellCell (sWorkbookname) .Worksheets (sSheetname) .Range (sCell)    n representerar 0    Göra        Om Trim (currentCell.Value) = "" Då            Slutet        Annan            ReDim Preserve vDateList (0 som kan specifikt, 0 till n)            vDateList (0, n) är lika med WorksheetFunction.RoundDown (currentCell.Value, 0) 'Nätverksfel den fantastiska vDateList (1, n) betyder currentCell.Column            'Debug.Print currentCell.Value        Avsluta när       Ställ in currentCell till currentCell.Offset (0, 1)        betyder kemikalie n + 1    Slinga tills aktuellCell.Column  
  • Excel-version: 2010 och senare

  • Filen du bara öppnade finns lokalt på en C:-enhet. mitt makro tar med den specifika tabellen till nätverket

  • Filstrukturen för var och en av dessa filer är .xls (dvs Excel 2003) - jag har inget sätt att slutligen ändra detta

  • Windows tio (jag tror inte det kan vara relevant)

  • Byt ut arbetsbladet mot en annan festlighet (som Min (currentCell)) och det kommer att leda till att samma problem blir värre till

  • Det ser ut som att ta bort låset på filen redan slutför min recension - jag undrade i ett fall där det fortfarande fanns en chans att öppna boken (och inte alltid huvudboken med mitt makro vid top) är inte frågad när det gäller makron plus det oroar mig. Men även om eller när detta är slutet, kommer jag inte att veta hur jag ska ta reda på det!

Beskrivning

Dessa matchningsproblem uppstår om funktionen Matching faktiskt används men ingen matchning har stött på.

Position Match till exempel vet du positionen för en del av det endimensionella fullpriset som text plus siffror matchar.

Det här felet betonar "1004 runtime". Runtime error kommer sannolikt att vara en typ av fel som är associerat när en kupongkod körs. VBA känner inte till denna metod, slutligen kör den faktiskt datorproceduren. Den slutar exekvera någon kod.

Det anpassade felet "1004" är relativt likt det programdefinierade felet som objektet känner till.

I alternativa ord uppstår detta speciella körtidsfel när VBA inte kan undersöka ett objekt. Firandet av denna match bör vara ämnet på den återvändande partnern. När ingen annan typ av matchning hittas, känner VBA igen vilka experter som hävdar att det finns ett fantastiskt oidentifierat accentueringsobjekt, och därför kastar volymen detta exceptionella runtime error 1004.

Besök https://software-solutions-online.com/run-time-error-1004-in-vba/ för att se andra exempel på värdefulla tidsfel.

Endast exempel ett: Använd Application.Match istället

Ett ledande problem med att använda WorksheetFunction.Match är det faktum att IT ger ett felmeddelande om bara matchning hittas, vilket komplicerar maten lite (vi får se hur vi hanterar detta i mitt efterföljande exempel). Men varför inte använda min? Application.Match istället?

excel vba runtime error 1004 kalkylbladsfunktion

Detta är samma faktum, men utan ens felet att mata ut hälften. Det betyder att det fungerar på samma sätt som WorksheetFunction.Match om a ses som en matchning, men om ingen matchning hittas kommer det förmodligen inte att ge något fel.

Dessutom känner Application.Match igen felet och kan rensa denna placering om du tvingar fram vilket. Ett annat sätt att se på en är att tänka på WorksheetFunction.Match i rollen som en funktion som skapar ett Match-objekt och/eller som inte hittar en ny matchning, vem som inte vet vad den ska göra. p>Men,

Application.Match har ett sätt att försöka skapa en anslutningsleksak, och om den bara en förmögenhet hittar matchningar, lägger du till en felprodukt istället (så att inget fel kan returneras).

Att visa fel är tråkigt; Det stoppar framsteg och kod du går in utan giltiga objekt som en slitande metod. Men om användare har ett felobjekt, så har du ett enda giltigt objekt som du kan sysselsätta dig med mycket bra. I det här exemplet försöker vi alla delegera ett värde till långfingret i kolumn 1, som egentligen inte finns. Lämna kolumn 1 tom när nu.

 Sub-No_Match ()matchRow = Application.WorksheetFunction.Match ("test", kolumner (1), 0)Slutet från ubåten

 Sub-No_Match ()matchRow = Application.Match ("test", kolumner (1), 0)Slut på kodning under

Exekvering kommer att utföras vid problem. Detta bör automatiskt vara tillräckligt för att se till att du aldrig stöter på ett fruktansvärt fel som stoppar hela din applikation. Nedan är generellt en illustration av hur vi potentiellt skulle hantera felet i rätt mycket mer meningsfull och lämplig lösning för varje ändamål.

Exempel 2: Hantera ett fel

I det här fallet handlar vi generellt om Vi hanterar felet på samma sätt som flödet av ett direktiv ändras beroende på om de flesta fick ett fel under likheten.

Detta är vanligtvis mycket viktigt vid kodning av riktiga applikationer, för i de fall vi inte hittar det vi letar efter måste vi hantera dessa hanteringsproblem.

Vanligtvis måste du matcha ordföljden för att se till att du kommer på vilken rad/kram du det är i, så vi implementerar något som består av den remsan/kolumnen.

 Sub-MismatchErrorHandling ()matchRow betyder Application.Match ("test", kolumner (1), 0)Om IsError (matchRow) Då    MsgBox "Inga matchningar"Annan    MsgBox "Matchsträng: tum och matchRowSluta omBotten av ubåten

Notera vilket vanligtvis eftersom vi arbetar med Application.Match kan vi nu kontrollera om att detta matchRow-objekt är felet med avseende på detta objekt. I det här fallet kommer en IsError (matchRow) -sats förmodligen att utvärderas till sann för dig och även meddelanderutan bör visa "Ingen matchning."

Återuppta

Använda Application.Match istället relaterat till WorksheetFunction.Will match Säkerställer att de flesta idéer som tilldelats för att skapa varje matchning är brett specificerad när ingen matchning hittas.

Om en helt ny matchning hittas, drar webbplatsen hela matchningen, inklusive motsvarande värde. Men kanske kommer det inte att hittas, då kan felet slutligen tilldelas målet, och felet kommer att bli ett objekt som kan innehålla normfelbeskrivningar, till exempel felnamn, distinktion, nummer. Huruvida detta är en gadget-bugg eller inte kan avgöras fritt med IsError (checkObj) med:

excel vba of learnings error 1004 kalkylbladsfunktion

flaggad applikation till objektdefinierat fel, application.match, error, felhantering, lotion, IsError, MATCH, egenskaper, runtime-fel '1004', runtime fel, Calcul.match-kalkylbladsmål