I'm looking for a way to find every macro that is attached to a document and
delete or respectively deactivate them. How do I do that?
Regards, Hans
I'm looking for a way to find every macro that is attached to a document and
delete or respectively deactivate them. How do I do that?
Regards, Hans
Hi Hans,
I'm looking for a way to find every macro that is attached to a document and
delete or respectively deactivate them. How do I do that?
With a script would probably be the easisest way, by unzipping the OD* files and parsing the unzipped contents to seach for the Basic directory, deleting it, then rezipping the file ?
Alex
Alex Thurgood wrote (09-11-11 21:12)
With a script would probably be the easisest way, by unzipping the OD*
files and parsing the unzipped contents to seach for the Basic
directory, deleting it, then rezipping the file ?
And via the user interface (Tools > Macro's > .. )
Or is that answer too simple ?
Cheers,
Hi Cor, Alex
Well, kind of - too simple that is.
The problem, as I recall it from before, is that you can not remove the
standard library from a document once you have added it, in fact the
macro dial
You can empty it, but since you can not remove it, even if there are no
actual functions or procedures left in the library you still are told
when you open the file that there are embedded macros (depending on your
macro security settings).
It's a bit of a pain actually.
//drew
Hi Alex,
I was thinking it took a bit more then that and so I just tried it and
yes.
You need to make three changes.
After unzipping the file you remove two directories:
= Basic
= Dialogs
Then you need to edit the file manifest.xml in the META-INF directory.
- remove all lines that reference basic or dialog.
[They look something like]
<manifest:file-entry manifest:media-type="text/xml" manifest:full-path="Basic/Standard/script-lb.xml"/>
Then you re-zip and voila it works.
If you leave out the last step the file will not open.
HTH somehow,
//drew
Drew's method will work just fine if what you mean to do is to remove all macros contained in a document (as opposed to removing all references to macros from inside the document; in a button or an associated event, for example).
See if you can make the document current and run this macro....
Sub RemoveAllContainedLibs
Dim sNames
Dim oLibs
Dim i%
oLibs = ThisComponent.BasicLibraries
sNames = oLibs.getElementNames()
For i = UBound(sNames) To LBound(sNames) Step -1
oLibs.removeLibrary(sNames(i))
Next
oLibs = ThisComponent.DialogLibraries
sNames = oLibs.getElementNames()
For i = UBound(sNames) To LBound(sNames) Step -1
oLibs.removeLibrary(sNames(i))
Next
End Sub
Dear Sir,
I would be much obliged if you could help me with the following problem
Using LibreBase (Ubuntu 11.10) I tried to make a pushbutton macro to open a form "Name2c" from within another form
From the Internet I get the following script
Sub OpenAForm(oEv As Object)
Dim GetFormName As String
Dim GetForm as Object
GetFormName = "Name2c"
GetForm = ThisDatabaseDocument.FormDocuments.GetByName(GetFormName)
GetForm.Open
End Sub
however when I run it the following message appears
Basic runtime error
Object variable not set
Could you provide me with the correct script
Thanking you for your attention and cooperation
Your Investment - Wealth - Health - Education consultant
Budi Machribie (F06592)
The SunHorse Team
PT.Sunlife Finance Indonesia
Gd CIMB-Niaga 3Ath fl
Jl.Jen.Sudirman kav 25
Jakarta 12920
+08161815979
Blog-http://tough2slf.multiply.com/
Website: http://www.tough2slf.net78.net/
Hi Andrew,
Excellent - the only problem is, and it aint yours per so, is removing
libraries from a document - at least with LibO 3.4.4 as that is what I
tried it on - does not set the dirty flag for the documnet. So if you
run the macro and close the document the change isn't saved...arrrgh.
Best wishes,
//drew
Dear Sir,
Hi Budi
For future reference - It is much better if you start a new thread for
new questions, rather then changing the subject line from an existing
discussion.
I would be much obliged if you could help me with the following problem
Using LibreBase (Ubuntu 11.10) I tried to make a pushbutton macro to open a form "Name2c" from within another form
>From the Internet I get the following script
Sub OpenAForm(oEv As Object)
Dim GetFormName As String
Dim GetForm as Object
GetFormName = "Name2c"
GetForm = ThisDatabaseDocument.FormDocuments.GetByName(GetFormName)
GetForm.Open
End Subhowever when I run it the following message appears
Basic runtime error
Object variable not set
Yeah - the problem is that the psudo variable ThisDatabaseDocument is
only valid when the macro is contained in a basic library embedded in
the ODB file - and refers explicitly to this Base file without regard
from where it's called.
So, I'm guessing your calling it from a shared Basic library, just move
the code into the ODB file and your good to start.
Best wishes,
//drew
Am 10.11.2011 01:02, drew wrote:
sNames = oLibs.getElementNames()
For i = UBound(sNames) To LBound(sNames) Step -1
oLibs.removeLibrary(sNames(i))
Next
End Sub
sNames = oLibs.getElementNames()
For i = UBound(sNames) To LBound(sNames) Step -1
if sNames(i)<>"Standard" then
oLibs.removeLibrary(sNames(i))
ThisComponent.setModified(True)
endif
Next
End Sub
Howdy Andreas,
Cool - now back to something Andrew noted - what about places where the
embedded macros might called from. Not sure how to find everywhere, but
we can enhance that basic procedure to clear out any document event
handlers.
Sub RemoveAllContainedLibs
Dim sNames
Dim oLibs
Dim i%
Dim EmptyEventProps(1) as new com.sun.star.beans.PropertyValue
oLibs = ThisComponent.BasicLibraries
sNames = oLibs.getElementNames()
For i = UBound(sNames) To LBound(sNames) Step -1
oLibs.removeLibrary(sNames(i))
Next
oLibs = ThisComponent.DialogLibraries
sNames = oLibs.getElementNames()
For i = UBound(sNames) To LBound(sNames) Step -1
oLibs.removeLibrary(sNames(i))
Next
'
' clear all document event handlers
For i = UBound(ThisComponent.Events.elementNames) To LBound(ThisComponent.Events.elementNames) Step -1
ThisComponent.Events.ReplaceByName(ThisComponent.Events.ElementNames(i), EmptyEventProps())
next
'
' force dirty flag on document
ThisComponent.setModified(True)
End Sub
Yeah, I noticed that too. I considered changing the macro to set the document dirty (I think that I can do that), but, decided it was not worth the trouble to look up how to do it....
I upgraded to Fedora 16, installed LO 3.4.3, and then the next day they release 3.4.4.... <sigh>. So that is the same version that I tested with as well.
Cor wrote
And via the user interface (Tools > Macro's > .. )
Or is that answer too simple ?
I was looking there. But I find the way of managing macros absolutely
non-intuitive.
So I have this document I know nothing about because I received it by email,
that are programmed to do I don't know what.
To learn more about this macro or these macros, I need to know in which
language it/they are scripted. How would I know? So I'm going try one
language after the other.
First is LibreOffice Basic. I get this ridiculously small dialog whose
window can not made larger with kind of a file manger on the left and 3
icons that might be interpreted as folders. A click on one of them opens it
and offers me sub-folder with sub-folders. To see anything in the right part
of that window - which so far is entirely empty - I need to choose on
(sub-)folder or its content on the left and get the name of a macro (I
suppose). And then the button to delete it in the far right is not active.
And I would have to do this with every scripting language and sub-category.
Nope, it is not too simple.
But the short answer to my question seems to be that it can not be done. I'm
not even going to start to dive into dissecting documents and rebuilding
them.
Regards, Hans
drewjensen wrote:
The problem, as I recall it from before, is that you can not remove the
standard library from a document once you have added it, in fact the
macro dialYou can empty it, but since you can not remove it, even if there are no
actual functions or procedures left in the library you still are told
when you open the file that there are embedded macros (depending on your
macro security settings).It's a bit of a pain actually.
I'd rather call this a bug.
Regards, Hans
Hi
With any Gnu&Linux it is easy to install a virtual machine and open the
document in there. If anything goes horribly wrong you can just delete the
VM. Alternatively use a spare partition, or create one and install a basic
OS to there instead of to a VM. Similarly if there is a problem then you
always have the nuclear option of deleting the partition.
One way to get rid of macros is save in another format such as Odt or Rtf
but that may change the layout of the document.
If you do trust the person that sent you the document then perhaps just scan
it with an antivirus such as ClamAv and then open it to see what it does.
Most malware infested documents are aimed at MS Office on Windows so
LibreOffice on Gnu&Linux is likely to be much safer even ignoring the fact
that you open the document as a normal user rather than an Admin/SuperUser
so it's much more difficult for malware even if LO and Gnu&Linux was the
intended target. If the document ask you to key-in your super-secret
SuperUser password then just cancel that but it's incredibly unlikely to try
elevating privileges on your system if you are using Gnu&Linux.
Regards from
Tom
Hi
There is a release plan/schedule here
http://wiki.documentfoundation.org/ReleasePlan
It is very aggressive and i tend to find a good one and stick with it for ages.
Regards from
Tom