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:
Mình mới học lập trình excel cần mọi người giúp đỡ vấn đề này:
Mình có 2 file excel cùng thư mục, một file chứa lịch sử hoạt động, file còn lại để báo cáo.
Mình muốn lập 1 hàm vba để lấy dữ liệu ngày mới nhất từ file lịch sử để đưa vào một ô trong file báo cáo.
Mã:
Public Function Solieu() As Variant
Dim s As Variant
s = GetValue(ActiveWorkbook.path, "Lichsu.xls", "8.2017", "a7")
MsgBox s
Solieu = s
End Function
Khi gọi số liệu bằng msgbox thì hiển thị được, nhưng ghi gọi bằng hàm thì lỗi #value. Mình không hiểu như thế nào. Mọi người giúp đỡ ạ
Bạn muốn tạo hàm thì phải cho hàm các đối số.
Như ở đây bạn tạo hàm Solieu thì cho Solieu các đối số, ví dụ như
Mã:
Public Function Solieu(ByVal wPath As String, ByVal wName As String, ByVal Ngay As String, ByVal DiaChi As String) As Variant
    Dim s As Variant
    s = GetValue(wPath, wName, Ngay, DiaChi)
    Solieu = s
End Function
Khi gọi hàm Solieu thì cho phần sau vào
Mã:
ActiveWorkbook.path, "Lichsu.xls", "8.2017", "a7"
chú ý cái ActiveWorkbook.path thì chuyển thành đường dẫn cụ thể
 
Upvote 0
chỉ cần đặt tên ảnh như trong video là ok

Cám ơn Minh Tùng, mình đã làm theo cách của bạn và rất ổn, không biết nói cảm ơn thế nào.
Nhưng mình lại gặp vấn đề, trong file dữ liệu có ảnh và tên SP, giờ có khoảng 1000 cái ảnh thì có cách nào để đặt tên tự động không, chứ làm từng cái thì cũng được nhưng thủ công quá.
 
Upvote 0
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ị?
 
Upvote 0
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ị?
Bạn hãy đưa tên Workbook vào 1 biến dạng như


Mã:
Dim WbName as String

WbName = “OVT Report *** 2017.xlsm"


With Application.Workbooks(WbName).Sheets("OVT")


Việc thay cái *** thì bạn thay tùy ý thôi.
 
Upvote 0
Bạn hãy đưa tên Workbook vào 1 biến dạng như


Mã:
Dim WbName as String

WbName = “OVT Report *** 2017.xlsm"


With Application.Workbooks(WbName).Sheets("OVT")


Việc thay cái *** thì bạn thay tùy ý thôi.

Ý 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
 
Upvote 0
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

  • Book1.xlsm
    17.1 KB · Đọc: 4
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
Web KT
Back
Top Bottom