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:
    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