Just nu i M3-nätverket
Gå till innehåll

Namnge Excel-fil automatiskt


NailZ

Rekommendera Poster

Hej alla.

Jag har en liten fråga. Går det att ta värden från celler i Excel och på något sätt ge som namn till filen. Jag har ett beställningsformulär i Excel och jag skulle vilja med hjälp av ett makro ta informationen från en del av cellerna och ge som namn på filen. Genom att ta tex datum, vem som gjorde beställningen och vem beställningen är till som filnamn så hittar man lätt filen sen. En fördel skulle också vara att man inte av misstag sparar över det tomma originalet med ett ifyllt dokument. Är det möjligt? Jag är inte så enormt insatt i VBA så om det går att lösa förklara gärna enkelt.

 

Mvh NailZ

 

Länk till kommentar
Dela på andra webbplatser

Något liknande detta?

 

//eforum.idg.se/viewmsg.asp?EntriesId=727220

 

 

/T

 

Even when we know we´ll never find the answers, we have to keep on asking questions.

 

Länk till kommentar
Dela på andra webbplatser

Hej.

Ja. Fast jag behöver ingen dropdown-meny. Jag hade tänkt att ha en knapp kopplad till makrot som det sedan bara är att klicka på.

 

Alltså om jag plockar datum, anställningsnr. och kundnr från respektive cell i Excel så vill jag att filen ska heta ååmmdd-xx-xx. Gärna med bindestreck mellan så att det blir lättare att söka. Och precis som i den andra tråden så vill jag inte att föregående fil ska ersättas. Går det att lägga till någon varning eller möjlighet att skriva ett eget filnamn de gånger det blir ett likadant filnamn vore det helt underbart.

 

 

Länk till kommentar
Dela på andra webbplatser

Tja, allt är möjligt. Om det är en bra sak att göra är en annan sak.

 

Och ja, det jag skapade för den andra tråden kan mycket väl vara tillämpligt i detta fall.

 

Frågorna som kvarstår är:

Ett verktyg tillgängligt i en arbetsbok eller i en installation av Excel, dvs en add-in?

Eller är det bara ett blad ur en arbetsbok som ska sparas?

Var ska det sparas?

Och - hur ska man hitta namnet på arbetsboken? Fasta celler, dvs låsta adresser, via namn eller leta?

 

och, mmh, är det inte en databas du ska satsa på istället? spara uppgifterna där och slå upp dem?

 

 

/T

 

Even when we know we´ll never find the answers, we have to keep on asking questions.

 

Länk till kommentar
Dela på andra webbplatser

[color="#0000ff"]Sub[/color] Save()
    [color="#0000ff"]Dim[/color] orderDate, orderer, receiver As [color="#0000ff"]String[/color]
    orderDate = Range([GRÅ]"A1"[/GRÅ]).Text [color="#006400"]'Ersätt A1 med cellen med datum[/color]
    orderer = Range([GRÅ]"B1"[/GRÅ]).Text [color="#006400"]'Ersätt B1 med cellen med beställare[/color]
    receiver = Range([GRÅ]"C1"[/GRÅ]).Text [color="#006400"]'Ersätt C1 med cellen med mottagare[/color]
    ThisWorkbook.SaveAs orderDate & [GRÅ]"-"[/GRÅ] & orderer & [GRÅ]"-"[/GRÅ] & receiver
[color="#0000ff"]End[/color] [color="#0000ff"]Sub[/color]

Inga finesser eller smartheter, bara "pang på". Bekräftelse vid överskrivning kommer med på köpet, men kan ge lite felmeddelanden om du väljer att inte skriva över.

 

Länk till kommentar
Dela på andra webbplatser

Lägg bara till raden

On Error Resume Next

så slipper man eventuella felmeddelanden.

 

Och koppla till en knapp så är det klart...

 

Det kan dock behövas specificeras lite mer var den ska sparas. Som det nu är sparas den som standard i Mina Dokument. Så frågan är om den alltid ska sparas i samma bibliotek som den nuvarande arbetsboken eller på en annan plats?

 

Kanske en dialog alltid ska komma upp istället? Den vanliga spar-dialogen men med ett föreslaget namn enligt givna mallen?

 

Annars Stålior, bra förslag.

 

/T

 

Even when we know we´ll never find the answers, we have to keep on asking questions.

 

Länk till kommentar
Dela på andra webbplatser

:)

 

