Nhờ sửa lỗi đoạn code!

Liên hệ QC

MinhCong

Thành viên gắn bó
Tham gia
28/5/09
Bài viết
1,645
Được thích
1,806
Nghề nghiệp
Xây dựng Cầu đường
Không biết đoạn code sau bị thiếu cái gì mà bị lỗi, nhờ anh chị sửa giúp Tôi với!
Mã:
Sub NT_Congviec()
Dim i, j, k, n As Long
  For i = Sheets("Menu").Range("BDCV").Row To Sheets("Menu").Range("KTCV").Row Step 8
      j = i + 2: k = i + 7: n = Sheets("Menu").Range("C" & i).Value
       With Sheets("Menu")
           If n = 0 Then
              .Rows(i & ":" & k).Hidden = True
           ElseIf n > 1 Then
              .Rows(i & ":" & k).Hidden = False
              .Range("D" & j & ":IV65536").Clear
              [COLOR=Blue].Range("C" & j & ":C" & k).Copy .Offset(, 1).Resize(, n - 1)[/COLOR]
           End If
       End With
       With Sheets(Range("A" & j).Text)
           If n = 0 Then
              .Visible = False
           ElseIf n > 1 Then
              .Visible = True
              .Range("51:65536").Delete
              [COLOR=Black].Range("1:50").Copy .Offset(50).Resize((n - 1) * 50)[/COLOR]
           End If
       End With
  Next
End Sub
Bị lỗi ở dòng Tôi quét màu xanh ấy.
 
Không biết đoạn code sau bị thiếu cái gì mà bị lỗi, nhờ anh chị sửa giúp Tôi với!
Mã:
Sub NT_Congviec()
Dim i, j, k, n As Long
  For i = Sheets("Menu").Range("BDCV").Row To Sheets("Menu").Range("KTCV").Row Step 8
      j = i + 2: k = i + 7: n = Sheets("Menu").Range("C" & i).Value
       With Sheets("Menu")
           If n = 0 Then
              .Rows(i & ":" & k).Hidden = True
           ElseIf n > 1 Then
              .Rows(i & ":" & k).Hidden = False
              .Range("D" & j & ":IV65536").Clear
              [COLOR=Blue].Range("C" & j & ":C" & k).Copy .Offset(, 1).Resize(, n - 1)[/COLOR]
           End If
       End With
       With Sheets(Range("A" & j).Text)
           If n = 0 Then
              .Visible = False
           ElseIf n > 1 Then
              .Visible = True
              .Range("51:65536").Delete
              [COLOR=Black].Range("1:50").Copy .Offset(50).Resize((n - 1) * 50)[/COLOR]
           End If
       End With
  Next
End Sub
Bị lỗi ở dòng Tôi quét màu xanh ấy.
- Không có file nên cũng chẳng biết phải test thế nào
- Code chưa chắc đã tối ưu! Vậy sao bạn không miêu tả yêu cầu để mọi người làm 1 code khác (biết đâu sẽ hay hơn)
 
Upvote 0
- Không có file nên cũng chẳng biết phải test thế nào
- Code chưa chắc đã tối ưu! Vậy sao bạn không miêu tả yêu cầu để mọi người làm 1 code khác (biết đâu sẽ hay hơn)
Anh xem tại sheet Menu, Em bấm nút cập nhật số biên bản nghiệm thu công việc thì bị lỗi trên, nhờ Anh xem và sửa giúp nhé!
 

File đính kèm

Upvote 0
Anh xem tại sheet Menu, Em bấm nút cập nhật số biên bản nghiệm thu công việc thì bị lỗi trên, nhờ Anh xem và sửa giúp nhé!
Bạn để ý đoạn này nhé:
Mã:
With Sheets("Menu")
  If n = 0 Then
    Rows(i & ":" & k).Hidden = True
  ElseIf n > 1 Then
    Rows(i & ":" & k).Hidden = False
    Range("D" & j & ":IV65536").Clear
   .Range("C" & j & ":C" & k).Copy [COLOR=Red][B].Offset(, 1).Resize(, n - 1)[/B][/COLOR]
  End If
End With
Chổ tôi tô đỏ ấy ---> Ở trên là With Sheets("Menu"), ở dưới thì .Offset(...) thì có nghĩa là cái gì đây? ---> Offset thì phải là Office 1 Range nào đó chứ... Offset của Sheet, chẳng có ý nghĩa gì
Thế nên nó phải báo lỗi:
Object doesn't support this property or method
 
Upvote 0
Báo lỗi do không tìm ra địa chỉ mà nó fải chép đến

