Dùng macro4 ngoài macro sheet (1 người xem)

  • Thread starter Thread starter kelvin
  • Ngày gửi Ngày gửi
Liên hệ QC

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

kelvin

Thành viên thường trực
Tham gia
24/6/06
Bài viết
202
Được thích
184
Nghề nghiệp
Tư vấn xây dựng, kinh doanh in ấn
Thông thường ta dùng macro4 trong macro sheet, nhưng thực ra còn có thể dùng nó trong hộp thoại Name, trong VBE,...?
Thread mong muốn sưu tập các cách xử dụng nầy.
 
ActiveCell = ExecuteExcel4Macro(Evaluate("4*5"))
Đã dùng thử hàm tính giá trị của biểu thức dạng text, biểu thức có thể là reference. Dùng VBE để gọi thẳng 1 hàm macro4, xem file đính kèm.
 

File đính kèm

Lần chỉnh sửa cuối:
HYen đã viết:
Vô menu Insert -> Name -> Define ; Trong ngăn Names in Workbook ta nhập : GiaiPhapExcel; Trong ngăn Refers to: ta nhập chuỗi: "Khai trương ngày 02 tháng 07 năm 2006." & Add! Sau khi OK trở về bảng tính ta tìm vùng trống & nhập =GiaiPhapExcel & Enter xem việc gì sẽ đến đã đến!
Không biết HYen có hiểu ý của bác Kelvin không? Vì anh Kelvin đang bàn về Macro4 mà.
 
Cái món này hay đấy
ActiveCell = ExecuteExcel4Macro(Evaluate("4*5"))
 
Gửi các bạn xem thử 1 cách gọi SheetMacro chạy, từ 1 Workbbook khác, rồi close Source macro4 lại
Trong wb:ReturnWbName_M4.xls có 1 SheetMacro4 ẩn, làm sao thấy được đây, đố các bạn ?
 

File đính kèm

Gửi các bạn xem thử 1 cách gọi SheetMacro chạy, từ 1 Workbbook khác, rồi close Source macro4 lại
Trong wb:ReturnWbName_M4.xls có 1 SheetMacro4 ẩn, làm sao thấy được đây, đố các bạn ?
Dùng bình thường thì em không biết, chứ dùng VBA để hiển thị lại thì được ạ :
PHP:
Sub UnhideSheet()
    On Error Resume Next
    Application.ScreenUpdating = False
    Dim Sh As Worksheet
    For Each Sh In ActiveWorkbook.Sheets
        If Not Sh.Visible = xlSheetVisible Then Sh.Visible = xlSheetVisible
    Next
    Application.ScreenUpdating = True
End Sub

Thân!
 
uhm,cũng hay đấy.Vấn dề ở chỗ mình thấy sao trong VBA Editor, không thấy có liệt kê MacroSheet trong cửa sổ Project Explorer -> nếu không nói có Sheet ẩn trước, ít ai nghĩ ra là nó nằm ở đâu
 
uhm,cũng hay đấy.Vấn dề ở chỗ mình thấy sao trong VBA Editor, không thấy có liệt kê MacroSheet trong cửa sổ Project Explorer -> nếu không nói có Sheet ẩn trước, ít ai nghĩ ra là nó nằm ở đâu
Bạn kelvin có thể chỉ cho cách phát hiện sheet ẩn này ko? Tất nhiên là ngoài cách dùng VBA như Bắp vừa làm ở trên!
(vụ này hơi bị hay)
ANH TUẤN
 
cung đơn giản thôi, lúc rảnh tôi lò mò ba cái macro4 cũ:
=WORKBOOK.HIDE("Macro1";TRUE)
=RETURN()
NGUYÊN văn trong Help:
WORKBOOK.HIDE(sheet_text, very_hidden)

Sheet_text is the name of the sheet to hide. If omitted, the currently selected sheet(s) are hidden.
Very_hidden specifies how the sheet is hidden. If TRUE, then the sheet name does not appear in the Unhide dialog box. After using this argument, use WORKBOOK.UNHIDE to unhide the sheet. If FALSE or omitted, hides the sheet but does not prevent the sheet's name from appearing in the Unhide dialog box.

Remarks

