Có thể dùng vba để xóa vba đc không?

Liên hệ QC

quykiemsau

Thành viên chính thức
Tham gia
4/8/10
Bài viết
66
Được thích
0
Em chào các anh chị!
Có code nào có thể test 1 điều kiện nào đó để xóa toàn bộ vba trong file Excel được không ạ?
Cụ thể là
ô A1! của sheet 1! em đặt điều kiện hoặc =0 hoặc =1.
Khi Open file:
ô a1=1 thì file chạy bình thường.
Nếu A1=0 thì toàn bộ vba trong file bị xóa sạch.
Có được không ạ?
 
- Mở file bằng Hexeditor
- Xóa sạch hết từ CMG đến GC
- Lưu file lại
- Mở file lên kiểm tra ---> Bất cứ thằng Unview hay Protect VBA gì gì đó cũng sẽ đi.. Pháp ở
Theo như clip Sư phụ gửi không biết dùng lệnh gì trong việc "xóa sạch hết từ CMG đến GC" (quét vùng và nhấn Delete?) thì vùng chọn đó thay thế bằng "............",
Em quét vùng và nhấn Delete thì xóa mất hết luôn, lưu lại mở ra thì báo mất code trong VBE luôn (báo lỗi như bài viết của Hong.Van). Nếu thay tất cả các ký tự vùng đó (từ CMG đến GC) bằng các dấu "........" thì được. Ở đây em đang hỏi lý do Sư phụ làm được nhanh như thế ? em cũng mong mở được trong vòng 3s ẹc.. ẹc ..
 
Upvote 0
View attachment 91390
Sao em thấy chưa được, Em xóa 3 thằng nhưng chỉ xóa những ký tự trong ngoặc kép còn vẫn để lại CMG""...
thì kết quả bị thế này & code khg còn một mống!Em cảm ơn!

Thế bạn trở thành dũng sỹ diệt code rồi, ha ha...
Nói vậy chớ xóa hết từ chữ "CMG" đến hết nội dung của GC, khi nào thành một loạt dấu .......(chấm) là được.
 
Upvote 0
Theo như clip Sư phụ gửi không biết dùng lệnh gì trong việc "xóa sạch hết từ CMG đến GC" (quét vùng và nhấn Delete?) thì vùng chọn đó thay thế bằng "............",
Em quét vùng và nhấn Delete thì xóa mất hết luôn, lưu lại mở ra thì báo mất code trong VBE luôn (báo lỗi như bài viết của Hong.Van). Nếu thay tất cả các ký tự vùng đó (từ CMG đến GC) bằng các dấu "........" thì được. Ở đây em đang hỏi lý do Sư phụ làm được nhanh như thế ? em cũng mong mở được trong vòng 3s ẹc.. ẹc ..

Hình như hôm trước tôi gửi video clip cho bạn rồi mà

[video=youtube;KnrSHYUjZhE]http://www.youtube.com/watch?v=KnrSHYUjZhE[/video]

Thì làm giống y chang như tôi đã làm thôi (trước giờ chưa từng bị bất kỳ lỗi gì)

-----------------
Sao em thấy chưa được, Em xóa 3 thằng nhưng chỉ xóa những ký tự trong ngoặc kép còn vẫn để lại CMG""...
thì kết quả bị thế này & code khg còn một mống!Em cảm ơn!
Cụ thể là file nào đâu? Cứ đưa lên đây, tôi quay video trực tiếp luôn trên file đó nhé
 
Lần chỉnh sửa cuối:
Upvote 0
Hình như hôm trước tôi gửi video clip cho bạn rồi mà

[video=youtube;KnrSHYUjZhE]http://www.youtube.com/watch?v=KnrSHYUjZhE[/video]

Thì làm giống y chang như tôi đã làm thôi (trước giờ chưa từng bị bất kỳ lỗi gì)

-----------------

Cụ thể là file nào đâu? Cứ đưa lên đây, tôi quay video trực tiếp luôn trên file đó nhé
Đây là File của em!..........
 

File đính kèm

  • Char_Gi_1.xls
    19.5 KB · Đọc: 40
