Giúp VBA chỉ chạy trên các dòng đang lọc (1 người xem)

Liên hệ QC

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

tueyennhi

Thành viên tích cực
Tham gia
18/10/10
Bài viết
1,192
Được thích
105
Chào anh chị ạ!

Đầu năm mới em xin chúc toàn thể anh chị em cùng gia đình đón năm mới với một sức khỏe dồi dào, thành công trong cuộc sống!

Sau đây em xin có một câu hỏi về việc làm thế nào để code VBA trong file đính kèm chỉ chạy với giá trị đang lọc. Còn các giá trị khác sẽ không bị tác động (Em ví dụ file đính kèm đang lọc ở cột F giá trị là "D". Vậy làm thế nào để code chỉ chạy với giá trị lọc D còn các giá trị không lọc khác (H, N, X...) sẽ không bị tác động.

Em cảm ơn ạ!
 

File đính kèm

Bạn cứ cho duyệt từ dòng đầu đến dòng cuối, kiểm tra điều kiện if rows(i & ":" & i).Entirerow.Hidden=False then
 
Upvote 0
Bạn cứ cho duyệt từ dòng đầu đến dòng cuối, kiểm tra điều kiện if rows(i & ":" & i).Entirerow.Hidden=False then

Nghĩa là mọi công đoạn code của mình đều phải chèn thêm lệnh If này phải không bạn? Mình gà mờ lắm, code trong file viết được như thế đều dựa trên code của anh chị em trên này chỉ cho xong mình xào nấu thêm chứ về căn bản VBA thì mình không biết gì lắm.
 
Upvote 0
Nghĩa là mọi công đoạn code của mình đều phải chèn thêm lệnh If này phải không bạn? Mình gà mờ lắm, code trong file viết được như thế đều dựa trên code của anh chị em trên này chỉ cho xong mình xào nấu thêm chứ về căn bản VBA thì mình không biết gì lắm.
Thêm chỗ nào là do bạn thôi. Chỗ nào mà bạn cần kiểm tra xem dòng đó là ẩn hay hiện trước khi thực hiện code của bạn.
 
Upvote 0
Không có cách nào bao quát toàn bộ code luôn à bạn :)

Tất cả code của bạn đều dùng mảng, dữ liệu bạn lọc là trên sheet, Muốn chạy thì viết lại toàn bộ code, cho nó chạy từng dòng trên sheet mới xét được dòng nào là "bị" loc hoặc không.
Hoặc là bạn cho chạy theo điều kiện cột F là "D" thì làm việc, khác "D" thì chạy qua luôn. Khi đó, mỗi lần chạy code sẽ phải báo cho nó là chạy theo điều kiện cột F là gì. Nhưng nói chung, dữ liệu "bị lọc" mà dính VBA, dễ sai sót "chết người".
 
Upvote 0
Tất cả code của bạn đều dùng mảng, dữ liệu bạn lọc là trên sheet, Muốn chạy thì viết lại toàn bộ code, cho nó chạy từng dòng trên sheet mới xét được dòng nào là "bị" loc hoặc không.
Hoặc là bạn cho chạy theo điều kiện cột F là "D" thì làm việc, khác "D" thì chạy qua luôn. Khi đó, mỗi lần chạy code sẽ phải báo cho nó là chạy theo điều kiện cột F là gì. Nhưng nói chung, dữ liệu "bị lọc" mà dính VBA, dễ sai sót "chết người".

Viết lại code thì là án tử cho em rồi vì em chỉ làm lại những gì đã được gợi ý or có form sẵn xong xào xáo lại. Với lại em nghĩ theo hiểu biết nhỏ của em thì không dùng mảng chắc tốc độ rất chậm. Phải không anh?
Em cũng cảm thấy khi lọc mà chạy VBA thì chết không biết lúc nào mà lần. Giá như có dòng lệnh nào khiến cho code chỉ chạy với dữ liệu đang được lọc.
 
Lần chỉnh sửa cuối:
Upvote 0
Viết lại code thì là án tử cho em rồi vì em chỉ làm lại những gì đã được gợi ý or có form sẵn xong xào xáo lại. Với lại em nghĩ theo hiểu biết nhỏ của em thì không dùng mảng chắc tốc độ rất chậm. Phải không anh?
Em cũng cảm thấy khi lọc mà chạy VBA thì chết không biết lúc nào mà lần. Giá như có dòng lệnh nào khiến cho code chỉ chạy với dữ liệu đang được lọc.

