Chuyên đề giải đáp những thắc mắc về code VBA

Liên hệ QC

maytinhvp01

Thành viên thường trực
Tham gia
27/7/13
Bài viết
390
Được thích
179
Mình muốn nhờ giải thich câu lệnh " If Ran.Cells(d, c) > max Then max = Ran.Cells(d, c) "
trong ví du:
Public Function LonNhat(Ran As Range)
Dim max As Double, v As Integer, d As Integer, c As Integer
max = Ran.Cells(1, 1)
For d = 1 To Ran.Rows.Count
For c = 1 To Ran.Columns.Count
If Ran.Cells(d, c) > max Then max = Ran.Cells(d, c)
Next c
Next d
v = Tim(max, Ran)
LonNhat = max
End Function
-------------------------------------------------------
[INFO1]Thông báo:
Vì topic này:
http://www.giaiphapexcel.com/forum/...ải-thích-các-code-đề-nghị-các-bạn-gửi-vào-đây
đã quá dài nên BQT đóng lại.
Nay tôi mở topic mới với cùng chủ đề: GIẢI THÍCH NHỮNG THẮC MẮC VỀ CODE
Các bạn nếu có nhu cầu giải thích code, vui lòng post tại đây nhé
NDU96081631

[/INFO1]
 
Chỉnh sửa lần cuối bởi điều hành viên:
Đừng có đặt tên Folder, tên File, tên Sheet là chữ --- có --- dấu --- mệt ---- lắm --- á.
Dạ vâng, Đúng là có dấu tiếng việt vào rất hay bị lỗi.
Code Anh chạy ngon lành Anh ạ. Từ code của Anh Em bổ sung thêm nháy đơn vào đoạn SubAddress của Em cũng đc rồi ạ.
Cảm ơn anh nhiều!
 
Upvote 0
Xin tất cả các bạn,
Trong Module ThisWorkbook OT có đoạn code như sau:
Mã:
Option Explicit

Private Sub Workbook_SheetSelectionChange(ByVal sh As Object, ByVal Target As Range)
    If Target.Count > 1 Or Target.Row < 2 Then Exit Sub
    If sh.Name = "Sheet1" Then
        MsgBox sh.Name
    End If
End Sub
Khi OT thao tác chọn toàn bộ bảng tính (ctrl+A) thì bị lỗi: Overflow
Vậy để kiểm soát được lỗi này thì sẽ sử dụng câu lệnh gì tương tự với câu lệnh
"If Target.Count > 1 Or Target.Row < 2 Then Exit Sub" để thoát không sử dụng các câu lệnh On error.. ạ?
 
Upvote 0
Range.Count là thuộc tính kiểu Long.
Với Excel đời cũ, một sheet có gần 17 triệu cells. Số đếm này biến kiểu Long chứa đủ.
Với Excel 2007+, một sheet có hơn 17 tỷ cells. Số đếm này sẽ làm tràn biến Long --> trong lập trình, tràn số gọi là overflow.
VBA bắt buộc phải thêm thuộc tính CountLarge cho Range để tránh tràn số.
 
Upvote 0
Chào cả nhà, mình muốn xóa nhiều sheet và để lại 2 sheet thì phải code thế nào ạ?
 
Upvote 0
Chào cả nhà, mình muốn xóa nhiều sheet và để lại 2 sheet thì phải code thế nào ạ?
Const sheet_mot = "bach"
Cont sheet_hai = "tuyet"
Dim ws as worksheet, ws_name as string
For each ws in thisworkbook.worksheets
ws_name = ws.name
If ws_name <> sheet_mot and ws_name <> sheet_hai Then
ws.delete
End if
Next ws
Msgbox "Xong phim ba con heo con!"
 
Upvote 0
Const sheet_mot = "bach"
Cont sheet_hai = "tuyet"
Dim ws as worksheet, ws_name as string
For each ws in thisworkbook.worksheets
ws_name = ws.name
If ws_name <> sheet_mot and ws_name <> sheet_hai Then
ws.delete
End if
Next ws
Msgbox "Xong phim ba con heo con!"
bach tuyet liên quan gì đến heo con. Tính quảng cáo phim con heo hở.
Code thiếu hàm LCase.
 
Upvote 0
bach tuyet liên quan gì đến heo con. Tính quảng cáo phim con heo hở.
Code thiếu hàm LCase.
Phim ba con heo con, không phải phim con heo đâu bác. :D

----
@ Bạch Nương Tử:

For each ws in thisworkbook.worksheets
If thisworkbook.worksheets.count=1 then exit for
ws_name = VBA.Lcase$(ws.name)
If ws_name <> sheet_mot and ws_name <> sheet_hai Then
ws.delete
End if
Next ws
 
Upvote 0
Em chào Anh Chị,
Mã:
Private Sub Worksheet_Change(ByVal Target As Range)
    Target = Sheet5.Range("A1").Value
    If Target = True Then Call AnDongCot
    Else
    Call HienDongCot
End If
End Sub
Em đang tạo đoạn code trên. Mục đích khi Em tích vào check bóc thì ô A1 là TRUE còn bỏ tích thì A1 là FALSE. Em muốn tạo sự kiện nếu ô A1 là TRUE thì chạy code Ẩn dòng cột, ngược lại chạy code hiện dòng cột. Hiện tại code chưa chạy được ạ. Em đang tập code mong A/C chỉ bảo. Em cảm ơn!
 
Upvote 0
Em chào Anh Chị,
Mã:
Private Sub Worksheet_Change(ByVal Target As Range)
    Target = Sheet5.Range("A1").Value
    If Target = True Then Call AnDongCot
    Else
    Call HienDongCot
