Chuyên đề giải đáp những thắc mắc về code VBA (3 người xem)

Liên hệ QC

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

  • 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:
    Làm cácnh nào để checkbox bị đóng băng

    Cho em hỏi trường hợp sau

    Tại sheet này em có 1 checkbox
    Em muốn tại ô A1, khi nhập chữ A thì mới có thể đánh dấu check trên Checkbox (ý là có thể đáng dấu hoặc không đáng dấu), ngoài ra thì chechbox bị đóng băng (nghĩa là không thể chọn hay bỏ dấu check)
    Cho em hỏi code fải viết như thế nào, em cảm ơn!
     
    Upvote 0
    Hình như, như thế này thì phải

    If (Range("A1").Value = "A") Then
    CheckBox1.Enabled = True
    Else
    CheckBox1.Enabled = False
    End If
     
    Upvote 0
    Hình như, như thế này thì phải

    If (Range("A1").Value = "A") Then
    CheckBox1.Enabled = True
    Else
    CheckBox1.Enabled = False
    End If

    Thường thường thì đặt thuộc tính cho control chỉ dùng 1 dòng thôi. Logic block (If-then-else) giành cho trường hợp cần đặt nhiều thuộc tính.
    CheckBox1.Enabled = (Range("A1").Value = "A")
     
    Upvote 0
    Chào các Thầy các anh, em xin các Thầy các anh trợ giúp, em đang gặp bế tắt như sau, em muốn viết code sao cho khi click kép tại ô đã Paste Link , ActiveCell(khung chọn ô) chọn chính xác đến vị trí ô của sheet theo đường dẫn trích từ công thức Paste link của ô đó.


    Ví dụ:
    Copy vùng A1:A5 của sheet2 rồi dán theo kiểu Paste special / Paste Link tại A2 của sheet TongHop,tương tự copy vùng B1:B7 của sheet3 dán Paste Link tại A7 của sheet TongHop ta được vùng dử liệu từ A2:A13 là nơi chứa các công thức từ việc Paste Link.

    Điều mong muốn:
    Tại sheet TongHop nếu click kép vào A2 --> khung chọn ô(activecell) theo đường dẫn công thức tại A2 là Sheet2!A1 chọn đúng ô A1 của sheet2, tương tự tại TongHop nếu click kép vào A4 --> khung chọn theo đường dẫn Sheet2!A3 chọn đúng ô A3 của sheet2, tại sheet TongHop nếu click kép vào A9 --> khung chọn theo đường dẫn Sheet3!B3 chọn đúng ô B3 của sheet3
    ....

    Để thực hiện được ý đồ này em nhận xét tại những ô có Paste Link (vùng A2:A13 của TongHop) điều có công thức: dấu =, tên sheet, dấu ! , tên ô ( ví dụ =Sheet2!A3 )

    Như vậy nếu có một code nào đó có thể nhận dạng công thức rồi lọc trích ra tên sheet và tên ô ghép vào code này Sheets(tênSheet). Range(tên ô).Select sẻ dạt được mong muốn trên.

    Code mô phỏng:

    Mã:
    Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
    Dim TenSh, TenCell As String
     If Target.Column = 1 Then
        If Target <> "" Then
        
        [COLOR=#ff0000]'Hàm hay code trích xuất tên sheet tên ô từ công thức Paste Link đang cần trợ giúp[/COLOR]
            
            Sheets("TenSh").Range("TenCell").Select
            End If
        End If
    End Sub

    Em đã chuyễn bài hỏi này sang http://www.giaiphapexcel.com/forum/showthread.php?107492-Link-nhanh-từ-cell-đến-cell vì lo hỏi sai chủ đề
     
    Lần chỉnh sửa cuối:
    Upvote 0
    Chào tất cả mọi người. Nhờ mọi người xem giúp em đoạn code trích lọc dữ liệu theo tháng dưới đây bị sai ở đâu ạ, em nghĩ mãi mà vẫn không biết mình sai ở chỗ nào. Đoạn code của em đây ạ :

    Sub trich()
    Range("I3:L22").ClearContents


    For i = 3 To 22
    If Month(Range("B" & i).Value) = Range("O1").Value Then
    Range("A" & i & ":D" & i).Copy Range("I" & i)
    End If
    Next i
    End Sub

    Em đính kèm File bên dưới luôn cho mọi người dễ hiều ạ. Em cảm ơn mọi người
     

    File đính kèm

    Upvote 0
    Chào tất cả mọi người. Nhờ mọi người xem giúp em đoạn code trích lọc dữ liệu theo tháng dưới đây bị sai ở đâu ạ, em nghĩ mãi mà vẫn không biết mình sai ở chỗ nào. Đoạn code của em đây ạ :

    Sub trich()
    Range("I3:L22").ClearContents


    For i = 3 To 22
    If Month(Range("B" & i).Value) = Range("O1").Value Then
    Range("A" & i & ":D" & i).Copy Range("I" & i)
    End If
    Next i
    End Sub

    Em đính kèm File bên dưới luôn cho mọi người dễ hiều ạ. Em cảm ơn mọi người

    Điều đầu tiên bạn cần làm là kiểm tra kiểu dữ liệu trong cột B. Cụ thể cell B13 không phải là Date, dẫn đến câu lệnh If Month(Range("B" & i).Value)... bị lỗi
    Ngoài lề:
    - Hỏi về code VBA, sao lại đưa file có đuôi XLSX? Bởi file dạng này thì làm gì có code cơ chứ?
    - Mới học VBA nên tập thói quen khai báo biến đầy đủ và rõ ràng bạn à
     
    Upvote 0
    ủa đây là topic về VBA mà sao bạn gửi file .xlsx là sao ?

    Đoạn code của em bị sai lên Excel không cho lưu lại cả đoạn code đó được nên em chỉ lưu đc ở dạn File Excel bình thường thôi ạ. Anh tải File đó về rồi Copy đoạn code của chạy thử hộ em với xem nó bị sai ở đâu ạ
     
    Upvote 0
    Điều đầu tiên bạn cần làm là kiểm tra kiểu dữ liệu trong cột B. Cụ thể cell B13 không phải là Date, dẫn đến câu lệnh If Month(Range("B" & i).Value)... bị lỗi
    Ngoài lề:
    - Hỏi về code VBA, sao lại đưa file có đuôi XLSX? Bởi file dạng này thì làm gì có code cơ chứ?
    - Mới học VBA nên tập thói quen khai báo biến đầy đủ và rõ ràng bạn à

    Thưa chú, tại vì code sai lên Excel không cho lưu lại ạ. Con đã sửa lại cell B13 về dạng Date rồi mà vẫn không được chú ơi. VBA báo lỗi thế này :

    hoi.jpg

    con không biết sao nữa -0-/.-0-/.-0-/.
     
    Upvote 0
    Đoạn code của em bị sai lên Excel không cho lưu lại cả đoạn code đó được nên em chỉ lưu đc ở dạn File Excel bình thường thôi ạ. Anh tải File đó về rồi Copy đoạn code của chạy thử hộ em với xem nó bị sai ở đâu ạ
    bài của bạn đâu có làm cách đó .
    bạn record macro rồi filter xem coi nó ghi lại làm sao . bạn bắt chước làm vậy
     
    Upvote 0
    Thưa chú, tại vì code sai lên Excel không cho lưu lại ạ. Con đã sửa lại cell B13 về dạng Date rồi mà vẫn không được chú ơi. VBA báo lỗi thế này :
    View attachment 146323


    con không biết sao nữa -0-/.-0-/.-0-/.

    Lỗi nó tô màu ở chỗ nào sao bạn không ghi rõ?
    Tôi đoán: Bạn có sửa nhưng chưa đúng. Hãy kiểm chứng bằng công thức =ISNUMBER(B13) nếu cho kết quả =TRUE thì mới là đúng
     
    Upvote 0
    Lỗi nó tô màu ở chỗ nào sao bạn không ghi rõ?
    Tôi đoán: Bạn có sửa nhưng chưa đúng. Hãy kiểm chứng bằng công thức =ISNUMBER(B13) nếu cho kết quả =TRUE thì mới là đúng

    Chính xác luôn chú ạ, trời ơi nó dành dành 2 ký tự "//" như vầy mà con không nhìn ra

    haha.PNG

    Bảo sao mà nó không ra kết quả là phải rồi . Bây giờ thì hoàn toàn ok rồi ạ. Cũng gần đến giờ nghỉ trưa rồi đáy ạ. Chúc chú bữa trưa zui zẻ . Con cảm ơn chú nhiều !
     
    Lần chỉnh sửa cuối:
    Upvote 0
    Chào tất cả mọi người. Nhờ mọi người xem giúp em đoạn code trích lọc dữ liệu theo tháng dưới đây bị sai ở đâu ạ, em nghĩ mãi mà vẫn không biết mình sai ở chỗ nào. Đoạn code của em đây ạ :
    Sub trich()
    Range("I3:L22").ClearContents
    For i = 3 To 22
    If Month(Range("B" & i).Value) = Range("O1").Value Then
    Range("A" & i & ":D" & i).Copy Range("I" & i)
    End If
    Next i
    End Sub
    Em đính kèm File bên dưới luôn cho mọi người dễ hiều ạ. Em cảm ơn mọi người
    Vẫn theo code của bạn, sửa lại như vậy để kết quả nhìn cho đẹp...
    PHP:
    Sub trich()
    Dim i&, r&
    r = 1
    Sheet1.Range("I3:L22").Clear
    For i = 3 To 22
        If Month(Sheet1.Range("B" & i).Value) = Sheet1.Range("O1").Value Then
            Sheet1.Range("A" & i & ":D" & i).Copy Sheet1.Range("I3").Offset(r - 1)
            r = r + 1
        End If
    Next i
    End Sub
     
    Upvote 0
    Vẫn là nối tiếp của bài tập bên trên. Lời giải của bài tập này em tham khảo được đoạn code trong File đính kèm dưới đây của tác giả Anhtuan1066 .

    Trong đoạn code đó , có chỗ tác giả viết (dòng thứ 3 từ cuối lên) : Range("Sheet2!A9:E2000").Sort Key1:=Range("A9"), Order1:=xlAscending

    Tuy nhiên em không hiểu câu lệnh trên có ngụng ý gì ? Em đã thử xóa nó đi nhưng thấy code vẫn chạy bình thường ạ. Em muốn mọi người

    giải thích hộ em câu lệnh trên , tác dụng của nó để làm gì ạ.



     

    File đính kèm

    Upvote 0
    Để sort dữ liệu theo ngày tháng thôi (sort cột A). Không thích sort thì bỏ đi
    (Nhìn lại code ngày xưa mình viết thấy mắc cười quá --=0)

    Có xem lại mấy bài tập toán mình làm ngày xưa chưa vậy? Hồi còn "uổng chờ tứa măm" đó.
    Chắc cũng "mắc cười" lắm.
    "Tuổi nhỏ làm việc nhỏ" thôi mà. Ẹc..
     
    Upvote 0
    Để sort dữ liệu theo ngày tháng thôi (sort cột A). Không thích sort thì bỏ đi
    (Nhìn lại code ngày xưa mình viết thấy mắc cười quá --=0)

    Oa..... Oa!!!! --=0 --=0. Người đó chính là chú ạ. Trên diễn đàn, vào lại các bài cũ cũ , con có được đọc nhiều bài viết của tác giả Anhtuan1066 này và thấy rất hay (con thấy khoái nhất là cái vụ dùng hàm để tách riêng các số lẫn với các ký tự khác trong 1 chuỗi, phương pháp làm quả thất là rất bá đạo :-=:-=:-= hi hi.) không ngờ hôm nay con mới biết 2 người lại là một. Thì ra tên thật của chú là chú Tuấn , hi hi..../-*+//-*+/
     
    Lần chỉnh sửa cuối:
    Upvote 0
    Oa..... Oa!!!! --=0 --=0. Người đó chính là chú ạ. Trên diễn đàn, vào lại các bài cũ cũ , con có được đọc nhiều bài viết của tác giả Anhtuan1066 này và thấy rất hay (con thấy khoái nhất là cái vụ dùng hàm để tách riêng các số lẫn với các ký tự khác trong 1 chuỗi, phương pháp làm quả thất là rất bá đạo :-=:-=:-= hi hi.) không ngờ hôm nay con mới biết 2 người lại là một. Thì ra tên thật của chú là chú Tuấn , hi hi..../-*+//-*+/
    Trời ơi, nhờ bạn mà giờ tôi mới biết là tuy 2 mà 1 đó nha! --=0--=0--=0
     
    Upvote 0
    Trời ơi, nhờ bạn mà giờ tôi mới biết là tuy 2 mà 1 đó nha! --=0--=0--=0

    Anh Trọng Nghĩa đây tham gia diễn đàn cũng khá là lâu rồi, hơn nữa lại còn là thành viên trong BQT nữa, vậy mà giờ cũng mới biết thì chứng tỏ 1 điều hành tung của chú ndu quả thật quá bí ẩn....||||||||||||||||||||
     
    Upvote 0
    Bạn tham khảo cặp macro này thử coi:

    PHP:
    Option Explicit
    Sub GPE(Sh As Worksheet)
     MsgBox Sh.Name
    End Sub
    Mã:
    Sub Main()
     Dim ShName As String, J As Byte
     For J = 1 To 3
        GPE Worksheets("sheet" & CStr(J))
     Next J
    End Sub
     
    Upvote 0
    Web KT

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

    Back
    Top Bottom