Xin hỏi về lỗi 1004: Select method of Range class failed

Liên hệ QC

ThangAcc

Thành viên hoạt động
Tham gia
27/11/06
Bài viết
137
Được thích
53
Tôi đang làm 1 file copy ngân sách ra báo cáo hàng tháng, tuy nhiên khi tạo 1 command button lệnh và đặt vào thuộc tính click đoạn chương trình và chạy thì bị lỗi như sau:

Err1004 2.jpg

Err1004 1.jpg

Tuy nhiên vẫn đoạn chương trình này mà tôi chạy bằng Macro (Record 1 cái macro rồi paste y chang vào) thì lại không bị lỗi gì cả, chạy chuẩn.

Đoạn code cụ thể như sau:
Private Sub CopyBudget_Click()
Dim sheet_name As String
Dim month As Integer
Dim month_num As String

month = InputBox("Please enter month number:", "Enter month")
Select Case month
Case 1
month_num = "H"
Case 2
month_num = "I"
Case 3
month_num = "J"
Case 4
month_num = "K"
Case 5
month_num = "L"
Case 6
month_num = "M"
Case 7
month_num = "N"
Case 8
month_num = "O"
Case 9
month_num = "P"
Case 10
month_num = "Q"
Case 11
month_num = "R"
Case 12
month_num = "S"
End Select

Dim i As Integer
For i = 1 To 13
Select Case i
Case 1
sheet_name = "FIN"
Case 2
sheet_name = "ASSLY."
Case 2
sheet_name = "PPC & stores"
Case 3
sheet_name = "PURCHASE & RQC"
Case 4
sheet_name = "PART Prod."
Case 5
sheet_name = "DIE CASTING"
Case 6
sheet_name = "MAINT"
Case 7
sheet_name = "OPERATIONS"
Case 8
sheet_name = "CPR"
Case 9
sheet_name = "Marketing"
Case 10
sheet_name = "HR & GA"
Case 11
sheet_name = "IT"
Case 12
sheet_name = "tool-room"
Case 13
sheet_name = "QA"
End Select
'Copy Personal Fixed cost
Windows("Budget2010.xlsx").Activate
Sheets(sheet_name).Range(month_num + "93:" + month_num + "105").Select
Selection.Copy
Windows("MIS.xls").Activate
Sheets(sheet_name).Select
Range("E92:E104").Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Range("F92:F105").Select
Selection.ClearContents
Range("E98:E104").Select
Selection.Copy
Range("E99").Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Range("E98").Select
Selection.ClearContents
Next i
End Sub

Các bác có thể giúp tôi tại sao lại như vậy không? (Tại sao chạy bằng lệnh click thì bị lỗi mà macro thì lại không bị?), sửa nó thế nào ạ?
 
Tôi đang làm 1 file copy ngân sách ra báo cáo hàng tháng, tuy nhiên khi tạo 1 command button lệnh và đặt vào thuộc tính click đoạn chương trình và chạy thì bị lỗi như sau:
Sai chổ này:
Sheets(sheet_name).Range(month_num + "93:" + month_num + "105").Select
Không có vụ vừa chọn sheet và Range cùng lúc đâu
Ít ra cũng phải
Sheets(sheet_name).Select
Range(month_num & "93:" & month_num & "105").Select

Nhưng mà... chẳng biết sheet_name là cái quái gì nữa
Ngoài ra, code này viết quá dài dòng! Tôi nghĩ có thể sửa lại chỉ còn 1 nữa là cùng ---> Có điều sửa lại cho gọn chắc hơi.. mệt à nha
 
Upvote 0
Sheet_name nằm ở chỗ này bác ạ
For i = 1 To 13
Select Case i
Case 1
sheet_name = "FIN"
Case 2
---


Em sửa 2 dòng như bác nói nó vẫn báo lỗi tương tự như vậy (Thực ra lúc đầu là để 2 dòng như thế, báo lỗi rồi em sửa lại kiểu kia).
Có điều khi em tạo macro thì nó chạy ok, nhưng em để vào commandbutton.click thì nó báo lỗi (không hiểu sao lại thế). Nên hiện tại em xử lý bằng cách dùng đoạn code kiểu này:

Command.click.jpg

Tức là em đặt khi ấn vào nút command button thì 1 đoạn marco sẽ chạy, như thế thì ok không lỗi gì hết (em thấy hơi lạ)

