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:
Các anh chị cho mình hỏi với:
Mã:
Dim Str
Str = Format(Abs(Number), "000000000000000000")
ý nghĩa "000000000000000000" ở đây là gì vậy. Nhờ các anh chị giải thích giúp mình với
 
Upvote 0
Các anh chị cho mình hỏi với:
Mã:
Dim Str
Str = Format(Abs(Number), "000000000000000000")
ý nghĩa "000000000000000000" ở đây là gì vậy. Nhờ các anh chị giải thích giúp mình với
Định dạng số với bằng ấy con số. Thí dụ Format(1234, "0000000") sẽ thành "0001234"
 
Upvote 0
Em chào A/C,
Em đang muốn lấy giá trị của ô Em đang nhập dữ liệu dở trong ô (em vẫn chưa chuyển con trỏ sang ô khác) thì code sẽ lấy giá trị vào ô B1 theo giá trị em đang nhập dở trong ô hiện hành.
VD: chữ Việt nam. Nếu em đang nhập vào ô hiện hành được chữ Việt -> Thì kết quả ô B1 sẽ hiện lên chữ Việt
Hiện tại Em đang viết code:
Range("B1").Value = Cells(Target.Row, Target.Column)
Code này phải nhập xong trong ô và chuyển sang ô khác thì giá trị nó mới lấy lên ô B1. Mong A/C giúp Em. Cảm ơn A/C nhiều!
 
Upvote 0
Code này phải nhập xong trong ô và chuyển sang ô khác thì giá trị nó mới lấy lên ô B1. Mong A/C giúp Em. Cảm ơn A/C nhiều!
Bắt buộc phải vậy, Sheet Excel không có sự kiện changing, chỉ có sự kiện change. Textbox trong user form thì có
Với lại chỉ cần Range("B1").Value = Target.Value
 
Upvote 0
Gia đình mình cho em hỏi, Sự kiện Keydown trên Userform thì em biết làm, còn trên một ô thì mình viết thế nào anh chị nhỉ?
Ví dụ khi trỏ chuột tại ô A1, Em muốn khi bấm phím Enter (hoặc phím bất kỳ) thì nó sẽ chạy macro "Macro1".
Nhờ a chị chỉ giúp ạ!
 
Upvote 0
Gia đình mình cho em hỏi, Sự kiện Keydown trên Userform thì em biết làm, còn trên một ô thì mình viết thế nào anh chị nhỉ?
Ví dụ khi trỏ chuột tại ô A1, Em muốn khi bấm phím Enter (hoặc phím bất kỳ) thì nó sẽ chạy macro "Macro1".
Nhờ a chị chỉ giúp ạ!
Làm được, và code rất là dài.
 
Upvote 0
Gia đình mình cho em hỏi, Sự kiện Keydown trên Userform thì em biết làm, còn trên một ô thì mình viết thế nào anh chị nhỉ?
Ví dụ khi trỏ chuột tại ô A1, Em muốn khi bấm phím Enter (hoặc phím bất kỳ) thì nó sẽ chạy macro "Macro1".
Nhờ a chị chỉ giúp ạ!
Chỉ rồi thì có làm được hơm? Hay là anh chị viết luôn cho em chứ em "gà VBA lắm"
 
Upvote 0
Em chào A/C,
Em đang muốn xây dựng đoạn code cứ 15 giây thì code chạy sub DuLieu 1 lần (có nút bấm chạy và dừng).
Hiện tại Em mới mày mò ra được đoạn code nếu bấm vào thì sau 15 giây nó đã chạy. Nhưng sau đó nó chưa lặp lại được ạ. Đây là đoạn code của Em:
Sub CapNhatDuLieu()
Application.OnTime Now + TimeSerial(0, 0, 15), "DuLieu"
End Sub
Mong A/C giúp Em hoàn thiện tiếp đoạn code trên. Em cảm ơn A/C!
 
Upvote 0
hình như chưa điền đúng tên sub
Mã:
Sub CapNhatDuLieu()
Application.OnTime Now + TimeSerial(0, 0, 15), "CapNhatDuLieu"
End Sub
 
Upvote 0
Em chào A/C,
Em đang muốn xây dựng đoạn code cứ 15 giây thì code chạy sub DuLieu 1 lần (có nút bấm chạy và dừng).
Hiện tại Em mới mày mò ra được đoạn code nếu bấm vào thì sau 15 giây nó đã chạy. Nhưng sau đó nó chưa lặp lại được ạ. Đây là đoạn code của Em:
Sub CapNhatDuLieu()
Application.OnTime Now + TimeSerial(0, 0, 15), "DuLieu"
End Sub
Mong A/C giúp Em hoàn thiện tiếp đoạn code trên. Em cảm ơn A/C!
Như thế này mới được.
Mã:
Sub CapNhatDuLieu()
       Application.OnTime Now + TimeSerial(0, 0, 15), " CapNhatDuLieu"
       Call DuLieu
End Sub
 
Upvote 0
Như thế này mới được.
Mã:
Sub CapNhatDuLieu()
       Application.OnTime Now + TimeSerial(0, 0, 15), " CapNhatDuLieu"
       Call DuLieu
End Sub
Em cảm ơn Anh, code chạy ngon lành Anh ạ.
Nếu Em tạo thêm 2 nút bấm "Cập nhật liên tục" và "Dừng" Anh và các bạn có thể giúp Em thêm code cho 2 nút bấm này được không ạ? Em cảm ơn nhiều!
 
