Chuyên mục xử lý, gỡ rối code VBA (1 người xem)

Liên hệ QC

Người dùng đang xem chủ đề này

Status
Không mở trả lời sau này.

ndu96081631

Huyền thoại GPE
Thành viên BQT
Super Moderator
Tham gia
5/6/08
Bài viết
30,703
Được thích
53,957
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
  1. Sub Auto_open()
  2. On Error Resume Next
  3. Dim i As Long, Tenfile as String
  4. i = Workbooks.Count
  5. Tenfile = Workbooks(i).Name
  6. If Right(Tenfile, 3) = "xls" Then
  7. MsgBox "HE THONG KHONG HO TRO MO DINH DANG FILE NAY"
  8. Workbooks(i).Close Save = False
  9. End If
  10. 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
 
Upvote 0
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
  1. Sub Auto_open()
  2. On Error Resume Next
  3. Dim i As Long, Tenfile as String
  4. i = Workbooks.Count
  5. Tenfile = Workbooks(i).Name
  6. If Right(Tenfile, 3) = "xls" Then
  7. MsgBox "HE THONG KHONG HO TRO MO DINH DANG FILE NAY"
  8. Workbooks(i).Close Save = False
  9. End If
  10. 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 Auto_Open 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ử
 
Upvote 0
Code AddIn kiểu này chắc chắn không hoạt động, bởi Sub Auto_Open 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ử

Đụng đến "Class Module" thì e chỉ bít Copy và Paste chứ chưa thể hiểu được. Addin chạy ngon lành. Cảm ơn thầy nhiều. Chúc thầy buổi chiều vui vẻ :)
 
Upvote 0
Code AddIn kiểu này chắc chắn không hoạt động, bởi Sub Auto_Open 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ử
Thầy ơi, chưa lần nào thầy sửa giúp e cả. Hix..
 
Upvote 0
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
  1. Sub Auto_open()
  2. On Error Resume Next
  3. Dim i As Long, Tenfile as String
  4. i = Workbooks.Count
  5. Tenfile = Workbooks(i).Name
  6. If Right(Tenfile, 3) = "xls" Then
  7. MsgBox "HE THONG KHONG HO TRO MO DINH DANG FILE NAY"
  8. Workbooks(i).Close Save = False
  9. End If
  10. 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
Dán đoạn code này vào thisworkbook là được.

Mã:
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
 
Upvote 0
Dán đoạn code này vào thisworkbook là được.

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

Bạn ơi. Vấn đề là cái workbook mà đuôi xls, đâu pải là của mình. Nên phải tạo addin đó bạn. Chứ dán vào ThisWorkBook đâu có tác dụng j đâu
 
Upvote 0
Upvote 0
Dear anh chị GPE

Em cần trích lọc dữ liệu theo điều kiện 1, điều kiện 2, và theo thời gian từ ngày đến ngày. để làm báo cáo. Dựa vào file data

Mong anh chị giúp trợ giúp em, cho em xin cao kiến 1 đoạn code VBA để làm công việc trên ạ. File ví dụ em xin đính kèm
 

File đính kèm

Upvote 0
Nhờ các cao thủ GPE giúp hoàn thiện em code file này với !!!
 

File đính kèm

Upvote 0
..............................................................
 

File đính kèm

Lần chỉnh sửa cuối:
Upvote 0
cần may anh giúp đỡ nội dung như thế này:
1. em cần cho ô A1 (là ô của lớp cụ thể bắt đầu 12A1)
2. Cho ô A1 hiển thị vào Form nhập liệu, sau khi nhập số liệu ở các dòng B2:N2 sau khi xong bấm vào LƯU DỮ LIỆU thì dòng hiện hành sẽ là ô B3:N3,.....cứ như thế đến B39:N39
link dính kèm bên dưới
 

File đính kèm

Upvote 0
Status
Không mở trả lời sau này.
Web KT

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

Back
Top Bottom