Tôi đã trải qua một số kỳ quặc lạ trong Excel khi loại bỏ các mô-đun theo chương trình rồi nhập lại chúng từ tệp. Về cơ bản, tôi có một mô-đun tên là VersionControl có nghĩa vụ xuất các tệp của tôi sang một thư mục được xác định trước và nhập lại chúng theo yêu cầu. Đây là mã cho reimporting (vấn đề với nó được mô tả dưới đây):Thay đổi flushing được thực hiện cho VBProject.VBComponents trong Excel bằng cách sử dụng VBA
Dim i As Integer
Dim ModuleName As String
Application.EnableEvents = False
With ThisWorkbook.VBProject
For i = 1 To .VBComponents.Count
If .VBComponents(i).CodeModule.CountOfLines > 0 Then
ModuleName = .VBComponents(i).CodeModule.Name
If ModuleName <> "VersionControl" Then
If PathExists(VersionControlPath & "\" & ModuleName & ".bas") Then
Call .VBComponents.Remove(.VBComponents(ModuleName))
Call .VBComponents.Import(VersionControlPath & "\" & ModuleName & ".bas")
Else
MsgBox VersionControlPath & "\" & ModuleName & ".bas" & " cannot be found. No operation will be attempted for that module."
End If
End If
End If
Next i
End With
Sau khi chạy này, tôi đã nhận thấy rằng một số module không xuất hiện nữa, trong khi một số có bản sao (ví dụ mymodule và mymodule1) . Trong khi bước qua mã, nó trở nên rõ ràng rằng một số mô-đun vẫn nán lại sau cuộc gọi Remove
, và chúng được tái nhập trong khi vẫn còn trong dự án. Đôi khi, điều này chỉ dẫn đến việc có mô-đun được gắn với 1
, nhưng đôi khi tôi có cả bản gốc và bản sao.
Có cách nào để thực hiện các cuộc gọi tới Remove
và Import
để chúng tự áp dụng không? Tôi đang suy nghĩ để gọi một hàm Save
sau mỗi, nếu có một trong các đối tượng ứng dụng, mặc dù điều này có thể gây ra thiệt hại nếu mọi thứ đi sai trong quá trình nhập.
Ý tưởng?
Chỉnh sửa: thẻ đã thay đổi synchronization
thành version-control
.
+1 Một cách thông minh để thực hiện một số điều khiển phiên bản tự chế. Tôi nên làm một cái gì đó như thế này bản thân mình. –
Nó được lấy cảm hứng từ [câu hỏi này] (http://stackoverflow.com/questions/131605/best-way-to-do-version-control-for-ms-excel) ở đây trên StackOverflow - phiên bản của tôi chỉ là một khiêm tốn làm lại. – CamilB
Tôi chưa tạo ra bất cứ điều gì như thế này, nhưng những điều tôi muốn thử sẽ là: gọi từ một sổ làm việc/addin khác; sao lưu sổ làm việc trước, thực hiện tất cả các thao tác xóa cùng một lúc, lưu, nhập tất cả cùng một lúc. Bạn cũng có thể lộn xộn xung quanh với phiên bản COM của Rob Bovey's Code Cleaner. Bạn có thể đặt tham chiếu đến nó và truy cập vào chức năng Nhập, Xuất và các chức năng khác. Tôi sẽ quan tâm để xem những gì bạn tìm ra. –