Xem cái này sẽ có cách mà không cần phải dò từng dòng hidden hay no hidden
https://www.mrexcel.com/forum/excel...list-available-criteria-using-autofilter.html
rất dễ tự làm được, nếu không thì nhờ mọi người trên diễn đàn, tôi không thời gian giúp cụ thể
 
Upvote 0
Lần chỉnh sửa cuối:
Upvote 0
Có ai hiểu code này không giải thích giúp em với, em nghĩ có thể xử lý được yêu cầu topic của em. Code của forum mà thành viên winvista gợi ý.

PHP:
Dim w As Worksheet
Dim filterArray()
Dim currentFiltRange As String

Sub ChangeFilters()
Dim myKs

Set w = Worksheets("Sheet1")

With w.AutoFilter
currentFiltRange = .Range.Address

With .Filters
ReDim filterArray(1 To .Count, 1 To 3)

For f = 1 To .Count
With .Item(f)
myKs = myKs & "Filter: " & f & " "

If .On Then
filterArray(f, 1) = .Criteria1
myKs = myKs & "Criteria1: " & filterArray(f, 1) & " "

If .Operator Then
filterArray(f, 2) = .Operator
myKs = myKs & "Operator: " & filterArray(f, 2) & " "

filterArray(f, 3) = .Criteria2
myKs = myKs & "Criteria2: " & filterArray(f, 3) & " "

End If
End If
End With
myKs = myKs & " " & vbLf
Next f
End With
End With
MsgBox myKs

End Sub
 
Upvote 0
Có ai hiểu code này không giải thích giúp em với, em nghĩ có thể xử lý được yêu cầu topic của em. Code của forum mà thành viên winvista gợi ý.

PHP:
Dim w As Worksheet
Dim filterArray()
Dim currentFiltRange As String

Sub ChangeFilters()
Dim myKs

Set w = Worksheets("Sheet1")

With w.AutoFilter
currentFiltRange = .Range.Address

With .Filters
ReDim filterArray(1 To .Count, 1 To 3)

For f = 1 To .Count
With .Item(f)
myKs = myKs & "Filter: " & f & " "

If .On Then
filterArray(f, 1) = .Criteria1
myKs = myKs & "Criteria1: " & filterArray(f, 1) & " "

If .Operator Then
filterArray(f, 2) = .Operator
myKs = myKs & "Operator: " & filterArray(f, 2) & " "

filterArray(f, 3) = .Criteria2
myKs = myKs & "Criteria2: " & filterArray(f, 3) & " "

End If
End If
End With
myKs = myKs & " " & vbLf
Next f
End With
End With
MsgBox myKs

End Sub

Dựa vào code đó, ta có tìm ra được criteria ứng với các cột ==> có thể lọc theo array như bạn mong muốn.

Quá tầm thì bạn có thể hỏi người khác hoặc dùng cách khác: có vùng Range rui, thì dùng range.SpecialCells (xlCellTypeVisible ) để biết vùng hiện thị của filter, gắn thành hàm lọc cho array, là được.

Muốn giúp bạn cũng khó vì không biết code cũ của bạn làm việc gì, viết thế nào - tốt nhất là tự tay bạn gắn vào hoặc là tác giả của code đó gắn.
 
Upvote 0

Đọc 6 trang bên đó nữa chắc mệt khỏi hiểu lun. Để tác giả tự lo vậy.
Muốn giúp bạn cũng khó vì không biết code cũ của bạn làm việc gì, viết thế nào - tốt nhất là tự tay bạn gắn vào hoặc là tác giả của code đó gắn.
Công ty to như thế nên mua phần mềm chuyên nghiệp, hoặc là nhờ chuyên gia tư vấn, làm kiểu này chắc chắn khó tránh khỏi sai sót.
 