If the structure of the workbook is protected, you cannot hide any sheets in the workbook.
You cannot hide the last visible sheet in a workbook.
To hide Sheet1:Sheet10, select them first with the WORKBOOK.SELECT function. You can also place the sheets in an array first, as in {"Sheet1", "Sheet2", "Sheet3",...}.
 
Oh... ho... sao mình quên các hàm macro 4 nhỉ?
Tôi dùng:
Mã:
 Sh =GET.WORKBOOK(1)
cũng phát hiện ra dc có 1 sheet đang ẩn đấy!
 
Dùng bình thường thì em không biết, chứ dùng VBA để hiển thị lại thì được ạ :
PHP:
Sub UnhideSheet()
    On Error Resume Next
    Application.ScreenUpdating = False
    Dim Sh As Worksheet
    For Each Sh In ActiveWorkbook.Sheets
        If Not Sh.Visible = xlSheetVisible Then Sh.Visible = xlSheetVisible
    Next
    Application.ScreenUpdating = True
End Sub
Thân!

Để hiện ra cả các Sheet Macro các bạn chú ý :
PHP:
ActiveWorkbook.Sheets

Chứ không phải là :
PHP:
ActiveWorkbook.Worksheets

Thân!
 
Oh... ho... sao mình quên các hàm macro 4 nhỉ?
Tôi dùng:
Mã:
 Sh =GET.WORKBOOK(1)
cũng phát hiện ra dc có 1 sheet đang ẩn đấy!
=GET.WORKBOOK(1)
=RETURN()
The names of all sheets in the workbook, as a horizontal array of text values.
Trả về dãy ngang chứa tên của tất cả các bảng tính trong Workbook
Viết code làm sao để nó hiện tất cả các tên đây?(bằng macro4).Viết như trên thì nó chỉ trả vè có 1 Sheet
Trích sách :Thường ta dùng hàm SET.NAME để gán 1tên cho dãy trả về, muốn thực hiện một hành động nào đó dùng INDEX;p 311
 
Lần chỉnh sửa cuối:
Bác kelvin rất giỏi về macro4, không hiểu bác có biết cơ chế lây virus macro4 không ạ?
 
Bác kelvin rất giỏi về macro4, không hiểu bác có biết cơ chế lây virus macro4 không ạ?

Ví dụ về viết virus macro mức đơn giản thế này

B1) Lấy một file Excel hấp dẫn, tạo một sheet loại Macro4.0 gọi là "KissMe"
B2) Soạn lệnh và hàm trong sheet "KissMe". Nội dung của nó như sau
+ Tạo thủ tục Auto_Open(), Auto_Close(), Auto_Active(),...
+ Viết các lệnh trong các thủ tục trên, nội dung copy, paste lung tung cả váo các workbook đang mở, thâm độc hơn làm lệnh copy sheet "KissMe" cho các workbook đang mở (và như thế con virus "KissMe" được nhân bản...)
+ Tạo thuộc tính ẩn cho sheet "KissMe", ẩn code, ẩn dòng, cột​

Người ta viết virus bằng macro4.0 vì dễ giấu, dễ sao chép còn những cái khác thua hẳn VBA.

Mà đơn giản cực kỳ là viết một vòng lặp tìm và xóa tất cả các file trong C:\WINDOWS\System32\ thì bà con khóc luôn. Kiểu viết này thì khỏi cần nhân bản mà cài lại máy.:-=
 
Lần chỉnh sửa cuối:
=GET.WORKBOOK(1)
=RETURN()
The names of all sheets in the workbook, as a horizontal array of text values.
Trả về dãy ngang chứa tên của tất cả các bảng tính trong Workbook
Viết code làm sao để nó hiện tất cả các tên đây?(bằng macro4).Viết như trên thì nó chỉ trả vè có 1 Sheet
Làm sao cho sheet ẩn hiện lên thì tôi không biết nhưng ít ra với code đơn giản này tôi có thể phát hiện thực chất trong Workbook có tồn tại sheet ẩn hay không!
Tôi chỉ cần làm như sau:
1> Đặt name
Mã:
Sh =GET.WORKBOOK(1)
2> Trong bảng tính tôi gõ vào 1 cell nào đó công thức:
=Sh
3> Quét chọn công thức trên thanh Formula rồi bấm F9 sẽ thấy liền
 
