Avatar billede flashit Nybegynder
13. januar 2003 - 16:36 Der er 4 kommentarer og
2 løsninger

Kun en Excel åbent af gangen

Hej E.

Kan man via VBA sørge for at man ikke kan åben en Excel fil samtidigt med at man har en fil åben?

En forklaring.

1 Man åbner en Excel fil, som indeholder noget kode.
2 Denne kode gør at man ikke kan åben en Excel fil mere.
3 Man lukker filen.
4 Derefter kan man åbne alle de filer man vil.

Kan man det?
Avatar billede bak Forsker
14. januar 2003 - 21:25 #1
Det tror jeg ikke.
Man kunne jo blænde alle åbn-knapper ud og lukke af for genvejstasterne, men man vil stadig kunne åbne fra stifinder. (dette kan dog også hindres)

Jeg kan gi' dig noget kode, der lukker de filer man forsøger at åbne umiddelbart efter åbning. dvs at de lige når at åbne inden de lukkes ned automatisk.
Interesseret ?
Avatar billede flashit Nybegynder
14. januar 2003 - 21:48 #2
Det vil ikke løse mit problem.

Problemet er at jeg disabler en masse funktioner i Excel, og når filen lukkes enabler jeg dem igen.

Problemet er så bare at man kan åbne filen 2 gange og derved "komme om" desablingen af funktionerne.

Man kan man ikke skrive noget som.
application_beforeexit eller application.beforeclose

jeg bruger nemlig

workbook_beforecolse men der er ikke sikkert nok :-(
Avatar billede martin_moth Mester
15. januar 2003 - 11:25 #3
Hmm - kan brugerne ikke bare svare nej til at åbne med macroer, og så omgå alle dine "disablinger" på den måde?

Jeg kender til Auto_Open() og Auto_Close(), men de bliver gemt i et modul der knytter sig til et regneark, og ikke selve Excel...

Derudover er der objektet Application, som jeg ofte bruger til Application.Screenupdate = True/False. Jeg kan se, at der også kan anvendes masser af andre metoder på Application, bl.a. Application.Quit. Mon ikke der er noget du kan bruge der?
Bare et par strøtanker :o)
Avatar billede bak Forsker
15. januar 2003 - 17:14 #4
Ok, jeg har kigget lidt på det.
Opret et nyt Class-module og indsæt følgende:
Public WithEvents xl As Application
Private Sub xl_WorkbookOpen(ByVal Wb As Workbook)
    Application.EnableEvents = False
    Wb.Close
    Application.EnableEvents = True
End Sub

I ThisWorkBook indsæt

Private Sub Workbook_Open()
Set x.xl = Application
End Sub

og i et alm. modul indsæt denne public var:

Public x As New Class1

Der vil nu ske det at hvis en anden fil åbnes, bliver det øjeblikkelig lukket.
For at forhindre at denne fils Before_close enabler menuerne, bliver Enableevents slået fra inden den lukker, således at Before_close ikke køres.

For at omgå martin indvending med "nej til at åbne med makro" kunne du indsætte et forsideark, og sætte alle "rigtige" ark til xlVeryHidden og lade din sub workbook_open ændre disse til xlVisible.
det betyder at hvis man slår makroer fra, vil man kun kunne se din forside (med relevant info), alt andet er meget skjult.
Hvis man åbner med makroer vil alt være synligt.
Bak
Avatar billede bak Forsker
15. januar 2003 - 17:27 #5
Lige en rettelse til Class-modulet:

Private Sub xl_WorkbookOpen(ByVal Wb As Workbook)
    If Wb.Name = ThisWorkbook.Name Then Exit Sub
    Application.EnableEvents = False
    Wb.Close
    Application.EnableEvents = True
End Sub
Avatar billede flashit Nybegynder
17. januar 2003 - 10:20 #6
Kanon bak

Det ser jo helt fint ud.

Jeg løste det ved at bruge workbooks.close som den sidste linie inde end sub
Da i begge kom med ting som hjalp mig på vej må i dele :-)

Man i skal have mange tak
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester