Giúp sửa mã code (2 người xem)

Liên hệ QC

Người dùng đang xem chủ đề này

Tôi tuân thủ nội quy khi đăng bài

Nguyễn Diêu Hiền

Thành viên mới
Tham gia
16/11/15
Bài viết
33
Được thích
0
Mình có file như đính kèm và đã có đoạn mã code, tuy nhiên đoạn mã code ẩn dòng có điều kiện cho địa chỉ Q24 của sheet PHIEU KET QUA THI NGHIEM chỉ chạy được khi đánh vào, còn khi nó là giá trị của công thức thì không thể chạy được. Anh/chị/em rành về mã code có thể sửa giúp mình với
Mình xin chân thành cảm ơn!
 

File đính kèm

Mình có file như đính kèm và đã có đoạn mã code, tuy nhiên đoạn mã code ẩn dòng có điều kiện cho địa chỉ Q24 của sheet PHIEU KET QUA THI NGHIEM chỉ chạy được khi đánh vào, còn khi nó là giá trị của công thức thì không thể chạy được. Anh/chị/em rành về mã code có thể sửa giúp mình với
Mình xin chân thành cảm ơn!
Bạn này lấy ở đâu ra cái file từ 2002, phông chữ không đọc được gì cả.
 
Bạn này lấy ở đâu ra cái file từ 2002, phông chữ không đọc được gì cả.
FIle này không cần đọc chữ. Cái cần đọc là code và công thức. ô Q24 ( Q24 đọc được trong code).
Câu trả lời là sự kiện WorkSheet change không chạy cho target chứa công thức. Hãy dùng target khác, thuật toán khác, cách khác để ẩn dòng.
Chẳng hạn như filter not blank.
 
Lần chỉnh sửa cuối:
Tôi nghĩ cái bạn cần đọc và cần trả lời là bài 3 chứ không phải bài 2. Trừ khi bạn không quan tâm đến việc giải quyết bài 1.
Thật tình là mình ko rành về code nên mới nhờ sửa lệnh, cũng muốn học lắm mà giờ cũng có tuổi rồi hay sao mà đọc nó ko vào. Bạn có thể sửa giùm mình với được ko? Cảm ơn bạn rất nhiều vì đã quan tâm!
 
Theo
Mình có file như đính kèm và đã có đoạn mã code, tuy nhiên đoạn mã code ẩn dòng có điều kiện cho địa chỉ Q24 của sheet PHIEU KET QUA THI NGHIEM chỉ chạy được khi đánh vào, còn khi nó là giá trị của công thức thì không thể chạy được. Anh/chị/em rành về mã code có thể sửa giúp mình với
Mình xin chân thành cảm ơn!
Theo gợi ý của Anh @ptm0412 bạn thử làm theo cách sau:
1 /Xóa bỏ công thức ở Q24
2/ Thêm đoạn code sau vào module Sh PHIEU...
Mã:
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Dim t&
If Target.Address = "$Q$24" Then
For Each Rng In [P26:P35]
      If Rng = "P" Then t = t + 1
Next Rng
    Target = t
End If
End Sub
3/Thay đoạn code sau
Mã:
Private Sub Worksheet_Activate()
    Dim Rng As Range
    Application.ScreenUpdating = False
    For Each Rng In [A26:A35]
        Rng.EntireRow.Hidden = Rng.Value = " "
    Next Rng
End Sub
thành
Mã:
Private Sub Worksheet_Activate()
    Dim Rng As Range
    Application.ScreenUpdating = False
    For Each Rng In [P26:P35]
        Rng.EntireRow.Hidden = Rng.Value <> "P"
    Next Rng
 Application.ScreenUpdating = True
End Sub
[Code/]
 
Thật tình là mình ko rành về code nên mới nhờ sửa lệnh, cũng muốn học lắm mà giờ cũng có tuổi rồi hay sao mà đọc nó ko vào. Bạn có thể sửa giùm mình với được ko? Cảm ơn bạn rất nhiều vì đã quan tâm!
Tuổi tác chưa khi nào là vấn đề (có tuổi thì không dùng từ chat chit như "ko"). Bạn đọc không vào, thì bạn hỏi lại cho đến khi vào. Tôi thì quan tâm còn bạn thì thay vì hỏi lại cho "vào" lại lo giải thích chuyện không đáng.

Tạo 1 module, dùng thủ tục sau và gán cho cái spin button. Nếu làm không được thì hỏi tiếp, chứ đừng than "có tuổi"

Mã:
Sub HideUnhide()
        Rows("25:35").Hidden = False
        If [Q24].Value + 26 < 35 Then
            Rows([Q24].Value + 26 & ":35").Hidden = True
        End If
End Sub
Theo

Theo gợi ý của Anh @ptm0412 bạn thử làm theo cách sau:
1 /Xóa bỏ công thức ở Q24
2/ Thêm đoạn code sau vào module Sh PHIEU...

