Chuyên đề giải đáp những thắc mắc về code VBA (4 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