Upvote 0
Đây là File của em!..........
Thì cũng y chang như vừa làm thôi
Chú ý:
- Ctrl + F
- Đặt con trỏ chuột về phía bên phải số 47 rồi bấm Delete 3 phát
- Xong, đặt chuột vào ô vuông màu xanh, gõ CMG và bấm nút Find
Nói chung cứ chú ý kỹ thao tác tôi làm trong video clip là được rồi

[video=youtube;UEea2PXp4eY]http://www.youtube.com/watch?v=UEea2PXp4eY&feature=youtu.be[/video]
 
Upvote 0
Đây là File của em!..........

Trước hết cần lưu ý là không phải HexEditor nào cũng như nhau. Vd. với HE nghèo nàn như của tôi thì bạn không thể thao tác như ndu hướng dẫn (đặt trỏ sau 47 và Delete 3 phát ...)
Bạn làm thế này.
Mở XLS --> Tìm CMG --> click vào G (ký tự cuối) --> gõ x --> nhìn xuống dưới (sau CMG="...") có DPB --> click vào B --> gõ x --> nhìn xuống dưới có GC --> click vào C --> gõ x
(cuối cùng ta có CMx, DPx, Gx)
--> Save
--> mở XLS bằng Excel --> có hỏi gì thì cứ OK (3 lần) --> khi mở xong thì chọn Save --> từ lần mở sau Excel không hỏi gì nữa
Khỏi cần Video hướng dẫn.
----------
Nếu HexEditor của bạn không click được vào G, B, C để đánh dấu và khi gõ x thì thay thế thì tôi đã đính kèm HexEditor ở dưới.
 

File đính kèm

  • HEDIT.rar
    42.9 KB · Đọc: 161
Lần chỉnh sửa cuối:
Upvote 0
Trước hết cần lưu ý là không phải HexEditor nào cũng như nhau. Vd. với HE nghèo nàn như của tôi thì bạn không thể thao tác như ndu hướng dẫn (đặt trỏ sau 47 và Delete 3 phát ...)
Bạn làm thế này.
Mở XLS --> Tìm CMG --> click vào G (ký tự cuối) --> gõ x --> nhìn xuống dưới (sau CMG="...") có DPB --> click vào B --> gõ x --> nhìn xuống dưới có GC --> click vào C --> gõ x
(cuối cùng ta có CMx, DPx, Gx)
--> Save
--> mở XLS bằng Excel --> có hỏi gì thì cứ OK (3 lần) --> khi mở xong thì chọn Save --> từ lần mở sau Excel không hỏi gì nữa
Khỏi cần Video hướng dẫn.
----------
Nếu HexEditor của bạn không click được vào G, B, C để đánh dấu và khi gõ x thì thay thế thì tôi đã đính kèm HexEditor ở dưới.

Em cảm ơn các Thầy & anh chị!
Trước khi có bài gỡ PW của anh thì em đã dùng chương trình Office Password Recovery Toolbox, chương trình này chỉ gỡ PW BAV thông thường chứkg gỡ thằng Unviewable được!
Em có nghiên cứu một số trang như
http://www.pcreview.co.uk/forums/help-vba-password-lost-t3161183.html
...
Nhưng chưa được....
Có lẽ có nhiều nguyên do như chương trình Hexeditor của em dùng Free nên thiếu các chức năng, ví dụ như chương trình của Thầy Ndu khi bấm Ctrl+F nó ra cái khung khác, của em cái khung khác ...
--------
Nhân tiện đây cho em hỏi: những File Excel đã chuyển qua .exe thì có thể chuyển về .xls được không?
Em cảm ơn!
 
Upvote 0
Em cảm ơn các Thầy & anh chị!

Nhân tiện đây cho em hỏi: những File Excel đã chuyển qua .exe thì có thể chuyển về .xls được không?
Em cảm ơn!

Hic hình như là không thể trả vể .xls được rồi, nếu mất hết code trong file .exe đó thì xin chia buồn nhé
 
Upvote 0
Nhân tiện đây cho em hỏi: những File Excel đã chuyển qua .exe thì có thể chuyển về .xls được không?
Em cảm ơn!