Lần chỉnh sửa cuối:
Upvote 0
Vậy mình đính kèm file lên bạn xem giúp nhé winvista.
Mặc dù cũng đã viết ngày đêm nhờ sự giúp đỡ của tất cả mọi người nhưng mình biết vẫn có những trường hợp khó tránh sai xót. Thôi thì càng hoàn thiện được phần nào thì càng tốt phần ấy. Nếu làm cho code chạy theo dữ liệu đang được lọc thì đối với mình tạm thời quá hoàn hảo rồi. Công ty người Hàn nó ky bo lắm, chẳng chịu chi đâu bạn ạ, lúc nào cũng đốc thúc cái gì cũng muốn nhanh.
 

File đính kèm

Lần chỉnh sửa cuối:
Upvote 0
Vậy mình đính kèm file lên bạn xem giúp nhé winvista.
Mặc dù cũng đã viết ngày đêm nhờ sự giúp đỡ của tất cả mọi người nhưng mình biết vẫn có những trường hợp khó tránh sai xót. Thôi thì càng hoàn thiện được phần nào thì càng tốt phần ấy. Nếu làm cho code chạy theo dữ liệu đang được lọc thì đối với mình tạm thời quá hoàn hảo rồi. Công ty người Hàn nó ky bo lắm, chẳng chịu chi đâu bạn ạ, lúc nào cũng đốc thúc cái gì cũng muốn nhanh.

Rất tiếc không giúp được, tôi là chúa lười , không đọc code người khác hiểu được (lười và dốt đọc nữa), Nên trên đã nói:
tốt nhất là tự tay bạn gắn vào hoặc là tác giả của code đó gắn.
Bạn nhờ người khác hoặc tác giả code đó vậy.
 
Upvote 0
Rất tiếc không giúp được, tôi là chúa lười , không đọc code người khác hiểu được (lười và dốt đọc nữa), Nên trên đã nói:

Bạn nhờ người khác hoặc tác giả code đó vậy.

Ừm vậy mình đã xóa gần như là hết code chỉ để lại một vài dòng và tải lại ở bài #14, bạn chỉ mình cách làm sao mà lọc cũng không ảnh hưởng khi chạy code nhé. Vấn đề về chạy code khi đang lọc mình chưa tìm thấy ở đâu có, và cũng chưa có bài viết nào để người mới học như mình có thể tự làm bạn ạ.
 
Upvote 0
Ừm vậy mình đã xóa gần như là hết code chỉ để lại một vài dòng và tải lại ở bài #14, bạn chỉ mình cách làm sao mà lọc cũng không ảnh hưởng khi chạy code nhé. Vấn đề về chạy code khi đang lọc mình chưa tìm thấy ở đâu có, và cũng chưa có bài viết nào để người mới học như mình có thể tự làm bạn ạ.

Cũng vậy thui, vì hiểu bạn tính gì đâu mà viết? nên xin lỗi, bạn phải tự vận động
 
Upvote 0
Vậy bạn có thể tự viết một file mà code chỉ chạy trên dữ liệu đang lọc được không, chỉ cần đơn giản thôi để mình xem cách code này nó chạy như thế nào.
 
Upvote 0
Vậy bạn có thể tự viết một file mà code chỉ chạy trên dữ liệu đang lọc được không, chỉ cần đơn giản thôi để mình xem cách code này nó chạy như thế nào.

Viết cũng thế mà thui giống bài #8 , cũng khó áp dụng,
Nhưng tôi nghĩ lại, vẫn theo #8 nhưng chúng ta chỉ tìm theo các dòng ẩn, rồi biến đổi - có điều kiện với các Array của bạn mà xét thôi (m,à Array lại phụ thuộc code cũ, code đó thì tôi không đọc được)
 
Upvote 0
Viết cũng thế mà thui giống bài #8 , cũng khó áp dụng,
Nhưng tôi nghĩ lại, vẫn theo #8 nhưng chúng ta chỉ tìm theo các dòng ẩn, rồi biến đổi - có điều kiện với các Array của bạn mà xét thôi (m,à Array lại phụ thuộc code cũ, code đó thì tôi không đọc được)

Mình đâu nói là theo code của mình, chỉ cần liên quan đến mảng mà đáp ứng điều kiện chỉ chạy trên giá trị đang lọc của bất cứ cột nào là được rồi.
 
Upvote 0
Web KT

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

Back
Top Bottom