THANHNGUYEN24101994@GMAIL
Thành viên mới

- Tham gia
- 9/9/20
- Bài viết
- 3
- Được thích
- 0
Có anh chị nào biết cách làm tự động ẩn hàng khi hàng đó không có giá trị và tự động hiện ra khi hàng đó có giá trị không ạ! giúp em với. Em cảm ơn ạ
Cũng được nhưng nó thuộc phạm vi lập trình, hàm công thức thì không dùng được rồi bạnCó anh chị nào biết cách làm tự động ẩn hàng khi hàng đó không có giá trị và tự động hiện ra khi hàng đó có giá trị không ạ! giúp em với. Em cảm ơn ạ
Tự động ẩn khi không có giá trị thì được rồi. Nhưng tự động hiện khi có giá trị thì đã thấy ai làm chưa hay chỉ tưởng tượng ra? Côt/hàng ẩn thì ghi giá trị cách nào?
Cái này thì phải dùng VBA rồi. Bạn thì trọng Lập trình với VBA, khoảng tháng 8 vừa rồi bạn "batman1" có cho tôi một code để ẩn và hiện hàng rất hiệu quả.Cái này em có nghĩ qua chưa làm,cũng định bảo nhưng lại nghĩ nếu như ô ẩn đó là công thức và chọn giá trị bằng 0 thì ẩn còn khác không thì hiện.Nếu chủ thớt yêu cầu là rỗng thật thì ẩn rồi khó ghi dữ liệu để hiện trừ khi dùng VBA hay gì đó không phải điền tay
à . đó là tôi đang nêu các khả năng có thể xảy ra theo ý tưởng của thớt và đó là logic nếu có viết code,và tôi chưa thử các khả năng mà tôi đã nêu ra ở bài trên nên tôi viết là chưa có làm qua ( tức chưa viết ra code) vì chưa hiểu rõ ý định chủ thớt chứ đó không phải là nhu cầu của tôi.và tất nhiên là dùng vba để tự động hóa rồi.nhưng vấn đề tôi đang nêu là nếu cái ô mà bạn muốn ẩn đó không có công thức hay link giá trị gì đó,hoặc không dùng vba để điền giá trị tự động. khi thỏa mãn điều kiện ẩn thì nó ẩn đi đúng không?và bạn không thể nhập giá trị vào ô đó bằng tay vì ô đó đã ẩnCái này thì phải dùng VBA rồi. Bạn thì trọng Lập trình với VBA, khoảng tháng 8 vừa rồi bạn "batman1" có cho tôi một code để ẩn và hiện hàng rất hiệu quả.
Trước tiên chúng ta cần có một cột ghi giá trị hàng cần ẩn với một giá trị nào đó, chẳng hạn 0 để khi thấy 0 thì sẽ ẩn hàng còn khi không có 0 thì không ẩn hàng hoặc hiện ra. Đưa đoạn code vào và cho Private Sub, thì khi bạn mở sheet đó thì nó sẽ hiện ra các hàng mà bạn muốn hiện còn hàng nào bạn không muốn hiện (có giá trị 0) thì ân định. Bạn cũng có thể set một control box để mở hay hiện hàng có giá trị 0 ngay trong sheet.
Chắc không ai nghĩ việc phải nhập bằng tay vào 1 ô trong hàng/cột đã ẩn, nhưng với VBA thì có thể. Trong trường hợp đó, việc cần hiện lại dòng/cột đã ẩn là 1 nhu cầu chính đáng.à . đó là tôi đang nêu các khả năng có thể xảy ra theo ý tưởng của thớt và đó là logic nếu có viết code,và tôi chưa thử các khả năng mà tôi đã nêu ra ở bài trên nên tôi viết là chưa có làm qua ( tức chưa viết ra code) vì chưa hiểu rõ ý định chủ thớt chứ đó không phải là nhu cầu của tôi.và tất nhiên là dùng vba để tự động hóa rồi.nhưng vấn đề tôi đang nêu là nếu cái ô mà bạn muốn ẩn đó không có công thức hay link giá trị gì đó,hoặc không dùng vba để điền giá trị tự động. khi thỏa mãn điều kiện ẩn thì nó ẩn đi đúng không?và bạn không thể nhập giá trị vào ô đó bằng tay vì ô đó đã ẩn
Vị trí | Tham số | Kiểu | Chức năng |
1 | Target | Vùng đối tượng | Nhập mảng đối tượng cần xét |
2 | WrapText | Có/Không | Tự động Wraptext |
3 | Show | Có/Không | Hiện lại |
4 | Title | Chuỗi | Tiêu đề đặt cho giá trị trả về của ô nhập (Không cần thiết) |
' _,
' ___ _ _ _ ___(_)
'/ __| / \ | \| | _ | |
'\__ \/ \ \| \\ | _ \ |
'|___/_/ \_|_|\_|___/_|
'
Option Explicit
#If VBA7 Then
Private Declare PtrSafe Function SetTimer Lib "user32" (ByVal hWnd As LongPtr, ByVal nIDEvent As LongPtr, ByVal uElapse As LongPtr, ByVal lpTimerFunc As LongPtr) As Long
Private Declare PtrSafe Function KillTimer Lib "user32" (ByVal hWnd As LongPtr, ByVal nIDEvent As LongPtr) As Long
#Else
Private Declare Function SetTimer Lib "user32" (ByVal HWnd As Long, ByVal nIDEvent As Long, ByVal uElapse As Long, ByVal lpTimerFunc As Long) As Long
Private Declare Function KillTimer Lib "user32" (ByVal HWnd As Long, ByVal nIDEvent As Long) As Long
#End If
#If Win64 Then
Private gTimerID As LongPtr
#Else
Private gTimerID As Long
#End If
Private Args(), WorkIndex As Integer
Function S_AutoHide( _
Optional ByVal Target As Range, _
Optional ByVal WrapText As Boolean = False, _
Optional ByVal Show As Boolean = False, _
Optional ByVal Title$ = vbNullChar) As Variant
On Error Resume Next
Dim k As Integer, r, Formula$
Set r = Application.Caller
Formula = r(1, 1).Formula
If Title <> vbNullChar Then
S_AutoHide = Title & ": [" & Target.Address(0, 0) & "]"
Else
S_AutoHide = Mid(Formula, 2)
End If
k = UBound(Args)
ReDim Preserve Args(1 To k + 1)
Args(k + 1) = VBA.Array(0, Formula, r, Target, WrapText, Show)
If gTimerID = 0 Then
gTimerID = SetTimer(0&, 0&, 1, AddressOf S_AutoHide_callback)
End If
End Function
Private Sub S_AutoHide_callback()
On Error Resume Next
Call KillTimer(0&, gTimerID): gTimerID = 0
S_AutoHide_working
On Error GoTo 0
End Sub
Private Sub S_AutoHide_working()
On Error Resume Next
Dim UA%, s$
UA = UBound(Args)
If UA > 0 Then
WorkIndex = WorkIndex + 1
Dim A: A = Args(WorkIndex)
If A(0) <> 0 Or A(2).Formula <> A(1) Then
GoTo N
End If
A(0) = 1
'//'//'//'//'//'//'//'//'//'//'//'//'//'//'//'//'//'//'//'//
Dim R1 As Range, R2 As Range, R3 As Range
Set R1 = A(3)
Dim RNGs As Range, i As Long, IsUp As Boolean
Dim LR&, LC%
LC = R1.Columns.Count
If A(5) Then
R1.Parent.UsedRange.EntireRow.Hidden = False
Else
'LR = R1.Find("*", After:=R1(1, 1), LookIn:=xlValues, LookAt:=xlPart, SearchDirection:=xlPrevious, SearchOrder:=xlByRows).Row - R1.Row + 1
LR = R1.Rows.Count
If LR > 0 Then
For i = 1 To LR
Set R2 = R1(i, 1).Resize(1, LC)
Set R3 = R2.Find(What:="*", After:=R2(1, LC), LookIn:=xlValues, LookAt:= _
xlPart, SearchOrder:=xlByColumns, SearchDirection:=xlNext, MatchCase:=False, SearchFormat:=False)
If R3 Is Nothing Then
If RNGs Is Nothing Then
Set RNGs = R2
Else
Set RNGs = Application.Union(RNGs, R2)
End If
End If
Next i
IsUp = Application.ScreenUpdating
If Application.ScreenUpdating Then
Application.ScreenUpdating = False
End If
With R1
.EntireRow.Hidden = False
If A(4) Then
.WrapText = False
.WrapText = True
End If
End With
If Not RNGs Is Nothing Then
RNGs.EntireRow.Hidden = True
End If
If Application.ScreenUpdating <> IsUp Then
Application.ScreenUpdating = IsUp
End If
End If
End If
Set R1 = Nothing
Set R2 = Nothing
Set R3 = Nothing
Set RNGs = Nothing
'//'//'//'//'//'//'//'//'//'//'//'//'//'//'//'//'//'//'//'//
N:
If WorkIndex >= UA Then
Erase Args: WorkIndex = 0
Else
gTimerID = SetTimer(0&, 0&, 1, AddressOf S_AutoHide_callback)
End If
End If
On Error GoTo 0
End Sub
thế đã đọc hết những bài mà tôi đã viết chưa?Nếu không hiểu đoạn nào tôi có thể giải thích lại cho,và trong những bài tôi viết chưa có bài nào nói về nhu cầu chính đáng hay không chính đáng,tôi đang phân tích trường hợp vết code và theo nhu cầu của chủ thót chứ không phải theo nhu cầu của tôi,vì đây là bài mà chủ thớt yêu cầu?đoạn nào không hiểu thì tôi giả thích lại cho hiểu ýChắc không ai nghĩ việc phải nhập bằng tay vào 1 ô trong hàng/cột đã ẩn, nhưng với VBA thì có thể. Trong trường hợp đó, việc cần hiện lại dòng/cột đã ẩn là 1 nhu cầu chính đáng.
nếu như ô ẩn đó là công thức và chọn giá trị bằng 0 thì ẩn còn khác không thì hiện.Nếu chủ thớt yêu cầu là rỗng thật thì ẩn rồi khó ghi dữ liệu để hiện trừ khi dùng VBA hay gì đó không phải điền tay
à . đó là tôi đang nêu các khả năng có thể xảy ra theo ý tưởng của thớt và đó là logic nếu có viết code,và tôi chưa thử các khả năng mà tôi đã nêu ra ở bài trên nên tôi viết là chưa có làm qua ( tức chưa viết ra code) vì chưa hiểu rõ ý định chủ thớt chứ đó không phải là nhu cầu của tôi.và tất nhiên là dùng vba để tự động hóa rồi.nhưng vấn đề tôi đang nêu là nếu cái ô mà bạn muốn ẩn đó không có công thức hay link giá trị gì đó,hoặc không dùng vba để điền giá trị tự động. khi thỏa mãn điều kiện ẩn thì nó ẩn đi đúng không?và bạn không thể nhập giá trị vào ô đó bằng tay vì ô đó đã ẩn
Gì căng thế? Chỉ nói cái cụm từ chữ đậm của bạn thôi. Ai cũng biết là ẩn rồi thì nhập bằng tay thế nào được. Đoán là chủ thớt nghĩ dòng ẩn có công thức. Khi công thức có giá trị <> 0 hoặc <> "" thì hiện. Vậy thôi.thế đã đọc hết những bài mà tôi đã viết chưa?Nếu không hiểu đoạn nào tôi có thể giải thích lại cho,và trong những bài tôi viết chưa có bài nào nói về nhu cầu chính đáng hay không chính đáng,tôi đang phân tích trường hợp vết code và theo nhu cầu của chủ thót chứ không phải theo nhu cầu của tôi,vì đây là bài mà chủ thớt yêu cầu?đoạn nào không hiểu thì tôi giả thích lại cho hiểu ý
căng đâu,tôi đang giải thích cho nhưng gì mình viết,và thấy những gì mình viết khác với phần kết luận của bạn.vì tôi có nếu mấy trường hợp có thể thay đổi giá trị ô đang ẩn và có nhắc đến vba chứ không hề nói là vba không thể,và chỉ là nếu trường hợp xảy ra chứ không nói nhu cầu chính đáng không,dòng đậm đó nó có liên quan đến cả bài viếtGì căng thế? Chỉ nói cái cụm từ chữ đậm của bạn thôi. Ai cũng biết là ẩn rồi thì nhập bằng tay thế nào được. Đoán là chủ thớt nghĩ dòng ẩn có công thức. Khi công thức có giá trị <> 0 hoặc <> "" thì hiện. Vậy thôi.
Không đúng bác nhé:Tôi thấy code bạn HeSanbi viết ẩn hiện rows rất nhanh.
Cái bất tiện là phải viết hàm lại TRUE hay FALSE để nó ẩn hay hiện hàng.
Bạn có thể viết lại để kích hoạt code bằng command button giúp được không,
khi click command button thì kích hoạt code này để ẩn hàng thay vì gõ hàm như bạn đề nghị?
Rất cám ơn bạn.