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:
Cho em hỏi Code sau:
PHP:
With Application.Workbooks("OVT Report Aug 2017.xlsm").Sheets("OVT")
Code trên dùng để xuất dữ liệu từ file mẹ sang file đang mở là OVT Report Aug 2017.xlsm. Vì vậy hàng tháng em lại phải mở code để sửa đổi phần 3 ký tự này. Có cách nào thay thế bằng ký tự chung chung kiểu như
With Application.Workbooks("OVT Report *** 2017.xlsm").Sheets("OVT") không anh chị?
Ý anh là sang tháng mới thì tên file chỗ *** đó cũng đổi theo ạ? Hay là sao?
 
Upvote 0
Mình chỉ biết tạo một macro Auto_open, code như sau để mỗi lần mở file là nó mở luôn form để nhập liệu.

Sub Auto_open()
NhapLieu.Show
End Sub

Nhưng mình cần là mỗi lần mở file thì không mở form, chỉ khi nào mình bấm phím tắt thì mới mở form. Bạn nào biết có thể giúp mình với. Thanks
 
Upvote 0
Mình chỉ biết tạo một macro Auto_open, code như sau để mỗi lần mở file là nó mở luôn form để nhập liệu.

Sub Auto_open()
NhapLieu.Show
End Sub

Nhưng mình cần là mỗi lần mở file thì không mở form, chỉ khi nào mình bấm phím tắt thì mới mở form. Bạn nào biết có thể giúp mình với. Thanks
anh thử làm như thế này nghen
đầu tiên tạo một sub ShowForm trong module nào đó
Mã:
Sub ShowForm()
    NhapLieu.Show
End Sub
tiếp đó ra bảng tính làm như hình

upload_2017-9-8_12-12-22.png
 
Upvote 0
Mình chỉ biết tạo một macro Auto_open, code như sau để mỗi lần mở file là nó mở luôn form để nhập liệu.

Sub Auto_open()
NhapLieu.Show
End Sub

Nhưng mình cần là mỗi lần mở file thì không mở form, chỉ khi nào mình bấm phím tắt thì mới mở form. Bạn nào biết có thể giúp mình với. Thanks
Kiểu như thế này à anh? Em không biết nhiều, gà gà làm cho anh thôi. hehe.
Hiện form: phím Ctrl + f nhé!
 

File đính kèm

Upvote 0
Ý mình cái tên file OVT Report *** 2017.xlsm chỗ *** hàng tháng phải thay đổi nên trong code cũng cần thay đổi theo để nó biết làm việc với file tên là gì. Mình thử cách của bạn thì báo lỗi không thấy file nào tên thế. File hiện tên là OVT Report Sep 2017.xlsm
Đã giợi ý cho bạn việc đưa tên Wb vào 1 chuỗi, còn biến đổi thêm thì bạn tự tìm nhé, trên diễn đã có rất nhiều.
 
Upvote 0
anh thử làm như thế này nghen
đầu tiên tạo một sub ShowForm trong module nào đó
Mã:
Sub ShowForm()
    NhapLieu.Show
End Sub
tiếp đó ra bảng tính làm như hình

View attachment 182761
Kiểu như thế này à anh? Em không biết nhiều, gà gà làm cho anh thôi. hehe.
Hiện form: phím Ctrl + f nhé!

Qua hướng dẫn của 2 bạn thì mình phát hiện ra vấn đề của mình. Về cơ bản thì cách làm của mình giống 2 bạn nhưng khác ở tên của thủ tục. Nếu đặt là Auto_0pen thì khi mở nó tự load form lên luôn, còn đặt tên khác đi thì khi bấm phím tắt nó mới load. Cái này có thể là do Auto_0pen là một tên mặc định có sẵn của VBA hay gì đó mà mà mình vẫn chưa hiểu. Cảm ơn hai bạn.
 
Upvote 0
Qua hướng dẫn của 2 bạn thì mình phát hiện ra vấn đề của mình. Về cơ bản thì cách làm của mình giống 2 bạn nhưng khác ở tên của thủ tục. Nếu đặt là Auto_0pen thì khi mở nó tự load form lên luôn, còn đặt tên khác đi thì khi bấm phím tắt nó mới load. Cái này có thể là do Auto_0pen là một tên mặc định có sẵn của VBA hay gì đó mà mà mình vẫn chưa hiểu. Cảm ơn hai bạn.
bao nhiêu tên hay sao anh hem đặt như "Sub heo_dat_ham_an" nè
Sub Auto_ Open rơi vào đúng từ khóa của VBA, nó tương tự với sự với sự kiện Open() của workbook đó anh
Mã:
Private Sub Workbook_Open()
'...
End Sub
 
Upvote 0
Qua hướng dẫn của 2 bạn thì mình phát hiện ra vấn đề của mình. Về cơ bản thì cách làm của mình giống 2 bạn nhưng khác ở tên của thủ tục. Nếu đặt là Auto_0pen thì khi mở nó tự load form lên luôn, còn đặt tên khác đi thì khi bấm phím tắt nó mới load. Cái này có thể là do Auto_0pen là một tên mặc định có sẵn của VBA hay gì đó mà mà mình vẫn chưa hiểu. Cảm ơn hai bạn.
Thử dùng cái này xem.
http://www.automateexcel.com/vba/run-macro-excel-close
 