Tôi nghĩ là cái EXE kia chỉ là trá hình thôi. Từ đâu nó có "nội dung" file Excel để mà mở bằng Excel?
Vì vậy tôi nghĩ là toàn bộ nội dung file Excel "thằng" EXE kia nó có "trong cơ thể nó". Tức người viết code EXE "đính kèm" file Excel ở dạng resource (chuẩn), hoặc làm kiểu a ma tơ thì khi làm xong EXE thì dùng phần mềm "nối" file Excel vào đuôi EXE.
Khi EXE được kích hoạt thì nó "bung" file Excel từ resource, hoặc cắt từ đuôi EXE (tất nhiên cắt từ đâu thì cái phần mềm kia sẽ ghi, vd. 4 bai ở đuôi EXE sẽ dùng để ghi độ lớn của file Excel --> khi được kích hoạt thì EXE nhẩy tới 4 bai cuối để đọc độ lớn của file Excel, giả dụ là x --> EXE nhẩy tới bai cách bai cuối cùng (offset tính từ cuối) là x + 4 rồi đọc x bai - tóm lại phần mềm kia trước tiện ghi file Excel vào đuôi EXE sau đó ghi tiếp trong 4 bai độ lớn của file EXE, tổng cộng số bai ghi vào đuôi EXE là x + 4. Khi đọc ra thì EXE đọc 4 bai cuối để có x, sau đó nhẩy xuống cuối EXE "thực", tức offset = x + 4 tính từ cuối rồi đọc x bai liên tiếp), ghi lên đĩa
Do việc "nhúng" file Excel vào EXE có thể có nhiều cách (resource, a ma tơ) nên khó nói là lọc file Excel từ EXE như thế nào.
Nếu bạn đã từng dùng phần mềm để "convert" file Excel thành EXE thì hãy gửi lên cho tôi phần mềm đó. Tôi sẽ thử xem nó làm như thế nào. Nếu đúng là nó "nhúng" file Excel vào EXE thì chuyện tách ra không có gì là khó. Chỉ sợ là trước khi nhúng nó mã file Excel thì chịu vì biết nó mã thế nào để mà giải mã?
-----------------
Mà nếu đúng là khi được kích hoạt nó sẽ "bung" file Excel từ trong "cơ thể" nó rồi ghi trên đĩa cững để gọi Excel mở thì chỉ cần dò xem nó ghi ở đâu trên đĩa cứng thì lấy thôi. Cái dò này thì ai cũng làm được.
Bạn có file Excel đã được "convert" sang EXE không? Nếu không có gì bí mật thì gửi cho tôi xem.
--------------
Tất nhiên có thể mỗi thằng làm một khác, và không nhất thiết như tôi nói. Do có thể mỗi thằng làm một khác nên để biết chúng làm thế nào thì phải xét từng thằng cụ thể.
Vd. nếu bạn dùng thằng này

http://www.drmsoft.com/Excel-to-exe-converter.asp

thì tôi nghĩ việc lấy được file nguồn là hoàn toàn dễ dàng. Ít ra thì tôi cũng đã thử dùng nó để convert 1 file Excel sang EXE rồi khi kích hoạt EXE thì tôi lấy được file nguồn.
 
Lần chỉnh sửa cuối:
Upvote 0
Bạn có file Excel đã được "convert" sang EXE không? Nếu không có gì bí mật thì gửi cho tôi xem.
--------------
Tất nhiên có thể mỗi thằng làm một khác, và không nhất thiết như tôi nói. Do có thể mỗi thằng làm một khác nên để biết chúng làm thế nào thì phải xét từng thằng cụ thể.
Vd. nếu bạn dùng thằng này

http://www.drmsoft.com/Excel-to-exe-converter.asp

thì tôi nghĩ việc lấy được file nguồn là hoàn toàn dễ dàng. Ít ra thì tôi cũng đã thử dùng nó để convert 1 file Excel sang EXE rồi khi kích hoạt EXE thì tôi lấy được file nguồn.
Chào anh!
Em kg sử dụng và tạo File .exe. Vì có tạo thì em fải thủ trước 1 File dự trữ rồi
Tình hình là như thế này, trước đây em có xem 1 File .exe chạy chương trình kế toán của 1 người bạn làm ở cty khác, em muốn bổ sung thêm một số đoạn code mà em sưu tầm được vào chương trình này. Vì thế em hỏi muốn chuyển từ File .exe về File .xls.
Sáng nay em có hỏi nó để lấy fần mềm này, nhưng chắc nó sợ lộ thông tin số liệu và sếp nó, nên nó kg muốn chuyển.
Em cảm ơn!
 