Tôi không ủng hộ sự kiện activate trong trướng hợp này. Nhấn spin button, phải chạy qua sheet khác rồi quay lại mới có tác dụng.
 
Theo

Theo gợi ý của Anh @ptm0412 bạn thử làm theo cách sau:
1 /Xóa bỏ công thức ở Q24
2/ Thêm đoạn code sau vào module Sh PHIEU...
Mã:
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Dim t&
If Target.Address = "$Q$24" Then
For Each Rng In [P26:P35]
      If Rng = "P" Then t = t + 1
Next Rng
    Target = t
End If
End Sub
3/Thay đoạn code sau
Mã:
Private Sub Worksheet_Activate()
    Dim Rng As Range
    Application.ScreenUpdating = False
    For Each Rng In [A26:A35]
        Rng.EntireRow.Hidden = Rng.Value = " "
    Next Rng
End Sub
thành
Mã:
Private Sub Worksheet_Activate()
    Dim Rng As Range
    Application.ScreenUpdating = False
    For Each Rng In [P26:P35]
        Rng.EntireRow.Hidden = Rng.Value <> "P"
    Next Rng
 Application.ScreenUpdating = True
End Sub
[Code/]
Cảm ơn bạn nhiều, mình hiểu ý định của bạn, nhưng công thức ở Q24 là không thể thay đổi, vì chính nó quyết định đến việc tự động ẩn hiện dòng, còn ở cột P là chỉ để đánh giá, nhiều khi đánh giá ko đạt nhưng vẫn phải hiển thi để xuất hồ sơ
 
