Avatar billede jemagnussen Nybegynder
25. juni 2004 - 05:32 Der er 11 kommentarer og
1 løsning

Automatisk "gem som", næste filnummer.

Hej,

Jeg arbejder på en formular som bliver åbnet som skrivebeskyttet. Jeg vil meget gerne have hjælp til hvorledes det er muligt at finde det sidst benyttede filnummer, lægge een til og gemme filen under dette nye nummer (ordrenummeret).

Formularen ligger på - lad os sige: "\\server\ordrer\" og hedder f.eks. XX 6000.

Når man aktiverer den celle hvor ordrenummeret skal stå, vil jeg gerne om et popup vindue spørger til om man vil gemme formularen under dette navn (og så vise det næste ledige filnummer i den folder) og give mulighed for at tilføje en kort beskrivende tekst efter de første 10 tegn i filnavnet. F.eks. "XX 6001 Rulleskøjter.xls"

Håber at jeg har beskrevet det klart nok..?

Har forsøgt mig men kan ikke rigtig komme uden om en liste i en anden fil hvor der bliver lagt en til en række af numre og det virker lidt klodset at skulle over en ekstra fil..!?

Mvh

Jesper
Avatar billede kabbak Professor
25. juni 2004 - 08:58 #1
Det sidste nummer, der er brugt, det er svært at aflæse på filen, hvis det ikke står sidst.

der er lidt om det her.

http://www.eksperten.dk/spm/458476
Avatar billede jemagnussen Nybegynder
25. juni 2004 - 13:06 #2
Hej,

Ja, sidst jeg lavede noget lignende brugte jeg så vidt jeg da husker noget der hed parsing af filnavnet for at finde de cifre der skulle tælles og lægges en til... Vi er udstationerede og jeg har ikke fået mine bøger med.

Jeg kigger lidt på det du henviser til og vender tilbage..

Mvh

Jesper
Avatar billede jemagnussen Nybegynder
26. juni 2004 - 04:52 #3
Hej igen,

Jeg har leget lidt med det du henviste til, men der er stadigt problemet med at "læse" filnavnet og finde det navn med det højeste nummer selv om det indgår midt i filnavnet. Husker jeg rigtigt hvis det var noget med parsing? Når der sorteres i folderen står filerne i den rigtige orden, sorteret efter tallene.

AA 6234, rulleskøjter
AA 6235, andemad
AA 6236, kager

De første to karrakterer er altid ens og mellemrummet er der også altid sammen med 6 tallet. Det er derfor de 3 cifre efter 6 tallet som der skal sorteres på og udvælges fra for at finde næste nummer i rækken. AA 6237 skal indsættes på ordren i "D5" og så skal filen gemmes som AA 6237, "tekststreng", hvor tekststrengen indsættes fra en dialogboks.

