Sự kiện Beforesave không chạy

Liên hệ QC
Tôi tuân thủ nội quy khi đăng bài

Lê Hồng Minh83

Thành viên tiêu biểu
Tham gia
29/9/17
Bài viết
587
Được thích
649
Giới tính
Nam
Chào Đại gia đình GPE
Cho hỏi sự kiện Beforesave không chạy khi bấm lưu là lỗi gì vậy nhỉ? Sub Fill_data không được gọi khi bấm lưu
Mã:
Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
    Call Fill_data
End Sub
Trong khi ở máy tính khác cùng phiên bản excel 2016 thì file vẫn chạy bình thường (đã enable all macros và tích trust access to the VBA project)
 
Chào Đại gia đình GPE
Cho hỏi sự kiện Beforesave không chạy khi bấm lưu là lỗi gì vậy nhỉ? Sub Fill_data không được gọi khi bấm lưu
Mã:
Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
    Call Fill_data
End Sub
Trong khi ở máy tính khác cùng phiên bản excel 2016 thì file vẫn chạy bình thường (đã enable all macros và tích trust access to the VBA project)
Tức là bạn bấm nút Save nó không chạy thủ tục? Bạn gửi cái file đó lên xem, hoặc ở đâu đó trong code bạn dùng câu lệnh Application.EnableEvents = False mà chưa trả lại True.
 