Upvote 0
Dùng Hex Editor để mở Unviewable của VBA, nhưng đối với dạng .xla thì mình làm thế nào để mở Unviewable hả các anh?
 
Upvote 0
Upvote 0
Lần chỉnh sửa cuối:
Upvote 0

Code dưới này là thế nào vậy ta?
Tự đặt pass VBA khi mở file hay là tự đặt pass vba khi đóng file thế nhỉ?
có thể như vậy được sao? híc!


PHP:
' Setup & Registering functions

Sub auto_open()
    Application.EnableCancelKey = xlDisabled
    SetupFunctionIDs
    PickPlatform
    VerifyOpen
    RegisterFunctionIDs
End Sub

' O12:624902 - unregister analys32.xll if it's not installed so that funcres.xlam
'              closes and the UI is removed
Sub auto_close()
    Dim fATPInstalled As Boolean
    
    fATPInstalled = False
    For Each ai In Application.AddIns
        If UCase(ai.Name) = "ANALYS32.XLL" Then
            fATPInstalled = ai.Installed
            Exit For
        End If
    Next ai
    
    If Not fATPInstalled Then
        Application.ExecuteExcel4Macro ("unregister(""analys32.xll"")")
    End If
    
End Sub

Private Sub VerifyOpen()
    XLLName = ThisWorkbook.Sheets("Loc Table").Range(XLLNameCell).Value
    theArray = Application.RegisteredFunctions
    If Not (IsNull(theArray)) Then
        For i = LBound(theArray) To UBound(theArray)
            If (InStr(theArray(i, 1), XLLName)) Then
                Exit Sub
            End If
        Next i
    End If
    
    Quote = String(1, 34)
    ThisWorkbook.Sheets("REG").Activate
    WorkbookName = "[" & ThisWorkbook.Name & "]" & Sheet1.Name
    AnalysisPath = ThisWorkbook.Path
    
    AnalysisPath = AnalysisPath & DirSep
    XLLFound = Application.RegisterXLL(AnalysisPath & XLLName)
    If (XLLFound) Then
        Exit Sub
    End If
        
    AnalysisPath = ""
    XLLFound = Application.RegisterXLL(AnalysisPath & XLLName)
    If (XLLFound) Then
        Exit Sub
    End If
        
    AnalysisPath = LibPath
    XLLFound = Application.RegisterXLL(AnalysisPath & XLLName)
    If (XLLFound) Then
        Exit Sub
    End If
    
    XLLNotFoundErr = ThisWorkbook.Sheets("Loc Table").Range("B12").Value
    MsgBox (XLLNotFoundErr)
    ThisWorkbook.Close (False)
End Sub

Private Sub PickPlatform()
    Dim Platform
    
    ThisWorkbook.Sheets("REG").Activate
    Range("C3").Select
    Platform = Application.ExecuteExcel4Macro("LEFT(GET.WORKSPACE(1),3)")
    If (Platform = "Mac") Then
        DirSep = ThisWorkbook.Sheets("Loc Table").Range(MacDirSepCell).Value
        LibPath = ThisWorkbook.Sheets("Loc Table").Range(LibPathMacCell).Value
    Else
        DirSep = ThisWorkbook.Sheets("Loc Table").Range(WinDirSepCell).Value
        LibPath = ThisWorkbook.Sheets("Loc Table").Range(LibPathWinCell).Value
    End If
End Sub

Private Sub RegisterFunctionIDs()
    XLLName = ThisWorkbook.Sheets("Loc Table").Range(XLLNameCell).Value
    Quote = String(1, 34)
    For i = LBound(FunctionIDs) To UBound(FunctionIDs)
        Dim StrCall
        StrCall = "REGISTER.ID(" & Quote & AnalysisPath & XLLName & Quote & "," & Quote & FunctionIDs(i, 0) & Quote & ")"
        FunctionIDs(i, 1) = ExecuteExcel4Macro(StrCall)
    Next i
End Sub

