Avatar billede dkpret Nybegynder
11. juni 2010 - 12:11 Der er 5 kommentarer og
1 løsning

Lukke regneark hvis navn er i en variabel

Hej
Excel 2003, vba
Åbner en Workbook(2) fra en allerede åben Workbook(1) med kommandoen
    Flt = "Excel mappe(*.xls),*.xls,"
    Titel = "Find and select the Month Report"
    Filnavn = Application.GetOpenFilename(Flt, 1, Titel)
    If Filnavn = False Then Exit Sub
    Workbooks.Open Filnavn
Herefter markerer og kopierer jeg data og returnerer til Workbook(1), hvor jeg indsætter de relevante data.

Når dette er gjort vil jeg gerne lukke WorkBook(2) uden at få dialogbokse op omkring udklipsdata og lignende. Den skal bare lukkes uden at gemme.

Workbook(1) er aktiv, luk Workbook(2), Herefter Workbook(1) igen aktiv.

Jeg kender excelnavnet på Workbook(1), men jeg kender ikke excelnavnet på Workbook(2), bortset fra at variablen Filnavn indeholder excelnavnet på denne.

Men jeg har et forståelses problem omkring det at lukke en en Workbook hvis "substitutnavn" er Filnavn og ikke f.eks. Mitregneark.xls.
Kan I hjælpe
Avatar billede Ialocin Novice
11. juni 2010 - 12:48 #1
Hej dkpret.

Jeg har lige forsøgt mig med følgende:

Kopieret din åbne rutine ind i et regneark, hvilket fungerer :o)
Så åbner jeg et andet regneark valgt i "din" åbne dialogboks.

I det valgte regnearks VBA kode skriver jeg følgende procedure i ThisWorkbook - arket:

Private Sub Workbook_BeforeClose(Cancel As Boolean)
ThisWorkbook.Close False
End Sub

Hvilket lukker det valgte regneark UDEN dialogboksen, som spørg om der skal gemmes.

Mvh Nicolai
Avatar billede dkpret Nybegynder
11. juni 2010 - 18:05 #2
Hej Nicolai

Tak for buddet.
Med det valgte regneark - mener du så det regneark jeg henter ind ind med Åbnerutinen.? Det formoder jeg.

Dette regneark - workbook(2)- er genereret af et "system" og det er ikke muligt at placere vba kode i det. Det vil være et nyt regneark hver måned, med et nyt navn.

Jeg bruger Workbook(2) i min VBA rutine, hvor jeg efter kommandoen
Workbooks.Open Filnavn '(Filnavn er en variabel der indeholder det komplette Excelnavn på Workbook(2))
kan vælge faner, kolonner o.s.v og kopiere til variabler.
Det vil sige - nu er Workbook(2) aktiv, alias Filnavn

Herefter returnerer jeg til min allerede åbne Workbook(1) med kommandoen
Windows("Workbook(1).xls").Activate
hvor jeg indsætter data som jeg kopierede fra Workbook(2)

Nu savner jeg så at kunne lukke Workbook(2) pænt efter mig.

Workbook(1).xls er aktiv
Hvordan lukker jeg nu Workbook(2).xls som jeg ikke kender excelnavnet på, men som jeg kender som variablen Filnavn.
(Variablen Filnavn indeholder det komplette excelfilnavn.
og jeg vil gerne retur til Workbook(1)

Hilsen Kristian
Avatar billede kabbak Professor
11. juni 2010 - 21:09 #3
hvis du har din VBA kode i Workbook(1), så kan du lukke alle andre med.


Public Sub luk()
Dim W As Workbook
For Each W In Workbooks
    If W.Name <> ThisWorkbook.Name Then
        W.Close savechanges:=False
    End If
Next W
       
End Sub
Avatar billede Ialocin Novice
11. juni 2010 - 23:41 #4
Hej dkpret

Jeg har et lidt mere krøllet forslag :o)


2 knapper på workbook(1)
- en som åbner fildialogboksen
- en som lukker workbook(2), uanset hvad den hedder ??



VBA kode i Workbook(1)


(General declarations)

Dim data As DataObject
Public fil As String  'filnavn + filendelse



Private Sub cmdÅbenFilDialogboks_Click()
Dim filsti As String            'filens sti som en tekst variabel
Dim antaltegnifilsti As Integer 'antal tegn i filstien
Dim t As Integer                'tællevariabel i for..next løkken
Dim højretegn As Variant        'filstien talt op med 1, bagfra!
Dim venstretegn As Variant      'tjekker om det venstre tegn er \
Dim antaltegn  As Integer      'antal tegn i den isolerede fil
                                'selve filnavnet + filendelsen!!

 
'initialiser antaltegn
antaltegn = 0


Flt = "Excel mappe(*.xls),*.xls,"
Titel = "Find en eller anden fil"
filsti = Application.GetOpenFilename(Flt, 1, Titel)

If filsti = "" Then Exit Sub
   
   
'tæl antal tegn i filstien
antaltegnifilsti = Len(filsti)
   

   
        'løb antallet af tegn i filstien igennem
        For t = 1 To antaltegnifilsti
   
            'set højretegn = "t"-antal højretegn i filstien
            højretegn = Right(filsti, t)
         
         
            'set venstretegn = det venstre tegn i den aktuelle
            'højretegn´s sti
            venstretegn = Left(højretegn, 1)
         
            'tjek det venstre tegn
            'hvis venstretegn = "\" ... så har vi den isolerede
            'fil (filnavn + filendelse)
            If venstretegn = "\" Then
           
               
                'set fil = det isolerede filnavn + filendelse,
                'talt op bagfra ved hjælp af løkken
                fil = Right(højretegn, antaltegn)
           
                                         
                'forlad løkken
                Exit For
         
            Else
           
            'antal tegn talt op bagfra i løkken
            antaltegn = antaltegn + 1
               
           
            End If
           
           
        Next
     

    'åben den valgte fil, som ligger for enden af filstien
    Workbooks.Open filsti
   
   
End Sub



Private Sub cmdLukWorkbook2_Click()

'den isolerede fil, som blev skrevet under åbningen af workbook(2), er med som argument
Workbooks(fil).Close SaveChanges:=False


End Sub



Det virker på hvilken som helst "workbook(2)" hos undertegnede.
Om der er en nemmere måde til at lukke en enkelt workbook på, aner jeg ikke ? ... men jeg vil gerne høre/lære det :o)

Mvh, Nicolai
Avatar billede dkpret Nybegynder
13. juni 2010 - 21:52 #5
Hej Kabbak og Nocolai

Mange tak for forslagene. Begge virker som I beskriver.

I første omgang faldt jeg for Kabbak's forslag, men jeg er efter nærmere omtanke gået væk fra den igen, idet jeg jo ikke kan vide om "brugeren" af værktøjet "Workbook(1) har andre Excelfiler åbne end lige de to jeg koncentrerer mig. Men tak for budet.

Din løsning virker fin Nicolai og da jeg i forvejen "streng" manipulerer med WorkBook(2)'s Excelnavn. (bruger en del af navnet som overskrift i den rapport der genereres i Workbook(1) - så lå den lige til højre benet.
Sender du et svar - så jeg kan give dig pointene.

Mvh Kristian
Avatar billede Ialocin Novice
14. juni 2010 - 09:28 #6
Hej dkpret

Hermed et "svar"

Jeg takker og bukker :o)

Mvh Nicolai
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
Vi har et stort udvalg af Excel kurser. Find lige det kursus der passer dig lige her.

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