Hogyan javítható az 1004 futási hiba az Excelben

A 1004-es futásidejű hiba a Microsoft Visual Basic programhoz tartozó hibakód, amelyről ismert, hogy hatással van a Microsoft Excel felhasználóira. A hiba köztudottan az Excel 2003 és az Excel 2007 esetében a legelterjedtebb, bár a Microsoft számítógépekhez készített népszerű munkalap-alkalmazásának egyetlen verziója sem védett a fenyegetéstől, amely a 1004-es futásidejű hiba. A legtöbb esetben a probléma által érintett felhasználók Az 1004 futásidejű hiba két különböző változata. Az 1004 futásidejű hiba két változata teljes egészében a következő:

'1004' futásidejű hiba:

A munkalap osztály másolása nem sikerült

'1004' futásidejű hiba:

Alkalmazás vagy objektum által definiált hiba

A látott pontos hibaüzenet néhány esetben kissé eltérhet, bár a hibakód ugyanaz marad. Függetlenül attól, hogy a probléma melyik verzióját tapasztalja, ez szinte mindig egy makrót futtat az Excelben, amelyet úgy terveztek, hogy munkalapokat másoljon, majd a másolatokat ugyanabba a munkafüzetbe helyezze, mint az eredeti munkalapot.

A legrosszabb technikai problémákkal ellentétben a Microsoft Excel 1004-es futási idejű hibájának oka ismert. A 1004-es futásidejű hiba akkor fordul elő, amikor az Ön által futtatott makró az eredeti munkalapot átmásolja egy olyan munkafüzetbe, amelynek egy meghatározott neve van, amelyet nem mentett el és bezárt a makró futtatása előtt. Ilyen makróra példa látható a következő kódban:

Sub CopySheetTest() Dim iTemp As Integer Dim oBook As Workbook Dim iCounter As Integer ' Create a new blank workbook: iTemp = Application.SheetsInNewWorkbook Application.SheetsInNewWorkbook = 1 Set oBook = Application.Workbooks.Add Application.SheetsInNewWorkbook = iTemp ' Add a defined name to the workbook ' that RefersTo a range: oBook.Names.Add Name:="tempRange", _ RefersTo:="=Sheet1!$A$1" ' Save the workbook: oBook.SaveAs "c:\test2.xls" ' Copy the sheet in a loop. Eventually, ' you get error 1004: Copy Method of ' Worksheet class failed. For iCounter = 1 To 275 oBook.Worksheets(1).Copy After:=oBook.Worksheets(1) Next End Sub

Mivel a 1004 futásidejű hiba oka a Microsoft Excel kontextusában ismert, valamint a felbontás is. A probléma megoldása mellett az érintett felhasználók számára is elérhető megoldás egy olyan megoldás, amelyet akkor lehet használni, ha a megoldás nem működik, vagy nem találják a megoldást életképes lehetőségnek.

A megoldás:

A probléma megoldása az, hogy egyszerűen szerkeszti a futtatott makró kódját, hogy rendszeresen elmentse és bezárja a cél munkafüzetet, miközben másolja a munkalapot. Az ezt végrehajtó makró kódja a következőképpen néz ki:

Sub CopySheetTest() Dim iTemp As Integer Dim oBook As Workbook Dim iCounter As Integer ' Create a new blank workbook: iTemp = Application.SheetsInNewWorkbook Application.SheetsInNewWorkbook = 1 Set oBook = Application.Workbooks.Add Application.SheetsInNewWorkbook = iTemp ' Add a defined name to the workbook ' that RefersTo a range: oBook.Names.Add Name:="tempRange", _ RefersTo:="=Sheet1!$A$1" ' Save the workbook: oBook.SaveAs "c:\test2.xls" ' Copy the sheet in a loop. Eventually, ' you get error 1004: Copy Method of ' Worksheet class failed. For iCounter = 1 To 275 oBook.Worksheets(1).Copy After:=oBook.Worksheets(1) 'Uncomment this code for the workaround: 'Save, close, and reopen after every 100 iterations: If iCounter Mod 100 = 0 Then oBook.Close SaveChanges:=True Set oBook = Nothing Set oBook = Application.Workbooks.Open("c:\test2.xls") End If Next End Sub

Megjegyzés: A munkalap másolásának pontos száma, mielőtt mentené és bezárná azt a munkafüzetet, amelybe a másolatokat menteni kell, esetenként változik, mivel az a másolandó munkalap méretétől függ.

A megoldás:

Amint azt korábban említettük, ennek a problémának a megoldása is létezik. A probléma megoldása egyszerű feladat egy új munkalap beszúrása egy sablonból a meglévő munkalap másolatának létrehozása helyett. Ha meg akarja oldani ezt a problémát, a következőket kell tennie:

  1. Indítsa el az  Excel programot .
  2. Hozzon létre egy új munkafüzetet, és  törölje  minden egyes munkalapot, amelyet a munkafüzet tartalmaz.
  3. Formázza  a munkafüzetet.
  4. Adjon hozzá minden olyan szöveget, adatot és / vagy diagramot, amelyet alapértelmezés szerint a sablonba szeretne venni, az egyetlen munkalapra, amelyet a munkafüzet most tartalmaz.
  5. Ha Excel 2003 vagy korábbi verziót használ, kattintson a Fájl Mentés másként gombra  . Ha viszont az Excel 2007 vagy újabb verziót használja, kattintson a  Microsoft Office  gombra, majd a Mentés másként gombra  .
  6. Fájlnév : mezőbe írja be bárhová a sablont.
  7. Nyissa meg a Mentés típusként: mező mellett található legördülő menüt,  és kattintson az Excel  sablon (.xlt) elemre,  ha Excel 2003 vagy korábbi verziót használ, vagy az  Excel  sablont (.xltx), ha az Excel 2007 vagy újabb verzióját használja annak kiválasztására.
  8. Kattintson a Mentés gombra  .
  9. Miután sikeresen létrehozta a sablont, programszerűen beillesztheti a következő kódsor használatával:

    Sheets.Add Type: = elérési út \ fájlnév

Megjegyzés: A fent leírt kódsorban a \ fájlnév elérési útját le  kell cserélni a teljes elérési útra (beleértve a teljes fájlnevet is) az imént létrehozott lapsablon helyére.