Private Sub SetupFunctionIDs()
    FunctionIDs(0, 0) = "fnAnova1"
    FunctionIDs(1, 0) = "fnAnova2"
    FunctionIDs(2, 0) = "fnAnova3"
    FunctionIDs(3, 0) = "fnMCorrel"
    FunctionIDs(4, 0) = "fnMCovar"
    FunctionIDs(5, 0) = "fnDescr"
    FunctionIDs(6, 0) = "fnExpon"
    FunctionIDs(7, 0) = "fnFourier"
    FunctionIDs(8, 0) = "fnFtestV"
    FunctionIDs(9, 0) = "fnHistogram"
    FunctionIDs(10, 0) = "fnMoveAvg"
    FunctionIDs(11, 0) = "fnRandom"
    FunctionIDs(12, 0) = "fnRankPerc"
    FunctionIDs(13, 0) = "fnRegress"
    FunctionIDs(14, 0) = "fnSample"
    FunctionIDs(15, 0) = "fnTtestM"
    FunctionIDs(16, 0) = "fnTtestUeq"
    FunctionIDs(17, 0) = "fnTtestEq"
    FunctionIDs(18, 0) = "fnZtestM"
    FunctionIDs(19, 0) = "fnAnova1Q"
    FunctionIDs(20, 0) = "fnAnova2Q"
    FunctionIDs(21, 0) = "fnAnova3Q"
    FunctionIDs(22, 0) = "fnMCorrelQ"
    FunctionIDs(23, 0) = "fnMCovarQ"
    FunctionIDs(24, 0) = "fnDescrQ"
    FunctionIDs(25, 0) = "fnExponQ"
    FunctionIDs(26, 0) = "fnFourierQ"
    FunctionIDs(27, 0) = "fnFtestVQ"
    FunctionIDs(28, 0) = "fnHistogramQ"
    FunctionIDs(29, 0) = "fnMoveAvgQ"
    FunctionIDs(30, 0) = "fnRandomQ"
    FunctionIDs(31, 0) = "fnRankPercQ"
    FunctionIDs(32, 0) = "fnRegressQ"
    FunctionIDs(33, 0) = "fnSampleQ"
    FunctionIDs(34, 0) = "fnTtestMQ"
    FunctionIDs(35, 0) = "fnTtestUeqQ"
    FunctionIDs(36, 0) = "fnTtestEqQ"
    FunctionIDs(37, 0) = "fnZtestMQ"
End Sub
 
Upvote 0
Tiếp!
PHP:
' ANALYSIS TOOLPAK  -  Excel AddIn
' The following function declarations provide interface between VBA and ATP XLL.

' These variables point to the corresponding cell in the Loc Table sheet.
Const XLLNameCell = "B8"
Const MacDirSepCell = "B3"
Const WinDirSepCell = "B4"
Const LibPathWinCell = "B10"
Const LibPathMacCell = "B11"

Dim DirSep As String
Dim LibPath As String
Dim AnalysisPath As String
Dim WorkbookName As String

Dim FunctionIDs(37, 0 To 1)

Private Function GetMacroRegId(FuncText As String) As String
    For i = LBound(FunctionIDs) To UBound(FunctionIDs)
        If (LCase(FunctionIDs(i, 0)) = LCase(FuncText)) Then
            If (Not (IsError(FunctionIDs(i, 1)))) Then
                GetMacroRegId = FunctionIDs(i, 1)
                Exit Function
            End If
        End If
    Next i
End Function

'Procedures
 
Sub Anova1(inprng As Variant, Optional outrng As Variant, Optional grouped As Variant, Optional labels As Variant, Optional alpha As Variant)
    xAnova1 = Application.Run(GetMacroRegId("fnAnova1"), inprng, outrng, grouped, labels, alpha)
End Sub

Sub Anova1Q(Optional inprng As Variant, Optional outrng As Variant, Optional grouped As Variant, Optional labels As Variant, Optional alpha As Variant)
    xAnova1Q = Application.Run(GetMacroRegId("fnAnova1Q"), inprng, outrng, grouped, labels, alpha)
End Sub

Sub Anova2(inprng As Variant, Optional outrng As Variant, Optional sample_rows As Variant, Optional alpha As Variant)
    xAnova2 = Application.Run(GetMacroRegId("fnAnova2"), inprng, outrng, sample_rows, alpha)