Det kan godt være at det er nemt, men jeg synes det er svært... :-(

Jesper
Avatar billede kabbak Professor
26. juni 2004 - 12:07 #4
ok,

denne sættes i det arkmodul der skrives I D5 på.

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If Not Intersect(Target, Range("D5")) Is Nothing Then
Call Gem
End If
End Sub

resten her sættes i et modul

Public Sub Gem()
Dim Bem As String, sti As String, Nr As String, Filnavn As String
sti = "C:\data\" ' ret til din sti
Filnavn = Left(Worksheets("Ark1").Range("D5").Value, 7) ' ret til dit arks navn
i = 5999
Nr = "AA " & i
Do
fundet = (Dir(sti & Filnavn & "*.xls"))
snavn = Nr
If fundet = "" Then
svar = MsgBox("Filen eksisterer ikke" & vbCrLf _
    & "Skal den gemmes under navnet. " & vbCrLf _
    & sti & Filnavn & ", " & Bem & ".xls", vbYesNoCancel)
  If svar = vbCancel Then Exit Sub
 
If svar = vbNo Then
      Nr = FindSidste(sti)
      Bem = InputBox("Intast bemærkninger til filen")
      svar = MsgBox(" Filen gemmes så som :" & vbCrLf _
      & sti & Nr & ", " & Bem & ".xls", vbOKCancel)
  If svar = vbOK Then
      ActiveWorkbook.SaveAs Filename:=sti & Nr & ", " & Bem, FileFormat:=xlNormal ' filen laves som ny med det næste nummer
  Else
  Exit Sub
  End If
        Exit Sub
  End If
 
  If svar = vbYes Then
  Bem = InputBox("Intast bemærkninger til filen")
    ActiveWorkbook.SaveAs Filename:=sti & Nr & ", " & Bem, FileFormat:=xlNormal ' filen laves som ny
    Exit Sub
  End If
End If

If Left(fundet, 7) = snavn Then ' tjekker om den eksisterer

    svar = MsgBox("Filen eksisterer som" & vbCrLf _
  & sti & fundet & vbCrLf _
  & "Skal den erstattes. ?", vbYesNoCancel)
  If svar = vbCancel Then Exit Sub
  If svar = vbNo Then
    Nr = FindSidste(sti)
      Bem = InputBox("Intast bemærkninger til filen")
      svar = MsgBox(" Filen gemmes så som :" & vbCrLf _
      & sti & Nr & ", " & Bem & ".xls", vbOKCancel)
  If svar = vbOK Then
      ActiveWorkbook.SaveAs Filename:=sti & Nr & ", " & Bem, FileFormat:=xlNormal ' filen laves som ny med det næste nummer
  Else
  Exit Sub
  End If
        Exit Sub
  End If
 
  If svar = vbYes Then
  Application.DisplayAlerts = False
    ActiveWorkbook.SaveAs Filename:=sti & fundet, FileFormat:=xlNormal ' filen overskrives
  Application.DisplayAlerts = True
    Exit Sub
  End If

End If
i = i + 1
Nr = "AA " & i
Loop

End Sub

Public Function FindSidste(sti) As String
Dim Sidste() As Variant, Old As String
i = 0
Old = ""
Do
i = i + 1
fundet = (Dir(sti & "AA *.xls"))
If Old = fundet Then Exit Do
Old = fundet
ReDim Preserve Sidste(i)
Sheets("Ark2").Cells(i, 1) = Mid(fundet, 4, 4) ' bruger her ark2 til at finde den næste
Loop
myVar = Application.WorksheetFunction _
        .Max(Sheets("Ark2").Range("A:A"))
Sheets("Ark2").Range("A:A").Clear
FindSidste = "AA " & myVar + 1
End Function
Avatar billede jemagnussen Nybegynder
26. juni 2004 - 16:20 #5
Hej igen,

Det fungerer meget fint med lidt tilretninger. Jeg siger mange tak og venter på et "svar" så jeg kan give dig dine points.

Mvh

Jesper
Avatar billede kabbak Professor
26. juni 2004 - 16:47 #6
et svar ;-))
Avatar billede kabbak Professor
27. juni 2004 - 12:19 #7
Tak for point. ;-))

må vi se den kode du sluttede med, så vi kan lære noget. ?
Avatar billede jemagnussen Nybegynder
29. juni 2004 - 05:55 #8
Hej igen,

Thjaa.. det kan du nok ikke lære meget af.. :-), men måske du kan fortælle mig hvorfor denne kode ikke virker, ser ud som om der er problemer med at holde rede på hvor den er i de to ark?

Sub PO_Sidste() 'Checker navnet på sidst gemte PO og gemmer som ny.
Dim Bem As String, sti As String, svar As String, PO As Object, List As Object
Static Filnavn

sti = "C:\Documents and Settings\JesperM\My Documents\PO Ordrer\"
Filnavn = Right(Worksheets("List").Range("B1").Value, 4)
Worksheets("List").Range("A1:A999").SortSpecial _
    SortMethod:=xlAscending
Worksheets("List").Range("A1").Select
If Worksheets("List").Range("A1").Value = "" Then
    Range("A1") = "EA 6000"
Else
    Worksheets("List").Range("A1").CurrentRegion.Select
    Range("A1:A999").End(xlDown).Select
    Selection.Copy Range("B1")
    Range("B1") = Right(Worksheets("List").Range("B1").Value, 4)
    Filnavn = Range("B1") + 1