Så som jag hade tänkt mig det hela är att man öppnar originalblanketten och fyller i den med de uppgifter man vill ha där. Därefter klickar man på en knapp i blanketten som dels sparar filen med ett nytt namn och dels skickar vissa uppgifter till en Excel-databas. (Ger man filen ett nytt namn ersätter väl man inte originalet?) Eftersom det inte går att ha med alla uppgifter i databasen så hade jag tänkt att ha en länk därifrån till filen med det nya namnet. (Det blir både för mycket uppgifter och det kan vara ritningar och sånt med i blanketten också som inte går att ha i databasen.) Länken i databasen ska också skapas automatiskt. Problemet är att jag inte vet namnet på filen innan den har sparats och då har jag lite svårt att automatiskt göra en länk.

 

Det är flera människor som ska använda det här sen och det går inte att lita på att de namnger filen exakt efter de instruktioner som man ger. Därför vill jag att alltihop ska göras med en knapp.

 

Originalet ska sedan vara tomt och redo för andra att fylla i medan den ifyllda blanketten har blivit en ny fil.

 

På det här sättet har man fördelen att snabbt kunna söka i databasen efter rätt blankett/fil och man kan sedan komma direkt till den blankett man vill kika lite närmare på.

 

Fick du svar på någon fråga där eller blev det ännu krångligare? Eller har kanske jag krånglat till det i onödan? Mycket text blev det iaf. :)

 

Länk till kommentar
Dela på andra webbplatser

Det fungerade helt perfekt. Tack så mycket båda två.

En liten fråga till bara. Hur får jag den sparade filen till en annan mapp? Den ska till samma mapp hela tiden.

 

Länk till kommentar
Dela på andra webbplatser

Okej, du vill alltså ha ett tillägg till Excel som sparar den nu öppna filen enligt ett visst mönster? Eller kanske kod i en fil som gör att denna går att spara enligt detta. Enda problemet med det senare kanske är att koden då följer med den sparade filen och det kanske inte är önskvärt. Problemet med ett tillägg är att det egentligen enbart, i detta fall, är applicerbart på just ett visst dokument

 

Båda problemen kanske går att lösa, men det tar vi när det blir aktuellt.

 

(Ger man filen ett nytt namn ersätter väl man inte originalet?)

nej, det gör man inte. Bäst är nog då att se till att originalet är skrivskyddat och inte går att ändra. Samt att man på något sätt förhindrar användaren från att spara på annat sätt än via "din" knapp.

 

Problemet är att jag inte vet namnet på filen innan den har sparats och då har jag lite svårt att automatiskt göra en länk.

Det finns rutiner i Excel som körs vid en sparning:

[color="#0000ff"]Private[/color] [color="#0000ff"]Sub[/color] Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)


[color="#0000ff"]End[/color] [color="#0000ff"]Sub[/color]

Med denna kan man fånga alla sparningar och validera hur arbetsboken sparas, ex.v. namn. Då behövs inga speciella knappar, vanliga spar-rutinerna går att nyttja.

 

Dvs - denna kod körs innan eventuella dialoger eller annat. Jag är inte helt klar på hur man ska använda den, men tror att den kan vara av användning här. Då följer dock koden med i den nya arbetsboken.

 

mmh, men jag måste klura ut hur man använder den...

 

Och, du missar en fråga - var ska den sparas? I samma mapp som originalet?

 

/T

 

Even when we know we´ll never find the answers, we have to keep on asking questions.

 

Länk till kommentar
Dela på andra webbplatser

Den ska till samma mapp hela tiden.

som originalet?

[color="#0000ff"]Sub[/color] Save()
    [color="#0000ff"]Dim[/color] orderDate, orderer, receiver As [color="#0000ff"]String[/color]
    [color="#0000ff"]On Error Resume[/color] [color="#0000ff"]Next[/color]
    orderDate = Range([GRÅ]"A1"[/GRÅ]).Text [color="#006400"]'Ersätt A1 med cellen med datum[/color]
    orderer = Range([GRÅ]"B1"[/GRÅ]).Text [color="#006400"]'Ersätt B1 med cellen med beställare[/color]
    receiver = Range([GRÅ]"C1"[/GRÅ]).Text [color="#006400"]'Ersätt C1 med cellen med mottagare[/color]
    ThisWorkbook.SaveAs ThisWorkbook.Path & [GRÅ]"\"[/GRÅ] & orderDate & [GRÅ]"-"[/GRÅ] & orderer & [GRÅ]"-"[/GRÅ] & receiver