Cảm ơn bạn nhiều, mình hiểu ý định của bạn, nhưng công thức ở Q24 là không thể thay đổi, vì chính nó quyết định đến việc tự động ẩn hiện dòng, còn ở cột P là chỉ để đánh giá, nhiều khi đánh giá ko đạt nhưng vẫn phải hiển thi để xuất hồ sơ
Có lẽ bạn không thử như tôi đã hướng dẫn:
Tôi có thể không biết đúng ý định thức chất của bạn nhưng Dùng code để lấy được giá trị vào Q24 và khi Q24 có giá trị (thông qua sự kiện Workbook_Selection Change(byval target...), nó sẽ có giá trị ngay khi bạn click chuột vào nó-So sánh với dùng công thức thì có gì khác nhau.
Khuyên bạn: Không nên viết tắt và đừng đỏ thừa cho đó là thói quen, tuổi tác,.... để nhận được nhiều thiện cảm và nhiều sự hỗ trợ hơn
Tôi không ủng hộ sự kiện activate trong trướng hợp này. Nhấn spin button, phải chạy qua sheet khác rồi quay lại mới có tác dụng.
Cảm ơn Anh @ptm0412 đã xem bài và chỉ bảo.
Tôi nghĩ rằng có thể bỏ cái sự kiện Activate đi cũng được. Bởi khi click chuột vào Q24 thì code sự kiện Worksheet_SelectionChange đã hoạt động rồi khi đó Q24 thay đổi và kích hoạt Worksheet_SelectionChange hoạt động.
Tôi đã xóa file và không ngời bên máy tính nên không thử được. Nếu có gì chưa đúng mong anh chỉ bảo thêm.
Trân trọng cảm ơn Anh.
 
Tôi nghĩ rằng có thể bỏ cái sự kiện Activate đi cũng được. Bởi khi click chuột vào Q24 thì code sự kiện Worksheet_SelectionChange đã hoạt động rồi
Không chạy qua chạy lại giữa các sheet thì lại phải click 1 cái vào Q24. Giả sử Q24 đang active thì phải click 2 cái: Một cái click ra ngoài và 1 cái click vào nó. Khi sử dụng control để điều khiển thì cách tốt nhất là dùng sự kiện của cái control đó.
 
Mình có file như đính kèm và đã có đoạn mã code, tuy nhiên đoạn mã code ẩn dòng có điều kiện cho địa chỉ Q24 của sheet PHIEU KET QUA THI NGHIEM chỉ chạy được khi đánh vào, còn khi nó là giá trị của công thức thì không thể chạy được. Anh/chị/em rành về mã code có thể sửa giúp mình với
Mình xin chân thành cảm ơn!
Nên được đặt sự kiện vào Spinner Change, nháy phải lên Spinner gán macro (edit để tạo mới) rồi dùng code sau
Mã:
Sub Spinner5902_Change()
        Rows("25:35").Hidden = False
        If Range("$Q$24").Value + 26 < 35 Then
            Rows((Range("$Q$24").Value + 26) & ":35").Hidden = True
        End If
End Sub
 
Tác giả vẫn là không đọc bài 8.
 
Từ sáng giờ loay hoay đủ cách của các bạn chỉ bảo mà nó vẫn không chịu chạy đúng ý đồ. Mình xin gửi lại file và nói rõ ý đồ của mình hơn để các bạn dể dàng giúp đỡ. File này có 2 sheet, 1 sheet dữ liệu gốc (DATABASE) và 1 sheet xuất kết quả (PHIEU KET QUA THI NGHIEM). Tại sheet xuất kết quả ô P7 mình sẻ nhập số phiếu hoặc điều khiển bằng spin button thì kết quả sẻ được hiển thị. Tại ô Q24 nó sẻ tự động tính toán số dòng trong bảng kết quả cần hiển thị (từ dòng A26:A35). Trong file mình đã có 2 đoạn mã code. 1 đoạn là tự động ẩn hiện dòng từ A8:A16 (đoạn này chạy ổn). Còn 1 đoạn mã code ẩn hiện dòng từ A26:A35 thông qua giá trị từ ô Q24. Với đoạn mã code này nếu nhập giá trị vào Q24 thì chạy ổn, còn nếu Q24 là công thức thì nó không chạy được, mà mình không muốn nhập giá trị vào vì giá trị đã được tự động tính toán. Mình muốn sửa đoạn mã code để khi thay đổi số phiếu tại ô P7 số dòng từ A26:A35 vẫn tự động hiển thị theo giá trị tại ô Q24.
Cảm ơn các bạn đã quan tâm, giúp đỡ, nếu có gì không phải mong các bạn bỏ qua cho
 

File đính kèm

Nội dung bài 8 có đoạn như sau mà bạn chưa làm. Nếu chưa hiểu thì hỏi cách làm như đoạn đó

1731657048583.png

Bài 12 cũng cách đó mà cụ thể hơn, dễ làm theo hơn, bạn cũng chưa làm. File gởi lên lần 2 y hệt file bài 1 thì gởi lên làm chi.

1731657121349.png
 
Nội dung bài 8 có đoạn như sau mà bạn chưa làm. Nếu chưa hiểu thì hỏi cách làm như đoạn đó

View attachment 305608

Bài 12 cũng cách đó mà cụ thể hơn, dễ làm theo hơn, bạn cũng chưa làm. File gởi lên lần 2 y hệt file bài 1 thì gởi lên làm chi.

View attachment 305609
Thật tình thì cả 2 cách này, hồi sáng mình đều đã thử, nhưng nó vẫn chạy không đúng ý đồ, hay là do mình chưa thực hiện đúng. Để có thời gian mình sẻ gửi lại file để bạn kiểm tra giùm. Vì bây giờ mình phải giải quyết hồ sơ gấp cho khách hàng nên không thể làm được, mong bạn thông cảm. Phiền bạn quá! Cảm ơn bạn rất rất nhiều!
 
Thật tình thì cả 2 cách này, hồi sáng mình đều đã thử, nhưng nó vẫn chạy không đúng ý đồ, hay là do mình chưa thực hiện đúng. Để có thời gian mình sẻ gửi lại file để bạn kiểm tra giùm. Vì bây giờ mình phải giải quyết hồ sơ gấp cho khách hàng nên không thể làm được, mong bạn thông cảm. Phiền bạn quá! Cảm ơn bạn rất rất nhiều!
Nếu gởi lại file, thì gởi file "đã thử nhưng không đúng ý đồ" chứ đừng gởi file gốc như bài 1 hoặc bài 14
 
Nếu gởi lại file, thì gởi file "đã thử nhưng không đúng ý đồ" chứ đừng gởi file gốc như bài 1 hoặc bài 14
Cảm ơn bạn @ptm0412 đã rất tận tình với vấn đề của mình đưa ra!
Hôm nay mình mới có thời gian để trả bài cho bạn được, mong bạn bỏ chút thời gian xem lại giùm mình với.
Với mong muốn xử lý hồ sơ được tối ưu, nên mình muốn việc ẩn hiện dòng không cần đến nút Spinner. Vì khi in nhiều hồ sơ mình muốn gán macro để in liên tục nhiều phiếu một lần, mà nếu phải dùng nút Spinner thì không thể in như vậy được. Trân trọng!
 

File đính kèm

Cảm ơn bạn @ptm0412 đã rất tận tình với vấn đề của mình đưa ra!
Hôm nay mình mới có thời gian để trả bài cho bạn được, mong bạn bỏ chút thời gian xem lại giùm mình với.
Với mong muốn xử lý hồ sơ được tối ưu, nên mình muốn việc ẩn hiện dòng không cần đến nút Spinner. Vì khi in nhiều hồ sơ mình muốn gán macro để in liên tục nhiều phiếu một lần, mà nếu phải dùng nút Spinner thì không thể in như vậy được. Trân trọng!
Vẫn dùng spin button hoặc không, nhưng viết code tạo vòng lặp từ a đến b (số nguyên giống như nhấn spin). Câu lệnh là ActiveSheet.PrintOut
Tuy vậy, code luôn luôn chạy nhanh hơn máy in nên cẩn thận máy in bị tràn bộ nhớ.
 
Web KT

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

Back
Top Bottom