Upvote 0
bao nhiêu tên hay sao anh hem đặt như "Sub heo_dat_ham_an" nè
Sub Auto_ Open rơi vào đúng từ khóa của VBA, nó tương tự với sự với sự kiện Open() của workbook đó anh
Mã:
Private Sub Workbook_Open()
'...
End Sub
Cái ý đâu phải là từ khóa gì đâu, đơn thuần là tên của một thủ tục, khi mờ file excel sẽ tự chạy nó mà không cần người dùng phải kích chạy.
 
Upvote 0
Upvote 0
Đây là code thời gian chạy lùi trong file:

Option Explicit
Private Sub Cmd_Click()
Dim Dat As Double, kt As Double, Check As Boolean
Check = (Cmd.Caption = "Show Form")
Cmd.Caption = IIf(Check, "Close Form", "Show Form")
Dat = TimeValue("00:00:05")
If Check Then
UserForm1.Show
Do
UserForm1.Label1.Caption = Format(Dat, "hh:mm:ss")
Dat = Dat - TimeValue("00:00:01")
kt = Timer
Do While Timer - kt < 1
DoEvents
If UserForm1.Label1.Caption = "00:00:00" Then
MsgBox "Het thoi gian nghi.": Exit Sub
End If
Loop
Loop
Else
Unload UserForm1: Exit Sub
End If
End Sub
----------------------------
- Giờ muốn cho nó chạy tiến thì chỉnh lại thế nào vậy mọi người? Cho nó chạy tiến, khi nào nhấn Close Form thì tắt ạ.
Trích dẫn: đây là file thầy Ndu cung cấp ạ.
 

File đính kèm

Upvote 0
Mấy hôm nay thread vắng tanh..
 
Lần chỉnh sửa cuối:
Upvote 0
Đây là code thời gian chạy lùi trong file:

Option Explicit
Private Sub Cmd_Click()
Dim Dat As Double, kt As Double, Check As Boolean
Check = (Cmd.Caption = "Show Form")
Cmd.Caption = IIf(Check, "Close Form", "Show Form")
Dat = TimeValue("00:00:05")
If Check Then
UserForm1.Show
Do
UserForm1.Label1.Caption = Format(Dat, "hh:mm:ss")
Dat = Dat - TimeValue("00:00:01")
kt = Timer
Do While Timer - kt < 1
DoEvents
If UserForm1.Label1.Caption = "00:00:00" Then
MsgBox "Het thoi gian nghi.": Exit Sub
End If
Loop
Loop
Else
Unload UserForm1: Exit Sub
End If
End Sub
----------------------------
- Giờ muốn cho nó chạy tiến thì chỉnh lại thế nào vậy mọi người? Cho nó chạy tiến, khi nào nhấn Close Form thì tắt ạ.
Trích dẫn: đây là file thầy Ndu cung cấp ạ.
Bạn sửa như sau
Mã:
Private Sub Cmd_Click()
  Dim Dat As Double, kt As Double, Check As Boolean
  Check = (Cmd.Caption = "Show Form")
  Cmd.Caption = IIf(Check, "Close Form", "Show Form")
  Dat = TimeValue("00:00:00")
  If Check Then
    UserForm1.Show
    Do
      UserForm1.Label1.Caption = Format(Dat, "hh:mm:ss")
      Dat = Dat + TimeValue("00:00:01")
      kt = Timer
      Do While Timer - kt < 1
        DoEvents
        If UserForm1.Label1.Caption = "00:00:05" Then
          MsgBox "Het thoi gian nghi.": Exit Sub
        End If
    Loop
    Loop
  Else
    Unload UserForm1: Exit Sub
  End If
End Sub
 
Upvote 0
Bạn sửa như sau
Mã:
Private Sub Cmd_Click()
  Dim Dat As Double, kt As Double, Check As Boolean
  Check = (Cmd.Caption = "Show Form")
  Cmd.Caption = IIf(Check, "Close Form", "Show Form")
  Dat = TimeValue("00:00:00")
  If Check Then
    UserForm1.Show
    Do
      UserForm1.Label1.Caption = Format(Dat, "hh:mm:ss")
      Dat = Dat + TimeValue("00:00:01")
      kt = Timer
      Do While Timer - kt < 1
        DoEvents
        If UserForm1.Label1.Caption = "00:00:05" Then
          MsgBox "Het thoi gian nghi.": Exit Sub
        End If
    Loop
    Loop
  Else
    Unload UserForm1: Exit Sub
  End If
End Sub
Dạ cảm ơn anh ạ. Vậy là theo code này thì vẫn có thời gian quy định đến bao nhiêu sẽ báo hết thời gian chứ không phải là để chạy tự do đến khi nào nhấn dừng thì thôi.
Vậy thì ta cứ chỉnh phần:
If UserForm1.Label1.Caption = "00:00:05" Then
MsgBox "Het thoi gian nghi.": Exit Sub
chỗ "00:00:05" thành "23:00:00" chẳng hạn là có thể vô tư ngồi nhìn nó chạy rồi.
Cảm ơn anh ạ!
 
Upvote 0
Web KT

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

Back
Top Bottom