End If
End Sub
Em đang tạo đoạn code trên. Mục đích khi Em tích vào check bóc thì ô A1 là TRUE còn bỏ tích thì A1 là FALSE. Em muốn tạo sự kiện nếu ô A1 là TRUE thì chạy code Ẩn dòng cột, ngược lại chạy code hiện dòng cột. Hiện tại code chưa chạy được ạ. Em đang tập code mong A/C chỉ bảo. Em cảm ơn!
Target ở đây là đối tượng hay nói cách khác là ô mà bạn tác động tới.trường hợp này bạn lấy địa chỉ của target đi.Đại loại nó như vầy
Mã:
Private Sub Worksheet_Change(ByVal Target As Range)
    If Target.Address <> "$A$1" Then Exit Sub
    If Target.Value = True Then
            Call AnDongCot
    Else
            Call HienDongCot
    End If
End Sub
 
Upvote 0
Em chào Anh Chị,
Mã:
Private Sub Worksheet_Change(ByVal Target As Range)
    Target = Sheet5.Range("A1").Value
    If Target = True Then Call AnDongCot
    Else
    Call HienDongCot
End If
End Sub
Em đang tạo đoạn code trên. Mục đích khi Em tích vào check bóc thì ô A1 là TRUE còn bỏ tích thì A1 là FALSE. Em muốn tạo sự kiện nếu ô A1 là TRUE thì chạy code Ẩn dòng cột, ngược lại chạy code hiện dòng cột. Hiện tại code chưa chạy được ạ. Em đang tập code mong A/C chỉ bảo. Em cảm ơn!
Bạn viết thế này
If Target. Address = "$A$1" then
If Target.Value = TRUE Then
 
Upvote 0
Target ở đây là đối tượng hay nói cách khác là ô mà bạn tác động tới.trường hợp này bạn lấy địa chỉ của target đi.Đại loại nó như vầy
Mã:
Private Sub Worksheet_Change(ByVal Target As Range)
    If Target.Address <> "$A$1" Then Exit Sub
    If Target.Value = True Then
            Call AnDongCot
    Else
            Call HienDongCot
    End If
End Sub
Bạn viết thế này
If Target. Address = "$A$1" then
If Target.Value = TRUE Then

Cảm ơn Bạn Cu Tồ và Bạn Maika8008. Code của 2 Bạn mình chạy thử Ok rồi.
Mình muốn bổ sung thêm trường hợp dùng check box để lấy TRUE và FALSE vào ô A1 thì code sẽ chạy. Mong các Bạn xem giúp mình thêm cách để sử dụng được check box trong trường hợp này. Tks các Bạn!
1608273411409.png
 

File đính kèm

  • Hiện ẩn dòng cột.xlsm
    22.2 KB · Đọc: 2
Lần chỉnh sửa cuối:
Upvote 0
Cảm ơn Bạn Cu Tồ và Bạn Maika8008. Code của 2 Bạn mình chạy thử Ok rồi.
Mình muốn bổ sung thêm trường hợp dùng check box để lấy TRUE và FALSE vào ô A1 thì code sẽ chạy. Mong các Bạn xem giúp mình thêm cách để sử dụng được check box trong trường hợp này. Tks các Bạn!
View attachment 251465
Vậy bạn đừng link cell nữa mà dùng sự kiện click của checkbox
Private Sub CheckBox1_Click() 'Sửa lại tên checkbox cho đúng
If CheckBox1.Value = True Then
Range("A1") = 1
Else
Range("A1") = 0
End If
End Sub

Ở sự kiện Change của Sheet thì:
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Address <> "$A$1" Then Exit Sub
If Target.Text = "1" Then
Call AnDongCot
Else
Call HienDongCot
End If
End Sub
 
Upvote 0
Vậy bạn đừng link cell nữa mà dùng sự kiện click của checkbox
Private Sub CheckBox1_Click() 'Sửa lại tên checkbox cho đúng
If CheckBox1.Value = True Then
Range("A1") = 1
Else
Range("A1") = 0
End If
End Sub

Ở sự kiện Change của Sheet thì:
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Address <> "$A$1" Then Exit Sub
If Target.Text = "1" Then
Call AnDongCot
Else
Call HienDongCot
End If
End Sub
Mình chạy code được rồi. Cảm ơn Bạn rất nhiều!
 
Upvote 0
Em chào Anh Chị,
Trong sự kiện Workbook_Open
Em đang để Sheet 2 được mở ra lúc mở file như code dưới đây.
Mã:
Private Sub Workbook_Open()
    Sheet2.Select
End Sub

Em muốn chỗ Sheet2.Select có thể tùy biến tại ô H3 ở sheet1 (tức là ở sheet 1 ô H3 Em chọn sheet nào thì sau này khi mở file sheet đó sẽ được mở ra )
Em có sửa code như dưới đây. Nhưng chưa được.

Private Sub Workbook_Open()
Sheet1.Range("H3").Value.Select
End Sub

Mong Anh Chị xem giúp Em. Cảm ơn Anh Chị!
 
Upvote 0
Em chào Anh Chị,
Trong sự kiện Workbook_Open
Em đang để Sheet 2 được mở ra lúc mở file như code dưới đây.
Mã:
Private Sub Workbook_Open()
    Sheet2.Select
End Sub

Em muốn chỗ Sheet2.Select có thể tùy biến tại ô H3 ở sheet1 (tức là ở sheet 1 ô H3 Em chọn sheet nào thì sau này khi mở file sheet đó sẽ được mở ra )
Em có sửa code như này, Nhưng chưa được.

Private Sub Workbook_Open()
Sheet1.Range("H3").Value.Select
End Sub

Mong Anh Chị xem giúp Em. Cảm ơn Anh Chị!
Thử như sau nha bạn

Sheet1.Select
Range("H3").select
 
Upvote 0
Web KT
Back
Top Bottom