Thuộc tính Resize và lỗi 438

Liên hệ QC

Đình Phán

Thành viên thường trực
Tham gia
23/11/10
Bài viết
232
Được thích
68
Giới tính
Nam
Nghề nghiệp
kt
Chào các anh

Em hiện đang bị vướng lỗi Run time 438 mà không biết cách xử lý như thế nào. Cụ thể

Ở file test (trên cùng 1 Workbook) thì code này chạy mượt

Mã:
Sub test2()
Dim so_thang As Integer
so_thang = 3
'ThisWorkbook.Sheets("Sheet1").Range([I2], [I10]).Resize(0, 3).Copy
ThisWorkbook.Sheets("Sheet1").Range([I2], [I10]).Resize(, so_thang).Copy
ThisWorkbook.Sheets("Sheet1").Range("Q2").PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks:=False, Transpose:=False
End Sub

Tuy nhiên, cũng với giải pháp như trên, em copy từ sheet khác vào sheet hiện thành thì báo lỗi 438
ở dòng .Sheet_chon.Range([DU122], [DU498]).Resize(0, So_thang).Copy
Mã:
Private Sub CommandButton2_Click()
    Dim Duong_dan As String, Ten_file As String
    Dim File_goc As Workbook
    Dim S_filename As Variant
    Dim File_chon As Workbook
    Dim Sheet_chon As Worksheet
    Dim Thi_truong As Variant
    Dim ThongBao As VbMsgBoxResult
    Dim Loai_so_lieu As Variant
    Dim Thang_dau As Integer
    Dim Thang_cuoi As Integer
    Dim So_thang As Integer
      
  
    Application.ScreenUpdating = False
    Application.DisplayAlerts = False
    Application.CutCopyMode = False
  
    Set File_goc = ActiveWorkbook
    Thang_dau = ComboBox1.Value
    Thang_cuoi = ComboBox2.Value
    So_thang = Thang_cuoi - Thang_dau + 1
  
    'Gan ma dich den cua thi truong can dien du lieu
    If OptionButton1.Value Then Thi_truong = 1
    If OptionButton2.Value Then Thi_truong = 2
    If OptionButton3.Value Then Thi_truong = 3
    If OptionButton4.Value Then Thi_truong = 4
    If OptionButton5.Value Then Thi_truong = 5
    If OptionButton6.Value Then Thi_truong = 6
    If OptionButton7.Value Then Thi_truong = 7
    If OptionButton8.Value Then Thi_truong = 8
    If OptionButton9.Value Then Thi_truong = 9
    If OptionButton10.Value Then Thi_truong = 10
    If OptionButton26.Value Then Thi_truong = 11
  
    'Kiem tra dieu kien, gan ky du lieu can copy
    If Thang_cuoi < Thang_dau Then
        MsgBox "Ban chon Form Month va To Month sai logic!"
        Exit Sub
    End If

    'Gan vung du lieu can lay la Ke hoach hay Thuc hien
    If OptionButton24.Value Then Loai_so_lieu = 1
    If OptionButton25.Value Then Loai_so_lieu = 2
              
    'Chon File can
    Duong_dan = Application.GetOpenFilename( _
    FileFilter:="Microsoft Excel Workbooks, *.xls; *.xlsb; *.xlsm; *.xlsx", Title:="Open Workbook")
    If Duong_dan = "False" Then
        MsgBox "No File Selected!"
        Exit Sub
    Else
        S_filename = Split(Duong_dan, "\")
        Ten_file = S_filename(UBound(S_filename))
        Application.Workbooks.Open Filename:=Duong_dan
        
        Set File_chon = Workbooks(Ten_file)
        With File_chon
            If Ton_tai_sheet("DLG-BD") Then
                Set Sheet_chon = .Sheets("DLG-BD")
                'Dieu khien loai du lieu la Ke hoach
                If Loai_so_lieu = 1 Then
                    'Dieu khien ky lay du lieu
                    Select Case Thang_dau
                       Case 1
                         .Sheet_chon.Range([DU122], [DU498]).Resize(0, So_thang).Copy
                    'Dieu khien tinh huong chon du lieu cua tung thi truong
                                Select Case Thi_truong
                                    Case 1
                                        File_goc.Sheets("TONG HOP - BD").Range("C121").PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks:=False, Transpose:=False
                                    Case 2
                                        File_goc.Sheets("TONG HOP - BD").Range("Q121").PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks:=False, Transpose:=False
                                    Case 3
                                        File_goc.Sheets("TONG HOP - BD").Range("AE121").PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks:=False, Transpose:=False
                                    Case 4
                                        File_goc.Sheets("TONG HOP - BD").Range("AS121").PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks:=False, Transpose:=False
                                    Case 5
                                        File_goc.Sheets("TONG HOP - BD").Range("BG121").PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks:=False, Transpose:=False
                                    Case 6
                                        File_goc.Sheets("TONG HOP - BD").Range("BU121").PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks:=False, Transpose:=False
                                    Case 7
                                        File_goc.Sheets("TONG HOP - BD").Range("CI121").PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks:=False, Transpose:=False
                                    Case 8
                                        File_goc.Sheets("TONG HOP - BD").Range("CW121").PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks:=False, Transpose:=False
                                    Case 9
                                        File_goc.Sheets("TONG HOP - BD").Range("DK121").PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks:=False, Transpose:=False
                                    Case 10
                                        File_goc.Sheets("TONG HOP - BD").Range("DY121").PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks:=False, Transpose:=False
                                    Case 11
                                        File_goc.Sheets("TONG HOP - BD").Range("EM121").PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks:=False, Transpose:=False
                                End Select
Mong các anh giúp đỡ.
Em cảm ơn!
 

Chào anh Befaint,
Theo như hướng dẫn của anh thì trường hợp của em rơi vào tình huống 1 (không nhập RowSize)
Đồng thời biến So_thang của em luôn >=1 ạ.
So_thang = Thang_cuoi - Thang_dau + 1
Em loay hoay mãi chưa tìm ra nguyên nhân.

Đồng thời xem xét đến thông báo lỗi Runtime 438 em đã đổi tên tất cả các biến để tránh bị trùng với mặc định của VBA nhưng vẫn không được.
Mong anh giúp đỡ.
 
Lần chỉnh sửa cuối:
Upvote 0
Chào anh Befaint,
Theo như hướng dẫn của anh thì trường hợp của em rơi vào tình huống 1 (không nhập RowSize)
Đồng thời biến So_thang của em luôn >=1 ạ.
So_thang = Thang_cuoi - Thang_dau + 1
Em loay hoay mãi chưa tìm ra nguyên nhân.

Đồng thời xem xét đến thông báo lỗi Runtime 438 em đã đổi tên tất cả các biến để tránh bị trùng với mặc định của VBA nhưng vẫn không được.
Mong anh giúp đỡ.
Như bạn Befaint gợi ý, bạn thử chỉnh lại bỏ số 0
.Sheet_chon.Range([DU122], [DU498]).Resize(, So_thang).Copy
 
Upvote 0
Như bạn Befaint gợi ý, bạn thử chỉnh lại bỏ số 0
.Sheet_chon.Range([DU122], [DU498]).Resize(, So_thang).Copy

Hi anh HieuCD,

Em thử rồi vẫn không được ạ. Ngoài ra như ở bài #1 thì nếu trong cùng 1 Sheet thì code hoạt động bình thường ạ.
Mã:
Sub test2()
Dim so_thang As Integer
so_thang = 3
'ThisWorkbook.Sheets("Sheet1").Range([I2], [I10]).Resize(0, 3).Copy
ThisWorkbook.Sheets("Sheet1").Range([I2], [I10]).Resize(, so_thang).Copy
ThisWorkbook.Sheets("Sheet1").Range("Q2").PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks:=False, Transpose:=False
End Sub
 
Upvote 0
Hi anh HieuCD,

Em thử rồi vẫn không được ạ. Ngoài ra như ở bài #1 thì nếu trong cùng 1 Sheet thì code hoạt động bình thường ạ.
Mã:
Sub test2()
Dim so_thang As Integer
so_thang = 3
'ThisWorkbook.Sheets("Sheet1").Range([I2], [I10]).Resize(0, 3).Copy
ThisWorkbook.Sheets("Sheet1").Range([I2], [I10]).Resize(, so_thang).Copy
ThisWorkbook.Sheets("Sheet1").Range("Q2").PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks:=False, Transpose:=False
End Sub
Chỉnh lại Range
Mã:
Sub test2()
Dim so_thang As Integer
so_thang = 3
ThisWorkbook.Sheets("Sheet1").Range("I2:I10").Resize(, so_thang).Copy
ThisWorkbook.Sheets("Sheet1").Range("Q2").PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks:=False, Transpose:=False
End Sub
 
Upvote 0
Chỉnh lại Range
Mã:
Sub test2()
Dim so_thang As Integer
so_thang = 3
ThisWorkbook.Sheets("Sheet1").Range("I2:I10").Resize(, so_thang).Copy
ThisWorkbook.Sheets("Sheet1").Range("Q2").PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks:=False, Transpose:=False
End Sub

Ở cùng 1 sheet thì em làm bằng cách trên hay cách của anh thì đều được anh ạ.
Vướng là em copy ở Sheet khác thì bị lỗi 438 :(
 
Upvote 0
Ở cùng 1 sheet thì em làm bằng cách trên hay cách của anh thì đều được anh ạ.
Vướng là em copy ở Sheet khác thì bị lỗi 438 :(
bạn có thể dùng cách khác
Mã:
Sub test2()
Dim so_thang As Integer
so_thang = 3
Sheets("Sheet1").Range("I2", "I10").Resize(, so_thang).Copy
Sheets("Sheet1").Range("Q2").PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks:=False, Transpose:=False
End Sub
Sub test3()
Dim so_thang As Integer
so_thang = 3
Sheets("Sheet1").Range("Q2").Resize(10 - 2 + 1, so_thang) = Sheets("Sheet1").Range("I2", "I10").Resize(, so_thang).Value
End Sub
 
Upvote 0
Sheet_Khac.Select
rồi mới .PasteSpecial ...
Vẫn không được anh ạ. Các anh xem giúp em đoạn code 2 ở bài #1. Còn đoạn code 1 thì em làm nhiều cách đều được.
Riêng code 2 cũng theo phương pháp đó thì không được mà báo lỗi Run-time 438 :(
 
Upvote 0
Chỉnh lại lệnh
Mã:
Sheet_chon.Range("DU122", "DU498").Resize(, So_thang).Copy
tương tự cho các lệnh khác
Lưu ý: không nên đặt tên sheet bằng ti61ng Việt có dấu : DLG-BĐ -> DLG-BD
Em không rõ là anh đã test chưa. Chứ em sửa lại vẫn báo lỗi như cũ ạ.
 
Upvote 0

1/ Gán giá trị mặc định cho các ComboBox và OptionButton khi mở Form lên.

2/ Set File_goc = ThisWorkbook

3/

File_chon.Sheet_chon
Bỏ luôn và ngay File_chon.
4/
Trước khi paste thì phải có:
File_goc.Activate
Sheets("TONG HOP - BD").Activate
 
Upvote 0
Thành thật cảm ơn 2 anh HieuCD và anh Befaint.
Em loay hoay cả ngày qua không ra, nay 2 anh hướng dẫn em đã làm được rồi ạ :)
 
Upvote 0
Thành thật cảm ơn 2 anh HieuCD và anh Befaint.
Em loay hoay cả ngày qua không ra, nay 2 anh hướng dẫn em đã làm được rồi ạ :)
Bài nầy dùng Select Case làm cho code rất dài và dể sai sót, bạn nên tạo 1 mảng lưu các địa chỉ sao đó gọi mảng để lấy địa chỉ thì code sẽ rất ngắn
 
Upvote 0
Bài nầy dùng Select Case làm cho code rất dài và dể sai sót, bạn nên tạo 1 mảng lưu các địa chỉ sao đó gọi mảng để lấy địa chỉ thì code sẽ rất ngắn
Anh có thể hướng dẫn sơ bộ giúp em được không ạ. Dùng mảng sẽ nhanh hơn rất nhiều.
Với code này sử dụng ở máy của em (Office 2010) thì chạy bình thường, đảm bảo được yêu cầu. Tuy nhiên khi chuyển giao cho người khác sử dụng (Office 2013) thì chạy rất chậm.
Em cũng muốn tối ưu mà về mảng em mới chỉ làm được cái bài cơ bản thôi.
Cảm ơn anh.
 
Upvote 0
Anh có thể hướng dẫn sơ bộ giúp em được không ạ. Dùng mảng sẽ nhanh hơn rất nhiều.
Với code này sử dụng ở máy của em (Office 2010) thì chạy bình thường, đảm bảo được yêu cầu. Tuy nhiên khi chuyển giao cho người khác sử dụng (Office 2013) thì chạy rất chậm.
Em cũng muốn tối ưu mà về mảng em mới chỉ làm được cái bài cơ bản thôi.
Cảm ơn anh.
Bạn kiểm tra file
 

File đính kèm

  • FILE TONG HOP - Ver 1.3.xlsb
    142.5 KB · Đọc: 3
Upvote 0
Web KT
Back
Top Bottom