Avatar billede h_s Forsker
08. november 2006 - 20:05 Der er 12 kommentarer og
1 løsning

Makro - forskellige drev

Jeg har følgende deklartioner af konstanter:

'---------------------Dette er deklartioner af konstante variabler-----------------------------
'Kontrol af om der er skrevet navn i C3 og dato i H3
    Set x = Worksheets("Info").Range("C3")
    Set y = Worksheets("Info").Range("H3")
    Const Bogmærke As String = "Navn"
    Const Kunobeller As String = "C:\Kunobeller\"    'Mappe hvor programmet ligger i
    Const Referater As String = "C:\Kunobeller\Referater\"    'Dette er mappen hvor den gemmer wordfilen
    Const Skabeloner As String = "C:\Kunobeller\Skabeloner\"    'Dette er mappen hvor den finder skabelonen
    Const DotName As String = "kunobeller.dot"    'Dette er navnet på skabelonen
    Const CellStr As String = "C3"    'Dette er feltet hvor den finder navnet på eleven
    '-----------------------------------------------------------

Mit problem at det er forskelligt hvilket drev der bruges til at gemme filerne. Derfor har jeg brug for at min makro ændres, så der kigges på hvilket der arbejdes på. Altså hvor den er åbnet fra og så bruges den.
En af udfordringerne er den, at der åbenes en kopi af en skabelon, og første gang den gemmes, skal den gemmes på samme drev som skabelonen.

F.eks.
Som ovenfor: C-drev - Bruges "C:/"
Åbnes på F-drev - Bruges "F:/"
Åbnes på S-drev - Bruges "S:/"
osv.

Hvis filen flyttes fra C:/ til F:/ skal F:/ bruges til den flyttes til noget andet.
Avatar billede excelent Ekspert
08. november 2006 - 20:24 #1
=VENSTRE(CELLE("filnavn");3)

gir aktuel drev fx. C:\

kan du så ikke hente den ind i makro fra en selle

ikke testet på en kopi af en skabelon
Avatar billede kabbak Professor
09. november 2006 - 09:29 #2
I gamle dage, var det ikke nødvendig at angive Drevbogstav, hvis det ikke blev angivet, blev tingene gemt på det drev man "står på".

Så hvis man var på C:
Gør disse 2 linier det samme


"C:\Kunobeller\Referater\"

"\Kunobeller\Referater\"
Avatar billede h_s Forsker
10. november 2006 - 20:14 #3
Jeg har prøvet begge løsninger og løber ind i et problem.
Selvom jeg har skabelonen liggende på F-drevet og åbner en ny, og gemmer den ved hjælp af min makro, vil den gemme på C-drevet. Også selvom jeg bruger "\Kunobeller\Referater\" istedet for "C:\Kunobeller\Referater\"

Når jeg bruger =VENSTRE(CELLE("filnavn");2) er der ingen ting i cellen før den gemmes. det betyder jeg få en fejl når jeg bruger makroen.
Avatar billede excelent Ekspert
10. november 2006 - 22:20 #4
følgende funktion returnerer SAND eller FALSK
afhængig af om filen du angir findes
hvis filen kun findes i et af de drev du anvender
og du ikke har alt for mange kunne det måske være en mulighed

Function Hvor(rsFullPath As String) As Boolean
  Hvor = CBool(Len(Dir$(rsFullPath)) > 0)
End Function

indsæt i et alm. modul
i arket skriv: =Hvor("F:\temp\navn.xls")
hele stien og filnavn.type skal angis
indsæt den i så mange celler som du har mulige drev
og test efterfølgende på disse celler
Avatar billede h_s Forsker
11. november 2006 - 13:56 #5
excelent> Jeg er ikke helt sikker på hvad du mener!
Der findes en xls- og doc-fil med samme navn. De laves begge ud fra skabeloner. Makroerne, som jeg har problemer med gemmer xls- og doc-filerne. Men de skal gerne gemme på samme drev , som skabelonen ligger på, i mappen \Kunobeller\Referater\.
Der er to makroer en til xls-filen og en til doc-filen.
Avatar billede excelent Ekspert
11. november 2006 - 15:36 #6
netop derfor testes der for på hvilket drev skabelonen ligger
men en skabelon har vist ikke .xls som type - kan ikke lige huske hvad

lad os antage at skabelonen ligger på F:\ drevet så vil
=Hvor("F:\Kunobeller\Referater\din skabelon navn.???")
returnere SAND

eks.
A1=Hvor("F:\Kunobeller\Referater\din skabelon navn.???")
A2=Hvor("C:\Kunobeller\Referater\din skabelon navn.???")
A3=Hvor("S:\Kunobeller\Referater\din skabelon navn.???")

så vil A1,A2 eller A3 have værdien SAND og de andre 2 FALSK

så ved du hvor skabelonen ligger
Avatar billede excelent Ekspert
11. november 2006 - 15:41 #7
en skabelon ender vist på .xlt
Avatar billede excelent Ekspert
11. november 2006 - 16:30 #8
så er jeg ved at være klar med en kode der kan indsættes i din egen
i stedt for alt tidligere foreslået