[color="#0000ff"]End[/color] [color="#0000ff"]Sub[/color]

 

Med reservation för att det kanske inte fungerar på en Mac då skiljetecknet i sökvägen sklijer.

 

var det så enkelt? Duger detta?

 

 

/T

 

Even when we know we´ll never find the answers, we have to keep on asking questions.

 

Länk till kommentar
Dela på andra webbplatser

:)

Tack för svaren. Jag tror att jag klarar mig ett tag med de som jag har fått.

 

Nej. Filerna ska sparas i en egen mapp men det löser jag nog med MHs svar.

 

Åter igen tack.

 

Länk till kommentar
Dela på andra webbplatser

Min kod var mest tänkt som ett jasvar på frågan "går det?" och inte en väl fungerande lösning. Eftersom jag inte kan VBA så är koden framtagen genom "Objektgranskning" i "Visual Basic Editor" och innehåller dumheter. Men eftersom du ville ha en fungerande lösning så här kommer en lite bättre variant:

 

I en tom arbetsbok lägg in följande makrokod:

[color="#0000ff"]Sub[/color] Save()
    [color="#0000ff"]Dim[/color] orderDate, orderer, receiver, filename, path As [color="#0000ff"]String[/color]
    orderDate = Range([GRÅ]"A1"[/GRÅ]).Text [color="#006400"]'Ersätt A1 med cellen med datum[/color]
    orderer = Range([GRÅ]"B1"[/GRÅ]).Text [color="#006400"]'Ersätt B1 med cellen med beställare[/color]
    receiver = Range([GRÅ]"C1"[/GRÅ]).Text [color="#006400"]'Ersätt C1 med cellen med mottagare[/color]
    filename = orderDate & [GRÅ]"-"[/GRÅ] & orderer & [GRÅ]"-"[/GRÅ] & receiver
    path = [GRÅ]"c:\sökväg\"[/GRÅ] [color="#006400"]'Ersätt med korrekt sökväg[/color]
    [color="#0000ff"]On Error Resume[/color] [color="#0000ff"]Next[/color]
    [b]Application[/b].ActiveWorkbook.SaveAs path & filename
    [color="#0000ff"]If[/color] Err.Number <> 0 [color="#0000ff"]Then[/color]
        [color="#0000ff"]Select[/color] [color="#0000ff"]Case[/color] Err.Number
            [color="#0000ff"]Case[/color] 1004
                [color="#0000ff"]Dim[/color] fileSaveName As Variant
                ChDir path
                fileSaveName = [b]Application[/b].GetSaveAsFilename(filename & _
                    [GRÅ]".xls"[/GRÅ], [GRÅ]"Microsoft Excel-arbetsbok (*.xls), *.xls"[/GRÅ])
                [color="#0000ff"]If[/color] fileSaveName <> [color="#0000ff"]False[/color] [color="#0000ff"]Then[/color]
                    [b]Application[/b].ActiveWorkbook.SaveAs fileSaveName
                [color="#0000ff"]End[/color] [color="#0000ff"]If[/color]
            [color="#0000ff"]Case[/color] [color="#0000ff"]Else[/color]
                [color="#0000ff"]MsgBox[/color] [GRÅ]"Kunde ej spara filen. Vänligen "[/GRÅ] & vbCrLf & _
                    [GRÅ]"använd de vanliga sparafunktionerna."[/GRÅ], _
                    vbExclamation, [GRÅ]"Problem att spara"[/GRÅ]
        [color="#0000ff"]End[/color] [color="#0000ff"]Select[/color]
    [color="#0000ff"]End[/color] [color="#0000ff"]If[/color]
    [color="#0000ff"]On Error[/color] GoTo 0
[color="#0000ff"]End[/color] [color="#0000ff"]Sub[/color]

I egenskaper för dokumentet skriv in det namn du vill att tillägget ska namnges med. Spara dokumentet som ett Microsoft Excel-tilläg (*.xla). Under Verktyg->Tillägg... Bläddra fram tillägsfilen. Bocka för den och klicka på OK. Lägg till en knapp i någon verktygsrad och koppla den till funktionen i makrot. Klart.

 

Felhanteringen är bristfällig. Man borde t.ex. kontrollera att man utgår från mallen, att inte cellerna är tomma m.m. Men lite roligt ska väl du också få.

 

Länk till kommentar
Dela på andra webbplatser

Arkiverat

Det här ämnet är nu arkiverat och är stängt för ytterligare svar.

×
×
  • Skapa nytt...