Topic Những câu hỏi về code, xin giải thích các code... đã quá dài nên mình đóng nó lại và mở topic khác
Tất cả những bài viết liên quan đến việc nhờ giải thích, xử lý và gỡ rối code VBA, các bạn vui lòng đăng tại đây!
Cảm ơn
Copy file vào file là trường hợp cực chẳng đã, không phải là công việc thường xuyên và có tính chất lâu dài.
Miễn nó hoạt động đúng là được rồi, đâu cần phải nhanh.
Nếu việc copy data trở thành công việc thường xuyên thì phải xem lại quy trình làm việc của cty. Có thể dùng phương pháp khác sẽ dễ kiểm soát hơn.
Cứ vài ngày mà phải copy 300 files thì hơi lãng phí.
Nếu là tôi thì thử thí nghiệm cách nhận data theo dạng csv, append chúng vào thành 1 file rồi import vào file tổng. Import xuyên qua Access cũng là 1 cách kiểm soát tốt.
Nhờ các thầy và các anh chỉnh sửa lại code giúp cho em với ạ.
- Khi Enter thì thời gian chạy không có vấn đề gì. Nhưng thời gian chạy lùi không chạy hẳn về "0:00" mà chỉ đến "0:01" rồi đánh chuông và chuyển sang thời gian nghỉ. Kể cả thời gian nghỉ chạy lùi cũng vậy, về đến "0:01" là đã đánh chuông rồi mà không phải là về hẳn "0:00". Do vậy mà thời gian nó như kiểu bị trễ giây ý ạ, và lúc chuyển sang thời gian nghỉ giữa hiệp nó cũng bị mất đi 1s đầu ạ.
---> Chỉnh lại giúp em là: Khi thời gian chạy lùi về "0:00" thì mới đánh chuông (Cả Thời gian thi đấu lẫn Thời gian nghỉ giữa hiệp), sau đó mới chuyển sang sự kiện tiếp theo.
Em cảm ơn ạ.
Nhờ các thầy và các anh chỉnh sửa lại code giúp cho em với ạ.
- Khi Enter thì thời gian chạy không có vấn đề gì. Nhưng thời gian chạy lùi không chạy hẳn về "0:00" mà chỉ đến "0:01" rồi đánh chuông và chuyển sang thời gian nghỉ. Kể cả thời gian nghỉ chạy lùi cũng vậy, về đến "0:01" là đã đánh chuông rồi mà không phải là về hẳn "0:00". Do vậy mà thời gian nó như kiểu bị trễ giây ý ạ, và lúc chuyển sang thời gian nghỉ giữa hiệp nó cũng bị mất đi 1s đầu ạ.
---> Chỉnh lại giúp em là: Khi thời gian chạy lùi về "0:00" thì mới đánh chuông (Cả Thời gian thi đấu lẫn Thời gian nghỉ giữa hiệp), sau đó mới chuyển sang sự kiện tiếp theo.
Em cảm ơn ạ.
Xin chào các bạn. Cho mình hỏi: Mình viết 1 code sau, và cho vào thành addin
Sub Auto_open()
On Error Resume Next
Dim i As Long, Tenfile as String
i = Workbooks.Count
Tenfile = Workbooks(i).Name
If Right(Tenfile, 3) = "xls" Then
MsgBox "HE THONG KHONG HO TRO MO DINH DANG FILE NAY"
Workbooks(i).Close Save = False
End If
End Sub
Mục đích: Mỗi khi mở từ file thứ 2 trở đi. mà mở file Excel có đuôi là xls (Định dạng 2003), thì sẽ không cho mở. Nhưng không hiểu sao Addin không tự động chạy mặc dù là Auto_open. Vậy có cách nào khác không, hay code bị lỗi đoạn nào vậy. Mình cảm ơn
Xin chào các bạn. Cho mình hỏi: Mình viết 1 code sau, và cho vào thành addin
Sub Auto_open()
On Error Resume Next
Dim i As Long, Tenfile as String
i = Workbooks.Count
Tenfile = Workbooks(i).Name
If Right(Tenfile, 3) = "xls" Then
MsgBox "HE THONG KHONG HO TRO MO DINH DANG FILE NAY"
Workbooks(i).Close Save = False
End If
End Sub
Mục đích: Mỗi khi mở từ file thứ 2 trở đi. mà mở file Excel có đuôi là xls (Định dạng 2003), thì sẽ không cho mở. Nhưng không hiểu sao Addin không tự động chạy mặc dù là Auto_open. Vậy có cách nào khác không, hay code bị lỗi đoạn nào vậy. Mình cảm ơn
Code AddIn kiểu này chắc chắn không hoạt động, bởi Sub Autpen chỉ chạy 1 lần duy nhất khi kích hoạt AddIn mà thôi, và code sẽ không "nhìn" thấy được các file mở sau đó
Muốn làm được yêu cầu trên phải dùng Class. Quy trình như sau:
1> Chèn 1 Class Module, đặt tên là clsWkbEvents
Code trong Class Module:
Mã:
Public WithEvents ExlApp As Application
Private Sub Class_Initialize()
Set ExlApp = Application
End Sub
Private Sub Class_Terminate()
Set ExlApp = Nothing
End Sub
Private Sub ExlApp_WorkbookOpen(ByVal Wb As Workbook)
If UCase(Right(Wb.FullName, 3)) = "XLS" Then
MsgBox "HE THONG KHÔNG HO TRO MO DINH DANG FILE NÀY"
Wb.Close False
End If
End Sub
2> Chèn 1 Module đặt tên tùy ý, với code:
Mã:
Dim ExlObj As New clsWkbEvents
Sub Auto_Open()
If ExlObj Is Nothing Then Set ExlObj = New clsWkbEvents
End Sub
Sub Auto_Close()
Set ExlObj = Nothing
End Sub
Giờ Save As file thành XLAM, kích hoạt AddIn và test thử
Code AddIn kiểu này chắc chắn không hoạt động, bởi Sub Autpen chỉ chạy 1 lần duy nhất khi kích hoạt AddIn mà thôi, và code sẽ không "nhìn" thấy được các file mở sau đó
Muốn làm được yêu cầu trên phải dùng Class. Quy trình như sau:
1> Chèn 1 Class Module, đặt tên là clsWkbEvents
Code trong Class Module:
Mã:
Public WithEvents ExlApp As Application
Private Sub Class_Initialize()
Set ExlApp = Application
End Sub
Private Sub Class_Terminate()
Set ExlApp = Nothing
End Sub
Private Sub ExlApp_WorkbookOpen(ByVal Wb As Workbook)
If UCase(Right(Wb.FullName, 3)) = "XLS" Then
MsgBox "HE THONG KHÔNG HO TRO MO DINH DANG FILE NÀY"
Wb.Close False
End If
End Sub
2> Chèn 1 Module đặt tên tùy ý, với code:
Mã:
Dim ExlObj As New clsWkbEvents
Sub Auto_Open()
If ExlObj Is Nothing Then Set ExlObj = New clsWkbEvents
End Sub
Sub Auto_Close()
Set ExlObj = Nothing
End Sub
Giờ Save As file thành XLAM, kích hoạt AddIn và test thử
Code AddIn kiểu này chắc chắn không hoạt động, bởi Sub Autpen chỉ chạy 1 lần duy nhất khi kích hoạt AddIn mà thôi, và code sẽ không "nhìn" thấy được các file mở sau đó
Muốn làm được yêu cầu trên phải dùng Class. Quy trình như sau:
1> Chèn 1 Class Module, đặt tên là clsWkbEvents
Code trong Class Module:
Mã:
Public WithEvents ExlApp As Application
Private Sub Class_Initialize()
Set ExlApp = Application
End Sub
Private Sub Class_Terminate()
Set ExlApp = Nothing
End Sub
Private Sub ExlApp_WorkbookOpen(ByVal Wb As Workbook)
If UCase(Right(Wb.FullName, 3)) = "XLS" Then
MsgBox "HE THONG KHÔNG HO TRO MO DINH DANG FILE NÀY"
Wb.Close False
End If
End Sub
2> Chèn 1 Module đặt tên tùy ý, với code:
Mã:
Dim ExlObj As New clsWkbEvents
Sub Auto_Open()
If ExlObj Is Nothing Then Set ExlObj = New clsWkbEvents
End Sub
Sub Auto_Close()
Set ExlObj = Nothing
End Sub
Giờ Save As file thành XLAM, kích hoạt AddIn và test thử
Xin chào các bạn. Cho mình hỏi: Mình viết 1 code sau, và cho vào thành addin
Sub Auto_open()
On Error Resume Next
Dim i As Long, Tenfile as String
i = Workbooks.Count
Tenfile = Workbooks(i).Name
If Right(Tenfile, 3) = "xls" Then
MsgBox "HE THONG KHONG HO TRO MO DINH DANG FILE NAY"
Workbooks(i).Close Save = False
End If
End Sub
Mục đích: Mỗi khi mở từ file thứ 2 trở đi. mà mở file Excel có đuôi là xls (Định dạng 2003), thì sẽ không cho mở. Nhưng không hiểu sao Addin không tự động chạy mặc dù là Auto_open. Vậy có cách nào khác không, hay code bị lỗi đoạn nào vậy. Mình cảm ơn
Dim WithEvents app As Excel.Application
Private Sub app_WorkbookOpen(ByVal Wb As Workbook)
On Error Resume Next
If Application.Workbooks.Count >= 2 Then
If Strings.UCase(Strings.Right$(Wb.Name, 3)) = "XLS" Then
MsgBox "He thong khong ho tro loai file nay"
Wb.Close False
End If
End If
End Sub
Private Sub Workbook_BeforeClose(Cancel As Boolean)
'Set app = Nothing
End Sub
Private Sub Workbook_Open()
Set app = Application
End Sub
Dim WithEvents app As Excel.Application
Private Sub app_WorkbookOpen(ByVal Wb As Workbook)
On Error Resume Next
If Application.Workbooks.Count >= 2 Then
If Strings.UCase(Strings.Right$(Wb.Name, 3)) = "XLS" Then
MsgBox "He thong khong ho tro loai file nay"
Wb.Close False
End If
End If
End Sub
Private Sub Workbook_BeforeClose(Cancel As Boolean)
'Set app = Nothing
End Sub
Private Sub Workbook_Open()
Set app = Application
End Sub