først lige et par opklarende spørgsmål
hvad hedder din skabelon ?
den findes kun på 1 af 3 drev (C,F,S) ?
Avatar billede bak Forsker
11. november 2006 - 17:09 #9
Der er også lidt info her
http://www.eksperten.dk/spm/513439
Avatar billede h_s Forsker
11. november 2006 - 17:15 #10
Den ene hedder Public Sub cmdGem_Click(). Den bruges til at gemme .xls.
og den anden hedder Public Sub cmdÅbenReferat(). Den bruges til at åbne en .doc via en .dot. og så gemme den med samme navn som .xls.

Der kan godt være andre drev alt efter hvor den enkelte bruger vælger at have det liggende. Et er sikkert: alle referater (.xls og .doc) - hænger sammen parvis - ligger i ?:\Kunobeller\Referater\ og begge skabeloner ligger i ?:\Kunobeller\Skabeloner\.

Det jeg har brug for er at det er muligt at tjekke på hvilket drev der arbejdes fra. Og det skal gerne være via en makro, så jeg kan putte det ind i den eksisterende!
Avatar billede excelent Ekspert
11. november 2006 - 17:42 #11
mit forslag står og falder med om skabelonen kun ligger på 1 af flere drev
indsæt koden i din makro
definer variablen Drev
udskift ? med skabelonnavn
og tilføj selv ekstra linier som nedenstående for alle andre drev

If CBool(Len(Dir$("C:\Kunobeller\Skabeloner\?????.xlt")) > 0) Then Drev = "C"
If CBool(Len(Dir$("F:\Kunobeller\Skabeloner\?????.xlt")) > 0) Then Drev = "F"
If CBool(Len(Dir$("S:\Kunobeller\Skabeloner\?????.xlt")) > 0) Then Drev = "S"
Avatar billede h_s Forsker
30. december 2006 - 16:39 #12
bak> kan du ikke give mig lidt mere hjælp mht. det link ud har lagt til mig!
Jeg kunne godt tænke mig en løsning, hvor jeg ikke er afhængig af at jeg har diffeneret det enkelte drev for at kunne gemme.
Jeg vil gerne kunne gemme på samme drev som skabelonen hentes!
Jeg bruger følgende makro idag:
Public Sub cmdGem_Click()

'---------------------Dette er deklartioner af konstante variabler------------------------------------------------
  Dim Blank
  Dim OK
  Dim Gemt
  Set x = Worksheets("Info").Range("C3")
  Set y = Worksheets("Info").Range("H3")
  Set z = Worksheets("Info").Range("C4")
  Const Referater As String = "\Kunobeller\Referater\" 'Dette er mappen hvor den gemmer referaterne
  Const Kunobeller As String = "\Kunobeller\" 'Dette er mappen hvor hele programmet ligger
'-----------------------------------------------------------------------------------------------------------------
If x = "" Or y = "" Or z = "" Then
      'Hvis "C3" "C4" eller "H3" er " ", så kommer der en meddelse om at man skal skrive ref.
      Blank = MsgBox(Prompt:="Husk at udfylde både barnets navn, undersøgt- og fødselsdato!", Title:="Meddelelse", Buttons:=vbInformation)
      Worksheets("Info").Select
      Range("C3").Select
 
  Else
       
    'Hvis filnavn indeholder navnet i Info,C3 gemmes filen i samme navn, ellers oprettes nyt navn
    If InStr(1, ActiveWorkbook.Name, Worksheets("Info").Range("C3").Text) > 0 Then
        ActiveWorkbook.Save
        'Viser Messegebox
        Gemt = MsgBox(Prompt:=Referater & Format(y, "YYYY") & "-" & Format(y, "MM") & "-" & x, Title:="Filen er gemt", Buttons:=vbOKOnly)
       
    Else

          'Vises "Er du sikker"
          OK = MsgBox(Prompt:="Er du sikker?", _
          Title:="Gem", Buttons:=vbQuestion + vbYesNo)
       
            If OK = vbNo Then
             
            Else

              'Kontrol af at de nødvendige mapper findes
              A = Dir(Kunobeller, vbDirectory)
               
                If A = "" Then
                  MkDir (Kunobeller)
                End If
           
              B = Dir(Referater, vbDirectory)
           
                If B = "" Then
                  MkDir (Referater)
                End If
                   
                  'Sætter barnets navn ind i sidehoved til venstre
                  Sheets("Diagram").Select
                  With ActiveChart.PageSetup
                  .LeftHeader = "&18" & Chr(10) & "Navn: " & x
                  End With
               
                  Sheets("Opgørelsesark").Select
                  With ActiveSheet.PageSetup
                  .LeftFooter = "Navn: " & x
                  End With
       
                  Sheets("info").Select
               
                  'Gemmer fil
                  FilNavn = Referater & Format(y, "YYYY") & "-" & Format(y, "MM") & "-" & x
                  ActiveWorkbook.SaveAs Filename:=FilNavn, FileFormat:=xlNormal
                 
                  'Viser Messegebox
                  Gemt = MsgBox(Prompt:=Referater & Format(y, "YYYY") & "-" & Format(y, "MM") & "-" & x, Title:="Filen er gemt", Buttons:=vbOKOnly)     
          End If
      End If
End If
End Sub
Avatar billede h_s Forsker
16. marts 2007 - 07:08 #13
Har droppet en løsning, da jeg ikke kan finde noget der virker :-|
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
Excel kurser for alle niveauer og behov – find det kursus, der passer til dig

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