Upvote 0
Nếu Em tạo thêm 2 nút bấm "Cập nhật liên tục" và "Dừng" Anh và các bạn có thể giúp Em thêm code cho 2 nút bấm này được không ạ? Em cảm ơn nhiều!
1. Ở đầu module khai báo biến toàn cục
Mã:
Private lastTime As Double


2. Sửa CapNhatDuLieu thành
Mã:
Sub CapNhatDuLieu(ByVal start As Boolean)
    If start Then
        lastTime = Now + TimeSerial(0, 0, 15)
        Application.OnTime lastTime, "DuLieu"
    ElseIf lastTime <> 0 Then
        Application.OnTime lastTime, "DuLieu", , False
        lastTime = 0
    End If
End Sub

3. Trong sub DuLieu ở trước dòng End Sub hãy thêm dòng
Mã:
CapNhatDuLieu True

4.
Khi muốn BẬT thì
Mã:
CapNhatDuLieu True

Khi muốn TẮT thì
Mã:
CapNhatDuLieu False
 
Upvote 0
1. Ở đầu module khai báo biến toàn cục
Mã:
Private lastTime As Double


2. Sửa CapNhatDuLieu thành
Mã:
Sub CapNhatDuLieu(ByVal start As Boolean)
    If start Then
        lastTime = Now + TimeSerial(0, 0, 15)
        Application.OnTime lastTime, "DuLieu"
    ElseIf lastTime <> 0 Then
        Application.OnTime lastTime, "DuLieu", , False
        lastTime = 0
    End If
End Sub

3. Trong sub DuLieu ở trước dòng End Sub hãy thêm dòng
Mã:
CapNhatDuLieu True

4.
Khi muốn BẬT thì
Mã:
CapNhatDuLieu True

Khi muốn TẮT thì
Mã:
CapNhatDuLieu False
Tuyệt quá, Em làm theo code chạy như mong đợi rồi Anh ạ. Cảm ơn Anh và mọi người rất nhiều!
 
Upvote 0
1. Ở đầu module khai báo biến toàn cục
Mã:
Private lastTime As Double


2. Sửa CapNhatDuLieu thành
Mã:
Sub CapNhatDuLieu(ByVal start As Boolean)
    If start Then
        lastTime = Now + TimeSerial(0, 0, 15)
        Application.OnTime lastTime, "DuLieu"
    ElseIf lastTime <> 0 Then
        Application.OnTime lastTime, "DuLieu", , False
        lastTime = 0
    End If
End Sub

3. Trong sub DuLieu ở trước dòng End Sub hãy thêm dòng
Mã:
CapNhatDuLieu True

4.
Khi muốn BẬT thì
Mã:
CapNhatDuLieu True

Khi muốn TẮT thì
Mã:
CapNhatDuLieu False

Em đang tập nghiên cứu code, nhân đoạn code này Em dịch như sau. Mong A/C xem và sửa giúp Em:
Mã:
Sub CapNhatDuLieu(ByVal start As Boolean)    
    If start Then    
(Nếu biến start là True thì)

        lastTime = Now + TimeSerial(0, 0, 15)     
(Gán lastTime với lịch trình thời gian hiện tại + 15 giây)    
                                                                      
        Application.OnTime lastTime, "DuLieu"                 
(Chạy Sub DuLieu, sau 15 giây kể từ bây giờ)

    ElseIf lastTime <> 0 Then                 
(Ngược lại nếu lastTime <>0 thì... Chỗ này Em đang chưa hiểu lắm? Em có thử sửa lại: ElseIf Start=False Then  -> để theo cái if start = true ở trên. Thì code có chạy được. Em sửa như vậy thì có sao ko Anh nhỉ?)     
                                               
        Application.OnTime lastTime, "DuLieu", , False     
(Chạy Sub DuLieu, sau 15 giây kể từ bây giờ, , dừng thủ tục)       
                                                                                  
        lastTime = 0                                                           
(Khi dừng thủ tục thì gán lastTime =0 )

    End If
End Sub
 
Upvote 0
Em đang tập nghiên cứu code, nhân đoạn code này Em dịch như sau. Mong A/C xem và sửa giúp Em:
Mã:
Sub CapNhatDuLieu(ByVal start As Boolean)   
    If start Then   
(Nếu biến start là True thì)

        lastTime = Now + TimeSerial(0, 0, 15)    
(Gán lastTime với lịch trình thời gian hiện tại + 15 giây)   
                                                                     
        Application.OnTime lastTime, "DuLieu"                
(Chạy Sub DuLieu, sau 15 giây kể từ bây giờ)

    ElseIf lastTime <> 0 Then                
(Ngược lại nếu lastTime <>0 thì... Chỗ này Em đang chưa hiểu lắm? Em có thử sửa lại: ElseIf Start=False Then  -> để theo cái if start = true ở trên. Thì code có chạy được. Em sửa như vậy thì có sao ko Anh nhỉ?)    
                                              
        Application.OnTime lastTime, "DuLieu", , False    
(Chạy Sub DuLieu, sau 15 giây kể từ bây giờ, , dừng thủ tục)      
                                                                                 
        lastTime = 0                                                          
(Khi dừng thủ tục thì gán lastTime =0 )

    End If
End Sub
Đặt chỗ đó Start = False thì hóa ra true, false gì cũng chạy cả, bạn không thể dừng code được.
 
Upvote 0
Web KT

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

Back
Top Bottom