Mã:
     [COLOR="red"]  [B]With Sheets("Menu")[/B]    [/COLOR]   
     If n = 0 Then
              .Rows(i & ":" & k).Hidden = True
           ElseIf n > 1 Then
              .Rows(i & ":" & k).Hidden = False
              .Range("D" & j & ":IV65536").Clear
              .Range("C" & j & ":C" & k).Copy [COLOR="red"][B].Offset(, 1).Resize(, n - 1)[/B] [/COLOR]    
      End If
   End With


Nếu dòng trên cùng là
PHP:
With Sheets("Menu").Range("GPE")

thì OK ngay tấp lự!
 
Lần chỉnh sửa cuối:
Upvote 0
Nhờ các Anh, Chị sửa lỗi giúp sau đoạn code sau bị lỗi gì?
Mã:
Sub NT_Xaylap()
Dim i, j, k, n As Long
  n = Range("BDXL").Value: i = Range("BDXL").Row
  j = i + 2: k = i + 9
  m = WorksheetFunction.Max(Range(j & ":" & j))
    With Range("C" & j & ":C" & k)
       If n > 1 And n > m Then .Copy .Offset(, m).Resize(, n - m)
       [COLOR=Blue]ElseIf n > 1 And n < m Then[/COLOR]
         Range(Range("C" & j).Offset(, n) & ":IV" & k).Clear
       End If
    End With
End Sub
Trong file đính kèm có ghi nội dung yêu cầu.
 

File đính kèm

Upvote 0
Mình không có file test nên chỉ phỏng đoán thôi. Trong lệnh copy thì vùng đích thì chỉ cần ô đầy tiên của vùng đích là đủ. Bạn thử sửa lại như dưới xem sao

.Range("C" & j & ":C" & k).Copy .Cells(j,4)
 
Upvote 0
Đoạn If trên bạn phải xuống dòng đoạn màu đỏ

If n > 1 And n > m Then .Copy .Offset(, m).Resize(, n - m)

Thành
If n > 1 And n > m Then
.Copy .Offset(, m).Resize(, n - m)
 
Upvote 0
Bạn khai nhiều biến thừa quá, mình nhìn code hiệu chỉnh không biết đúng ý đồ chưa bạn tham khảo nha

Mã:
Sub NT_Xaylap()
Dim j, n As Long
  n = Range("BDXL").Value
  j = Range("BDXL").Row + 2
  m = WorksheetFunction.Max(Range(j & ":" & j))
    With Cells(j, 3).Resize(7)
       If n > 1 And n > m Then
       .Copy Cells(j, m)
       ElseIf n > 1 And n < m Then
       Cells(j, 3).Resize(7).ClearContents
       End If
    End With
End Sub
 
Upvote 0
Bạn khai nhiều biến thừa quá, mình nhìn code hiệu chỉnh không biết đúng ý đồ chưa bạn tham khảo nha

Mã:
Sub NT_Xaylap()
Dim j, n As Long
  n = Range("BDXL").Value
  j = Range("BDXL").Row + 2
  m = WorksheetFunction.Max(Range(j & ":" & j))
    With Cells(j, 3).Resize(8)
       If n > 1 And n > m Then
       .Copy .Offset(, m).Resize(, n - m)
       [COLOR=Blue]ElseIf n > 1 And n < m Then
       Cells(j, 3).Resize(8).ClearContents[/COLOR]
       End If
    End With