Code em viết có thể hơi dài dòng vì em vừa mới nghiên cứu cái này, đây là program đầu tiên em viết bằng VBA (Trước đây em biết sơ sơ về Visual Foxpro), tại ở cty mới người ta dùng excel để làm ngân sách và báo cáo hơi nhiều, program sẽ giúp giảm đi rất nhiều công việc lặp đi lặp lại hàng tháng. Mong các bác chỉ giáo thêm cho em. Cảm ơn các bác.
 
Upvote 0
Em làm 1 cái ví dụ thế này cho dễ hiểu ạ. Các bác có thể down về và xem file đính kèm.

Ở sheet1 em đặt 2 nút với câu lệnh giống hệt nhau, chỉ có điều ở nút Run Macro là em để 1 macro chạy, còn nút kia là em đặt các câu lệnh vào thuộc tính click. Cái nút 1 thì không báo lỗi, nút 2 thì báo cái lỗi này.

Các bác giúp em xem em sai ở đâu ạ, thank các bác
 

File đính kèm

Upvote 0
Giải thích:

Run Macro thì Macro2 nằm trong module, select sheet nào thì sheet đó sẽ được VBA hiểu là activesheet, ngầm định rằng range không ghi rõ sheet là range của activesheet. Nên có thể thao tác với range trong sheet đó mà không cần nêu tên sheet.

Command_Click, code đặt tại sheet1, VBA ngầm định rằng nếu không nêu tên sheeet, thì là range của sheet1, là nơi đặt code. Thế mà sheet2 đang được select, bạn lại muốn select 1 range ở sheet1, nên nó la làng.

Vậy, Code trong sheet phải ghi rõ tên sheet, nếu muốn thao tác với range không phải sheet chứa code.

Cụ thể là thay câu:

Mã:
    Sheets("Sheet2").Select
    Range("G8:I8").Select
Bằng

Mã:
    Sheets("Sheet2").Select
    Sheets("Sheet2").Range("G8:I8").Select

Hoặc

Mã:
    Sheets("Sheet2").Select
    ActiveSheet.Range("G8:I8").Select
 
Upvote 0
Em sửa được rồi các bác ạ, cảm ơn các bác.

Các bác giải thích thật dễ hiểu và rõ ràng
 
Upvote 0
Một kinh nghiệm của mình khi macro gặp lỗi tìm mãi không ra

Đó là đánh số các dòng lệnh; Sau đó dùng trong các đoạn mã lệnh hàm Erl() để biết được dòng nào mà kể từ đó trở về trước gây sai lỗ!


Những mong giúp được bạn í tưởng nào đó dù chỉ là nhỏ nhoi!
 
Lần chỉnh sửa cuối:
Upvote 0
Đó là đánh số các dòng lệnh; Sau đó dùng trong các đoạn mã lệnh hàm Erl() để biết được dòng nào mà kể từ đó trở về trước gây sai lỗ!


Những mong giúp được bạn í tưởng nào đó dù chỉ là nhỏ nhoi!
Hàm Erl() là gì vậy sư phụ?
 
Upvote 0
Các anh ơi em mới nhập môn khi viết thử code auto copy sheet to sheet báo lỗi Run Time 1004(Method paste of object_Worksheets fail) cac anh tư vấn giúp em với.

Cám ơn a!
reply_40b.png
 
Upvote 0
Các anh ơi em mới nhập môn khi viết thử code auto copy sheet to sheet báo lỗi Run Time 1004(Method paste of object_Worksheets fail) cac anh tư vấn giúp em với.

Cám ơn a!
reply_40b.png
PHP:
Sub copy()
Sheet1.Range("A1:C3").copy Destination:=Sheet2.Range("A2")
End Sub
Bạn lưu ý, phương thức copy, paste, phương thức copy đối tượng là range, còn paste đối tượng là worksheet (câu báo lỗi của bạn giống ý nghĩa câu này),
 
Upvote 0
Em đang rất cần mong các bác giúp đỡ!
em đặt ví trị commant button (Nhập dữ liệu) ở sheet1(DS) thì khi sửa dữ liệu vẫn được, nhưng khi chuyển commant button (Nhập dữ liệu) sang sheet2 thì bị lỗi.

223989

Em cám ơn!
 

File đính kèm

Upvote 0
Upvote 0
Web KT

Bài viết mới nhất

Back
Top Bottom