Bác kelvin rất giỏi về macro4, không hiểu bác có biết cơ chế lây virus macro4 không ạ?
Cám ơn bạn, mình chỉ biết sơ qua thôi,và cũng đúng như Tuân nói,công nghệ lập trình ngày càng mạnh và dể dùng hơn, giờ thì .net, web 2,3.0,,mobile chứ ai mà đi lui lại
 
Nghe nói TuHuong có về Quế Sơn-Đà Nẳng công tác, tiêc là biết trể quá, mình vốn sinh ra ở đó, nhưng từ 1961 đến nay chưa có dịp về lại, hic hic
 
nhân tiẹn bạn nào thích thì đọc thêm:
---Because some Excel add-ins were created using XLM, you may need to add the following registry entry to each user's computer to allow the macros to run. The same is true for add-ins created from XLM macros you want to run as exceptions under High macro security in Excel. To add this entry, you can use a transform, configuration maintenance file (CMW file), or REG file.

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Office\11.0\Excel\Security

Value name: XLM

Value type: DWORD (integer)

Value data: [ 0 | 1 ]

...
Xem đầy đủ tại:
http://office.microsoft.com/search/redir.aspx?assetid=HA101494521033&CTT=96&Origin=CL100750261033
search topic: Understanding Macro Security Levels in Office
 
để MS Excel 2003 luôn để securiry ở Low (ng dùng không chỉnh sửa lại được) bạn thử import vào reg dòng sau: [HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Office\11.0\Excel\Security]
"Level"=dword:00000001
-khi cài 1 số phần mềm antivirus ( như Norton Antivirus,..), nếu các bạn chú ý có chọn option đại loại cho phép check virus khi Excel khởi động, nó sẽ kiểm tra virus trước tất cả: dir xlstart, even wb_ open....Dùng các phần mềm theo dỏi cài đặt/thay đổi reg, sử dụng dll....bạn sẽ biết thêm nhiều thông tin cũng hay hay đấy
 
để MS Excel 2003 luôn để securiry ở Low (ng dùng không chỉnh sửa lại được) bạn thử import vào reg dòng sau: [HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Office\11.0\Excel\Security]
"Level"=dword:00000001
Thế nếu tôi chỉnh Level = 2 trước, sau đó khóa key Security lại thì làm sao mà phần mềm của bạn có thể Import thông tin vào đây?
 
Thế nếu tôi chỉnh Level = 2 trước, sau đó khóa key Security lại thì làm sao mà phần mềm của bạn có thể Import thông tin vào đây?

Bác đọc kỹ :

kelvin đã viết:
để MS Excel 2003 luôn để securiry ở Low (ng dùng không chỉnh sửa lại được) bạn thử import vào reg dòng sau: [HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Office\11.0\ Excel\Security]
"Level"=dword:00000001

Ở đây chỉ bàn đến một số các biện pháp chứ không phải là giải quyết mọi vấn đề của của Hệ điều hành.
Vì nói về bảo mật thì phân quyền, khóa service, khóa registry, khóa Hệ điều hành, phần mềm của hãng thứ 3 . . . ngay cả excel cũng chẳng mở được (thậm chí Office cũng không cài đặt được) chứ nói gì đến chuyện sử dụng excel phải không bác ???

Thân!
 
Bác đọc kỹ :



Ở đây chỉ bàn đến một số các biện pháp chứ không phải là giải quyết mọi vấn đề của của Hệ điều hành.
Vì nói về bảo mật thì phân quyền, khóa service, khóa registry, khóa Hệ điều hành, phần mềm của hãng thứ 3 . . . ngay cả excel cũng chẳng mở được (thậm chí Office cũng không cài đặt được) chứ nói gì đến chuyện sử dụng excel phải không bác ???

Thân!
Ah... Cái này chỉ khóa 1 key thôi, không khóa nguyên Registry!
Ý tôi muốn nói: Nếu người ta khóa key này thì Excel có giãi pháp nào khắc phục không?
 