End If
  MsgBox "Sidst gemte PO er EA " & Range("B1")
   
  svar = MsgBox("PO'en eksisterer ikke" & vbCrLf _
    & "Skal den gemmes under navnet EA " & Filnavn & ", " & Bem & ".xls", _
    vbYesNo)
    If svar = vbYes Then
        ActiveCell.Offset(1, 0) = "EA " & Filnavn
        Bem = InputBox("Intast bemærkninger til PO'en")
        ActiveWorkbook.SaveAs Filename:="EA " & Filnavn & ", " & Bem, _
        FileFormat:=xlNormal
        Worksheets("PO_AIR").Range("D7").Value = "EA" & Filnavn
    Else
    svar = vbNo
        Application.DisplayAlerts = False
        'ActiveWorkbook.Close
        Application.DisplayAlerts = True
    End If
 
End Sub

Mvh

Jesper
Avatar billede kabbak Professor
29. juni 2004 - 08:37 #9
Sub PO_Sidste() 'Checker navnet på sidst gemte PO og gemmer som ny.
Dim Bem As String, sti As String, svar As String, PO As Object, List As Object
Static Filnavn
Worksheets("List").Activate ' HER VÆLGES ARKET LIST
sti = "C:\Documents and Settings\JesperM\My Documents\PO Ordrer\"
Filnavn = Right(Worksheets("List").Range("B1").Value, 4)
Worksheets("List").Range("A1:A999").SortSpecial _
    SortMethod:=xlAscending
   
Worksheets("List").Range("A1").Select
If Worksheets("List").Range("A1").Value = "" Then
    Range("A1") = "EA 6000"
Else
    Worksheets("List").Range("A1").CurrentRegion.Select
    Range("A1:A999").End(xlDown).Select
    Selection.Copy Range("B1")

' ANDET ARK SKAL AKTIVERES HER ELLERS RYGER B1 I SAMME ARK, ret til dit ark
Worksheets("Ark1").Activate
    Range("B1") = Right(Worksheets("List").Range("B1").Value, 4)
    Filnavn = Range("B1") + 1
End If
  MsgBox "Sidst gemte PO er EA " & Range("B1")
   
  svar = MsgBox("PO'en eksisterer ikke" & vbCrLf _
    & "Skal den gemmes under navnet EA " & Filnavn & ", " & Bem & ".xls", _
    vbYesNo)
    If svar = vbYes Then
        ActiveCell.Offset(1, 0) = "EA " & Filnavn
        Bem = InputBox("Intast bemærkninger til PO'en")
        ActiveWorkbook.SaveAs Filename:="EA " & Filnavn & ", " & Bem, _
        FileFormat:=xlNormal
        Worksheets("PO_AIR").Range("D7").Value = "EA" & Filnavn
    Else
    svar = vbNo
        Application.DisplayAlerts = False
        'ActiveWorkbook.Close
        Application.DisplayAlerts = True
    End If
 
End Sub
Avatar billede jemagnussen Nybegynder
30. juni 2004 - 05:11 #10
Hej Kabbak,

Ja - det var faktisk lykkedes mig at finde ud af at arkene skal aktiveres før de kan arbejdes på. Tidligere er det lykkedes mig at gøre dette "Usynligt" for brugeren. Dette kan jeg dog ikke lige huske, det hjælper ikke at forsøge med "visible = false" for så er der det samme problem med at koden ikke vil referere til arket. Det må være muligt at arbejde på et ark der ikke er åbent eller synligt.

Har du nogen ideer? Jeg stiller gerne spørgsmålet som nyt, hvis du efterhånden gerne vil have nogle flere points...

Mvh

Jesper
Avatar billede kabbak Professor
30. juni 2004 - 08:02 #11
Application.ScreenUpdating = False
'koden
Application.ScreenUpdating = True
Avatar billede kabbak Professor
30. juni 2004 - 08:08 #12
Application.ScreenUpdating = False
Sheets("list").Visible = True


'koden


Sheets("list").Visible = False
Application.ScreenUpdating = True
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