ข้อผิดพลาดรันไทม์ 1004 คือรหัสข้อผิดพลาดที่เกี่ยวข้องกับ Microsoft Visual Basic ที่ทราบว่ามีผลกระทบต่อผู้ใช้ Microsoft Excel ข้อผิดพลาดดังกล่าวเป็นที่ทราบกันดีอยู่แล้วว่าพบบ่อยที่สุดใน Excel 2003 และ Excel 2007 แม้ว่าโปรแกรมเวิร์กชีตยอดนิยมของ Microsoft สำหรับคอมพิวเตอร์จะไม่ปลอดภัยจากภัยคุกคามที่เป็นข้อผิดพลาดรันไทม์ 1004 ในกรณีส่วนใหญ่ ผู้ใช้ที่ได้รับผลกระทบจากปัญหานี้จะดูข้อใดข้อหนึ่ง ข้อผิดพลาดรันไทม์ 1004 สองรูปแบบที่แตกต่างกัน โดยสรุปแล้ว ข้อผิดพลาดรันไทม์ 1004 สองรูปแบบอ่านว่า:
“ข้อผิดพลาดรันไทม์ '1004':
วิธีการคัดลอกเวิร์กชีตคลาสล้มเหลว ”
“ข้อผิดพลาดรันไทม์ '1004':
ข้อผิดพลาดที่กำหนดโดยแอปพลิเคชันหรือกำหนดวัตถุ ”
ข้อความแสดงข้อผิดพลาดที่คุณเห็นอาจแตกต่างกันเล็กน้อย ในบางกรณี แม้ว่ารหัสข้อผิดพลาดจะยังคงเหมือนเดิม อย่างไรก็ตาม ไม่ว่าคุณจะพบปัญหาเวอร์ชันใด แต่ก็มักเกิดขึ้นขณะเรียกใช้แมโครใน Excel ที่ออกแบบมาเพื่อคัดลอกเวิร์กชีต แล้ววางสำเนาลงในเวิร์กบุ๊กเดียวกันกับเวิร์กชีตต้นฉบับ
ต่างจากปัญหาด้านเทคโนโลยีที่เลวร้ายที่สุด สาเหตุของข้อผิดพลาดรันไทม์ 1004 ภายใน Microsoft Excel นั้นเป็นที่รู้จัก ข้อผิดพลาดรันไทม์ 1004 เกิดขึ้นเมื่อแมโครที่คุณกำลังเรียกใช้กำลังคัดลอกเวิร์กชีตต้นฉบับไปยังเวิร์กบุ๊กที่มีชื่อที่กำหนดไว้ซึ่งคุณไม่ได้บันทึกและปิดก่อนที่คุณจะเรียกใช้แมโคร ตัวอย่างของมาโครดังกล่าวสามารถเห็นได้ในโค้ดต่อไปนี้:
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
เนื่องจากทราบสาเหตุของข้อผิดพลาดรันไทม์ 1004 ในบริบทของ Microsoft Excel เช่นเดียวกับวิธีแก้ไข นอกจากวิธีแก้ปัญหานี้แล้ว สิ่งที่มีให้สำหรับผู้ใช้ที่ได้รับผลกระทบจากปัญหานี้คือวิธีแก้ปัญหาชั่วคราวที่สามารถใช้ได้ในกรณีที่วิธีแก้ปัญหาไม่ได้ผล หรือพวกเขาไม่พบวิธีแก้ไขที่เป็นตัวเลือกที่ใช้งานได้
วิธีแก้ปัญหา:
วิธีแก้ปัญหาเฉพาะนี้คือการแก้ไขโค้ดของมาโครที่คุณกำลังเรียกใช้เพื่อให้บันทึกและปิดเวิร์กบุ๊กเป้าหมายเป็นระยะในขณะที่ทำสำเนาของเวิร์กชีต โค้ดสำหรับมาโครที่ทำสิ่งนี้จะมีลักษณะดังนี้:
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
หมายเหตุ: จำนวนครั้งที่แน่นอนที่คุณสามารถคัดลอกเวิร์กชีตได้ ก่อนที่คุณจะต้องบันทึกและปิดเวิร์กบุ๊กที่สำเนาจะถูกบันทึกแตกต่างกันไปในแต่ละกรณี ขึ้นอยู่กับขนาดของเวิร์กชีตที่คุณกำลังทำสำเนาพี>
วิธีแก้ปัญหา:
ตามที่ระบุไว้ก่อนหน้านี้ มีวิธีแก้ไขปัญหาเฉพาะนี้ด้วย การแก้ไขปัญหานี้เป็นเรื่องง่ายๆ ในการแทรกเวิร์กชีตใหม่จากเทมเพลต แทนที่จะสร้างสำเนาของเวิร์กชีตที่มีอยู่ หากคุณต้องการแก้ไขปัญหานี้ สิ่งที่คุณต้องทำมีดังนี้:
- เปิดตัว Excel .
- สร้างสมุดงานใหม่และ ลบ แผ่นงานทุกแผ่นในสมุดงานมีบันทึกสำหรับหนึ่งแผ่น
- รูปแบบ สมุดงาน
- เพิ่มข้อความ ข้อมูล และ/หรือแผนภูมิใดๆ ที่คุณต้องการให้มีในเทมเพลตโดยค่าเริ่มต้นเป็นเวิร์กชีตเดียวที่เวิร์กบุ๊กมีอยู่ในขณะนี้
- หากคุณใช้ Excel 2003 หรือเก่ากว่า ให้คลิกที่ ไฟล์ > บันทึกเป็น . หากคุณกำลังใช้ Excel 2007 หรือใหม่กว่า ให้คลิกที่ Microsoft Office จากนั้นคลิก บันทึกเป็น .
- ใน ชื่อไฟล์ : ให้พิมพ์อะไรก็ได้ที่คุณต้องการให้เรียกเทมเพลต
- เปิดเมนูแบบเลื่อนลงถัดจาก บันทึกเป็นประเภท: และคลิกที่ Excel เทมเพลต (.xlt) หากคุณใช้ Excel 2003 หรือเก่ากว่า หรือ Excel เทมเพลต (.xltx) หากคุณใช้ Excel 2007 หรือใหม่กว่าเพื่อเลือก
- คลิก บันทึก .
- เมื่อคุณสร้างเทมเพลตสำเร็จแล้ว คุณสามารถแทรกเทมเพลตโดยทางโปรแกรมได้โดยใช้โค้ดบรรทัดต่อไปนี้:
Sheets.Add Type:=path
แข็งแกร่ง> \ชื่อไฟล์
หมายเหตุ: ในบรรทัดของโค้ดที่อธิบายข้างต้น path\filename ต้องแทนที่ด้วยเส้นทางแบบเต็ม (รวมถึงชื่อไฟล์ทั้งหมด) สำหรับตำแหน่งของเทมเพลตชีตที่คุณเพิ่งสร้างขึ้น