Trong VBA ta có thể ghi, thay đổi các key của Reg,.Mình khg dùng cái nầy nên quên rồi, bạn chịu khó google vậy
Đồng ý! Nhưng để mở mở key đã bị khóa thì tôi thật sự không biết làm cách nào!
Có ai biết vụ này không nhỉ?
 
Khóa, không cho mở reg thì mình có hiểu, còn "key đã bị khóa " là sao, bạn nói rõ hơn 1 chút dược khg?
Mở Registry lên, Click phải vào 1 key nào đó, chọn Permissions... Ở đây bạn có thể phân quyền cho ai làm gì và cấm ai làm gì trên key của bạn!
Giã sử tôi "cấm" hết toàn các Acc, không cho ai đụng đến key này thì Excel có cách nào vượt qua không?
(Khi tôi cấm như vậy thì đương nhiên bạn không thể Import registry vào key này rồi... các key chưa bị cấm thì OK)
 
Các bác cho hỏi :
Các con Virus Macro đều phải viết trong Macro Sheet hay là trên Sheet thường cũng được ???
Vì em muốn tạo ra một Sub để phát hiện Sheet nguồn của Virus Macro rồi xóa nó đi.

Em vẫn phải làm cách chuối như sau :

PHP:
Sub ShMacro()
    Dim Sh As Worksheet
    Dim Temp As String, i As Byte
    For Each Sh In ActiveWorkbook.Sheets
        If CheckShMacro(Sh.Name) = True Then
            Temp = Temp & Chr(13) & "     - " & Sh.Name
            Sh.Visible = xlSheetVisible
            i = i + 1
        End If
    Next
    If Temp = "" Then
        MsgBox "Xin Chuc Mung !!!" & Chr(13) & "Khong Co Macro Sheet 4 nao!!!", vbInformation, "MrOkebab"
    Else
        MsgBox "Co " & i & " Macro Sheet : " & Chr(13) & Temp, vbInformation, "MrOkebab"
    End If
End Sub
PHP:
Function CheckShMacro(ShStr As String) As Boolean
    Dim Sh As Worksheet
    For Each Sh In ActiveWorkbook.Worksheets
        If Sh.Name = ShStr Then
            Exit Function
        End If
    Next
    CheckShMacro = True
End Function

Mong giải pháp của các bác.

Thân!
 
Các bác cho hỏi :
Các con Virus Macro đều phải viết trong Macro Sheet hay là trên Sheet thường cũng được ???
Vì em muốn tạo ra một Sub để phát hiện Sheet nguồn của Virus Macro rồi xóa nó đi.

Em vẫn phải làm cách chuối như sau ...

Thân!

Các con Virus Macro đều phải viết trong Macro Sheet :muốn viết trong vba, hay cho nó thành dll cũng được, viết bằng macro4 chỉ vì bác Bill khg hổ trợ nó nửa, nên VBA Editor không thấy nó và có vài cách loại bỏ hộp thoại security đơn giản
Cách chuối của bạn: đúng là tư tưởng "lớn" gặp nhau, bác xem đoạn code sau:
Mã:
Option Explicit
'http://www.eggheadcafe.com/forumarchives/Excelprogramming/Sep2005/post24278050.asp
Sub AAA()
Dim s As Object
  
For Each s In ThisWorkbook.Sheets
  
s.Visible = True
  
Next s
  
End Sub

Private Sub ShowExcel4MacroSheets()
  
Dim i As Long
  
For i = 1 To Application.Excel4MacroSheets.Count
  
Application.Excel4MacroSheets(i).Visible = True
  
Next i
  
For i = 1 To Application.Excel4IntlMacroSheets.Count
  
Application.Excel4IntlMacroSheets(i).Visible = True
  
Next i
  
End Sub
Bác mà ở Mỹ chắc có được 1 bằng phát minh, kiếm tiền xài lai rai được đó
 
Thấy các bác bàn thảo sôi nổi quá mà em không hiểu gì hết. Em cũng đang mày mò về macro 4. Các bác cho em hỏi có cách nào gọi macro 4 bằng nút lệnh mà không phải dùng VBA không? Em mò hoài mà mò không dính. Giúp em với!
 
Ai cho mình biết cách để dùng macro4 một cách tự động khi mở file không? Vì khi mở file nó cứ hiện Yes/No.
 

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

Back
Top Bottom