..|| Blog || Produkti/Storitve || MExcel || MDodatki || 300 nasvetov ||..

Workbooks Close

Pomoč pri izdelavi makrov

Workbooks Close

OdgovorNapisal/-a Stenly » Sr jun 03, 2009 10:28 pm

Pozdravljeni

Imam Zvezek_1, v njemu formo & nekaj kode. Želel bi zapreti zvezek ob tem, ko zaprem formo (klik na X).
Spodaj je koda. Mislim pa, da ni izbran pravi trenutek (UserForm_Terminate), za izvedbo kode. Večkrat (v večini ne - ampak je moteče) mi pride do neke napake (javi okno za izvedbo samopopravkov), potem se pa Excel kompletno zapre.
Je možno izbrat še kak drug dogodek za za izvedbo te kode?

Koda: Izberi vse
Private Sub UserForm_Terminate()
'
    Workbooks("Zvezek_1.xls").Close SaveChanges:=False
   
End Sub


Lep pozdrav
Stenly
 
Prispevkov: 223
Pridružen: Sr jul 27, 2005 11:29 pm



Matjazev.NET
 

OdgovorNapisal/-a admin » Če jun 04, 2009 8:00 am

Jaz osebno bi dal kodo, ki zapre delovni zvezek kompletno iz kode v samem oknu, ter jo prestavil v funkcijo, ki prikaže okno. Sklepam, da okno prikažete modalno, kar pomeni, da VBA čaka na zaprtje Okna preden nadaljuje z makrom in jaz bi dal kodo za zaprtje zvezka tja:
Koda: Izberi vse
   ...
   MojeOkno.Show 1
   Workbooks("Zvezek_1.xls").Close SaveChanges:=False
lp,
Matjaž Prtenjak
Administrator
admin
Site Admin
 
Prispevkov: 3526
Pridružen: Sr jul 20, 2005 10:06 pm

OdgovorNapisal/-a Stenly » Če jun 04, 2009 8:53 am

Hvala za pomoč.

Lp
Stenly
 
Prispevkov: 223
Pridružen: Sr jul 27, 2005 11:29 pm

OdgovorNapisal/-a sdfpo » To feb 02, 2010 10:34 pm

imam podoben problem

z ukaznim gumbom, ki se nahaja v userform okencu bi rad shranjeval in zapiral celoten workbook

kako to izvesti?

pa še nekaj
recimo če imam v excelu poimenovano eno območje (več celic)
ali lahko to ime uporabim v VBA? kako?
sdfpo
 
Prispevkov: 30
Pridružen: To feb 02, 2010 9:06 pm

OdgovorNapisal/-a admin » To feb 02, 2010 11:23 pm

sdfpo je napisal/-a:z ukaznim gumbom, ki se nahaja v userform okencu bi rad shranjeval in zapiral celoten workbook

kako to izvesti?


Preprosto:
Koda: Izberi vse
Private Sub CommandButton1_Click()
  ThisWorkbook.Save
  ThisWorkbook.Close saveChanges:=False
End Sub


sdfpo je napisal/-a:recimo če imam v excelu poimenovano eno območje (več celic)
ali lahko to ime uporabim v VBA? kako?


Da! Prilagam primer, kjer v celotnem območju odebelite črke:
Koda: Izberi vse
  range("<ime vašega območja>").Font.Bold = true


PS: Kje najdete takšna imena 'sdfpo'? :o
lp,
Matjaž Prtenjak
Administrator
admin
Site Admin
 
Prispevkov: 3526
Pridružen: Sr jul 20, 2005 10:06 pm

OdgovorNapisal/-a sdfpo » Sr feb 03, 2010 12:51 am

hvala za tako hiter odgovor

mogoce sem prej pozabil omeniti, da mi ta "navaden način" ne dela
no zdaj sem pa ze ugotovil zakaj

workbook meddrugin vsebuje tudi ukaz da izbriše 2 lista preden shrani
Koda: Izberi vse
Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
    Sheets(Array("list1", "list2")).Select
    ActiveWindow.SelectedSheets.Delete
End Sub

ki onemogoči shranjevanje in zapiranje workbooka

zakaj ? kako bi se dalo drugace rešiti? lista se nikoli ne smeta shraniti

se nekaj
kaj je narobe
Koda: Izberi vse
    c = Worksheets("list").Range("A6:A300").Find(iskanitekst)
    vrstica = c.Row   

rad bi izvedel številko vrstice v kateri najde iskanitekst
sdfpo
 
Prispevkov: 30
Pridružen: To feb 02, 2010 9:06 pm

OdgovorNapisal/-a admin » Sr feb 03, 2010 8:15 am

  1. Brisanje dveh listov nima nobene zveze s shranjevanjem - napako imate nekje drugje v makrih! Če ne vrjamete, odprite prazen DZ in vanj vpišite kodo, ki ste jo pripisali tukaj - in zvezek shranite - vse deluje OK ;)... (PS: Seveda pa morata lista obstajati, da ju lahko izberete!)
  2. Funkcija Find vrača objekt (območje), zato ga morate prirediti z ukazom Set!
    Koda: Izberi vse
        Set c = Worksheets("list").Range("A6:A300").Find(iskanitekst)
        vrstica = c.Row
lp,
Matjaž Prtenjak
Administrator
admin
Site Admin
 
Prispevkov: 3526
Pridružen: Sr jul 20, 2005 10:06 pm

OdgovorNapisal/-a sdfpo » Sr feb 03, 2010 8:44 am

tudi ce odprem nov DZ in vpisem kodo
Koda: Izberi vse
Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
    Sheets(Array("list1", "list2")).Select
    ActiveWindow.SelectedSheets.Delete
End Sub

in poženem makro
Koda: Izberi vse
Sub Macro2()
    ThisWorkbook.Save
End Sub

se ne zgodi nič, niti ne shrani, niti ne izbriše lista, niti ne javi nobene napake. lista seveda obstajata

drugače če sam kliknem na shrani pa deluje
sdfpo
 
Prispevkov: 30
Pridružen: To feb 02, 2010 9:06 pm

OdgovorNapisal/-a admin » Sr feb 03, 2010 8:58 am

Ne, če uporabite ukaz Save iz kode potem omenjena koda (zapisana v BeforeSave) ne bo delovala, saj je tako določeno v samem Excelu.

Več si lahko preberete tukaj: MS tehnična pomoč
lp,
Matjaž Prtenjak
Administrator
admin
Site Admin
 
Prispevkov: 3526
Pridružen: Sr jul 20, 2005 10:06 pm

OdgovorNapisal/-a sdfpo » Če feb 04, 2010 3:47 pm

aha....bom ze kaj drugega pogruntal

hvala

lp
sdfpo
 
Prispevkov: 30
Pridružen: To feb 02, 2010 9:06 pm


Vrni se na VBA

Kdo je prisoten

Po forumu brska: 0 registriranih uporabnikov in 2 gostov

cron