End Sub

Sub Anova2Q(Optional inprng As Variant, Optional outrng As Variant, Optional sample_rows As Variant, Optional alpha As Variant)
    xAnova2Q = Application.Run(GetMacroRegId("fnAnova2Q"), inprng, outrng, sample_rows, alpha)
End Sub

Sub Anova3(inprng As Variant, Optional outrng As Variant, Optional labels As Variant, Optional alpha As Variant)
    xAnova3 = Application.Run(GetMacroRegId("fnAnova3"), inprng, outrng, labels, alpha)
End Sub

Sub Anova3Q(Optional inprng As Variant, Optional outrng As Variant, Optional labels As Variant, Optional alpha As Variant)
    xAnova3Q = Application.Run(GetMacroRegId("fnAnova3Q"), inprng, outrng, labels, alpha)
End Sub

Sub Descr(inprng As Variant, Optional outrng As Variant, Optional grouped As Variant, Optional labels As Variant, Optional summary As Variant, Optional ds_large As Variant, Optional ds_small As Variant, Optional confid As Variant)
    xDescr = Application.Run(GetMacroRegId("fnDescr"), inprng, outrng, grouped, labels, summary, ds_large, ds_small, confid)
End Sub

Sub DescrQ(Optional inprng As Variant, Optional outrng As Variant, Optional grouped As Variant, Optional labels As Variant, Optional summary As Variant, Optional ds_large As Variant, Optional ds_small As Variant, Optional confid As Variant)
    xDescrQ = Application.Run(GetMacroRegId("fnDescrQ"), inprng, outrng, grouped, labels, summary, ds_large, ds_small, confid)
End Sub

Sub Expon(inprng As Variant, Optional outrng As Variant, Optional damp As Variant, Optional stderrs As Variant, Optional chart As Variant, Optional labels As Variant)
    xExpon = Application.Run(GetMacroRegId("fnExpon"), inprng, outrng, damp, stderrs, chart, labels)
End Sub

Sub ExponQ(Optional inprng As Variant, Optional outrng As Variant, Optional damp As Variant, Optional stderrs As Variant, Optional chart As Variant, Optional labels As Variant)
    xExponQ = Application.Run(GetMacroRegId("fnExponQ"), inprng, outrng, damp, stderrs, chart, labels)
End Sub

Sub Fourier(inprng As Variant, Optional outrng As Variant, Optional inverse As Variant, Optional labels As Variant)
    xFourier = Application.Run(GetMacroRegId("fnFourier"), inprng, outrng, inverse, labels)
End Sub

Sub FourierQ(Optional inprng As Variant, Optional outrng As Variant, Optional inverse As Variant, Optional labels As Variant)
    xFourierQ = Application.Run(GetMacroRegId("fnFourierQ"), inprng, outrng, inverse, labels)
End Sub

Sub Ftestv(inprng1 As Variant, inprng2 As Variant, Optional outrng As Variant, Optional labels As Variant, Optional alpha As Variant)
    xFtestv = Application.Run(GetMacroRegId("fnFtestV"), inprng1, inprng2, outrng, labels, alpha)
End Sub

Sub FtestvQ(Optional inprng1 As Variant, Optional inprng2 As Variant, Optional outrng As Variant, Optional labels As Variant, Optional alpha As Variant)
    xFtestvQ = Application.Run(GetMacroRegId("fnFtestVQ"), inprng1, inprng2, outrng, labels, alpha)
End Sub

Sub Histogram(inprng As Variant, Optional outrng As Variant, Optional binrng As Variant, Optional pareto As Variant, Optional chartc As Variant, Optional chart As Variant, Optional labels As Variant)
    xHistogram = Application.Run(GetMacroRegId("fnHistogram"), inprng, outrng, binrng, pareto, chartc, chart, labels)
End Sub

Sub HistogramQ(Optional inprng As Variant, Optional outrng As Variant, Optional binrng As Variant, Optional pareto As Variant, Optional chartc As Variant, Optional chart As Variant, Optional labels As Variant)
    xHistogramQ = Application.Run(GetMacroRegId("fnHistogramQ"), inprng, outrng, binrng, pareto, chartc, chart, labels)
End Sub
 
Upvote 0
Web KT
Back
Top Bottom