End Sub
Để Em nói rõ cho Anh nhé, Như trong file Em gỏi ở trên (Bài #6) Do lúc đầu ta cập nhật thì số lượng biên bản là 3 (có thể nhiều hơn 3), nhưng sau khi chỉnh sửa lại nó chỉ còn có 2 biên bản thôi (số 2 biên bản thể hiện ở ô C24)
Vì vậy ta cần phải xóa bớt 1 (hoặc nhiều hơn 1) biên bản ở vùng cuối cùng (Tức từ E26:IV33).
VD1: n=2 nhưng m=max(26:26)=3 => Phải xóa bớt m-n=3-2=1 (vùng dữ liệu cuối là E26:E33)
VD2: n=2 nhưng m=max(26:26)=5 => Phải xóa bớt m-n=5-2=3 (vùng dữ liệu từ E26:G33)
....
 
Upvote 0
Để Em nói rõ cho Anh nhé, Như trong file Em gỏi ở trên (Bài #6) Do lúc đầu ta cập nhật thì số lượng biên bản là 3 (có thể nhiều hơn 3), nhưng sau khi chỉnh sửa lại nó chỉ còn có 2 biên bản thôi (số 2 biên bản thể hiện ở ô C24)
Vì vậy ta cần phải xóa bớt 1 (hoặc nhiều hơn 1) biên bản ở vùng cuối cùng (Tức từ E26:IV33).
VD1: n=2 nhưng m=max(26:26)=3 => Phải xóa bớt m-n=3-2=1 (vùng dữ liệu cuối là E26:E33)
VD2: n=2 nhưng m=max(26:26)=5 => Phải xóa bớt m-n=5-2=3 (vùng dữ liệu từ E26:G33)
....
Chóng mặt quá, Minhcong thử thế này xem coi đúng ý chưa chứ mình cũng chưa chắc nữa
Mã:
Sub NT_Xaylap()
Dim i, j, k, n As Long
  n = Range("BDXL").Value: i = Range("BDXL").Row
  j = i + 2: k = i + 9
  m = WorksheetFunction.Max(Range(j & ":" & j))
    With Range("C" & j & ":C" & k)
       If n > 1 And n > m Then .Copy .Offset(, m).Resize(, n - m)
       If n > 1 And n < m Then .Offset(, n).Resize(, m - n).Clear
    End With
End Sub
 
Upvote 0
Chóng mặt quá, Minhcong thử thế này xem coi đúng ý chưa chứ mình cũng chưa chắc nữa
Mã:
Sub NT_Xaylap()
Dim i, j, k, n As Long
  n = Range("BDXL").Value: i = Range("BDXL").Row
  j = i + 2: k = i + 9
  m = WorksheetFunction.Max(Range(j & ":" & j))
    With Range("C" & j & ":C" & k)
       If n > 1 And n > m Then .Copy .Offset(, m).Resize(, n - m)
       If n > 1 And n < m Then .Offset(, n).Resize(, m - n).Clear
    End With
End Sub
Đúng ý Em rồi, 2 thằng IF cùng lúc cũng được dzị mà sao thằng ELSEIF không được nhỉ?
 
Upvote 0
Đúng ý Em rồi, 2 thằng IF cùng lúc cũng được dzị mà sao thằng ELSEIF không được nhỉ?
Minhcong hỏi......Thầy Sa í, mình cũng mò mẫn như Minhcong thôi mà
Mù mờ mình hiểu như thế này:
If "Cái gì đó" Then xuống hàng "làm gì đó" thì mới có "eo" để "làm cái gì khác nữa" mà không cần điều kiện (vì nó khác với điều kiện ban đầu rồi), xong việc phải End if
Còn If "Cái gì đó" Then "làm gì đó" xong là "Chấm dứt nghĩa tình" với thằng If
Còn With thì Minhcong đã chỉ định vùng rồi thì khi ra lệnh nó sẽ "làm diệc zí" vùng đó thôi mà, Minhcong chi cần Offset xong Resize rồi tiêu diệt nó là được
Híc, "em" chột giải thích cho "em" chột hơn một tí tẹo.
Ngộ (cao thủ Vba nào mà cười là hở mười cái răng)
 
Upvote 0
Minhcong hỏi......Thầy Sa í, mình cũng mò mẫn như Minhcong thôi mà
Mù mờ mình hiểu như thế này:
If "Cái gì đó" Then xuống hàng "làm gì đó" thì mới có "eo" để "làm cái gì khác nữa" mà không cần điều kiện (vì nó khác với điều kiện ban đầu rồi), xong việc phải End if
Còn If "Cái gì đó" Then "làm gì đó" xong là "Chấm dứt nghĩa tình" với thằng If
Còn With thì Minhcong đã chỉ định vùng rồi thì khi ra lệnh nó sẽ "làm diệc zí" vùng đó thôi mà, Minhcong chi cần Offset xong Resize rồi tiêu diệt nó là được
Híc, "em" chột giải thích cho "em" chột hơn một tí tẹo.
Ngộ (cao thủ Vba nào mà cười là hở mười cái răng)
Chắc đúng rồi í anh à. Em xem lại bài của thầy SA và thầy PhanTuHuong thấy như thế này:
If <điều kiện1> Then
<Khối lệnh 1 thực hiện>
[ElseIf <điều kiện2>
<Khối lệnh 2 thực hiện>]
[ElseIf <điều kiện3>
<Khối lệnh 3 thực hiện>]
[Else
<Khối lệnh 4 thực hiện>]
End If
Thanks Anh nhé!
 
Upvote 0
Web KT

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

Back
Top Bottom