Upvote 0
Tức là bạn bấm nút Save nó không chạy thủ tục? Bạn gửi cái file đó lên xem, hoặc ở đâu đó trong code bạn dùng câu lệnh Application.EnableEvents = False mà chưa trả lại True.
Code thì không dùng tới câu lệnh Application.enableEvents = False ạ
Mã:
Sub Fill_data()
    Dim wb As Workbook
    Dim vbProj As VBIDE.VBProject
    Dim vbComp As VBIDE.VBComponent
    Dim vbMod As VBIDE.CodeModule
    Dim filePath As String

    Application.ScreenUpdating = False
    Application.Calculation = xlCalculationManual
    filePath = Application.GetOpenFilename("Excel Files (*.xls*), *.xls*")
    If filePath = "False" Then Exit Sub

    Set wb = Workbooks.Open(filePath)
    wb.Activate
    Set vbProj = wb.VBProject
    Set vbComp = vbProj.VBComponents.Add(vbext_ct_StdModule)
    Set vbMod = vbComp.CodeModule
    vbMod.InsertLines 1, "Sub CapSo1ChoVungAB()" & vbCrLf & _
                      "    Dim ws As Worksheet" & vbCrLf & _
                      "    Dim i As Long" & vbCrLf & _
                      "    Application.ScreenUpdating = False" & vbCrLf & _
                      "    Application.Calculation = xlCalculationManual" & vbCrLf & _
                      "    For Each ws In ThisWorkbook.Worksheets" & vbCrLf & _
                      "        ws.Range(""AB1:AB220"").ClearContents" & vbCrLf & _
                      "        ws.Range(""AB1:AB220"").MergeCells = False" & vbCrLf & _
                      "        For i = 4 To 200" & vbCrLf & _
                      "            If ws.Cells(i, ""B"").Value <> """" And Not ws.Rows(i).Hidden Then" & vbCrLf & _
                      "                ws.Cells(i, ""AB"").Value = 1" & vbCrLf & _
                      "            End If" & vbCrLf & _
                      "        Next i" & vbCrLf & _
                      "    Next ws" & vbCrLf & _
                      "    Application.ScreenUpdating = True" & vbCrLf & _
                      "    Application.Calculation = xlCalculationAutomatic" & vbCrLf & _
                      "End Sub"
                      
    Set vbComp = vbProj.VBComponents("ThisWorkbook")
    Set vbMod = vbComp.CodeModule
    vbMod.InsertLines vbMod.CountOfLines + 1, "Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)" & vbCrLf & _
                                               "    Call CapSo1ChoVungAB" & vbCrLf & _
                                               "End Sub"
    wb.SaveAs Replace(filePath, ".xlsx", ".xlsm"), FileFormat:=52
    wb.Close SaveChanges:=True
    Application.ScreenUpdating = True
    Application.Calculation = xlCalculationAutomatic
End Sub
Trên máy hiện tại mình đang dùng thì code chạy bình thường, còn máy của bạn cần dùng tới file thì không chạy được sự kiện beforesave
 

File đính kèm

  • INSERT CODE.xlsm
    22.4 KB · Đọc: 3
Upvote 0
Không ai làm ăn gì kỳ cục như vầy, trừ khi cố tình thể hiện hoặc thực hiện âm mưu gì đó. Cái đoạn code chèn code tự động thì vọc chơi cho vui, chứ thực tế không ai đem ứng dụng vào công việc, nhất là nhét vô cái sự kiện của excel.
Bỏ đi
 
Upvote 0
Chào Đại gia đình GPE
Cho hỏi sự kiện Beforesave không chạy khi bấm lưu là lỗi gì vậy nhỉ? Sub Fill_data không được gọi khi bấm lưu
Mã:
Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
    Call Fill_data
End Sub
Trong khi ở máy tính khác cùng phiên bản excel 2016 thì file vẫn chạy bình thường (đã enable all macros và tích trust access to the VBA project)
Cho tôi hỏi, khi bấm vào Save, hình như code đưa đến Save As phải không?
 
Upvote 0
Không ai làm ăn gì kỳ cục như vầy, trừ khi cố tình thể hiện hoặc thực hiện âm mưu gì đó. Cái đoạn code chèn code tự động thì vọc chơi cho vui, chứ thực tế không ai đem ứng dụng vào công việc, nhất là nhét vô cái sự kiện của excel.
Bỏ đi
Cần chứ, và áp dụng ngon lành luôn. Người ta không cho thay đổi file của người ta làm (Sếp to). Không lẽ mỗi lần nhận file lại phải làm cái thao tác thêm code rồi chạy file chi cho mất thời gian (nhiều file). nên trong trường hợp này code rất hữu dụng đó thôi
Bài đã được tự động gộp:

Cho tôi hỏi, khi bấm vào Save, hình như code đưa đến Save As phải không?
Chọn tới 1 file khác để thực thi lệnh chèn code thôi
 
Upvote 0
Cần chứ, và áp dụng ngon lành luôn. Người ta không cho thay đổi file của người ta làm (Sếp to). Không lẽ mỗi lần nhận file lại phải làm cái thao tác thêm code rồi chạy file chi cho mất thời gian (nhiều file). nên trong trường hợp này code rất hữu dụng đó thôi
Bài đã được tự động gộp:


Chọn tới 1 file khác để thực thi lệnh chèn code thôi
Tôi chạy trên máy tôi Office 365 chạy bình thường, nhưng nó thông báo sau khi lưu file. Bạn cần đặt cặp lệnh này để ngăn không cho nó thông báo:

Application.DisplayAlerts = False
......
Application.DisplayAlerts = True

Vả lại, file lưu sẵn phải là file chạy được macro.
 
Upvote 0
Tôi chạy trên máy tôi Office 365 chạy bình thường, nhưng nó thông báo sau khi lưu file. Bạn cần đặt cặp lệnh này để ngăn không cho nó thông báo:

Application.DisplayAlerts = False
......
Application.DisplayAlerts = True

Vả lại, file lưu sẵn phải là file chạy được macro.
File được lưu lại dưới file mới được định dạng .xlsm luôn ạ
Mã:
wb.SaveAs Replace(filePath, ".xlsx", ".xlsm"), FileFormat:=52
Đúng là thêm câu lệnh trên vào sẽ loại bỏ đi thông báo nếu có.
Vấn đề chính ở đây là không hiểu sao ở 1 máy tính khác cùng excel 2016, mà sự kiện BeforeSave không chạy được. không chỉ là file này thôi mà tất cả các file khác có sự kiện này đều không chạy được
 
Upvote 0
File được lưu lại dưới file mới được định dạng .xlsm luôn ạ
Mã:
wb.SaveAs Replace(filePath, ".xlsx", ".xlsm"), FileFormat:=52
Đúng là thêm câu lệnh trên vào sẽ loại bỏ đi thông báo nếu có.
Vấn đề chính ở đây là không hiểu sao ở 1 máy tính khác cùng excel 2016, mà sự kiện BeforeSave không chạy được. không chỉ là file này thôi mà tất cả các file khác có sự kiện này đều không chạy được
Tại cái máy đó, mở môi trường VBE ra, trong Immediate dán câu lệnh này Application.EnableEvents=true rồi Enter xem nó có chạy code không nhé.
 
Upvote 0
Web KT
Back
Top Bottom