Avatar billede mfj1 Nybegynder
08. september 2002 - 12:54 Der er 3 kommentarer og
1 løsning

Døb Excel filen

Hej eksperter!

Jeg har en ”lille ” Makro der er blevet til med megen hjælp fra Eksperten.

Makroen opretter fra en skabelon det antal Excel filer og det antal Ark i hver fil jeg ønsker. Hver fil DØBES Mappe1, Mappe2 osv..

Mit spørgsmål er: Kan der laves en Makro der automatisk DØBER filen efter det uge nr. der står i A6 og det navn der kommer til at stå i D6.

Navnet på filer kan f.eks. hedde: <<37Jensen_Service>> i sted for <<Mappe1>>

37 er uge nr. i A6 og Jensen Service er navnet i D6.

Mfj1
Avatar billede bak Forsker
08. september 2002 - 13:10 #1
Her er noget der kode der kan gøre det. Hvis du skal have passet det ind i den kode du har i forvejen, skal jeg lige se den (igen).

Dim fname As String

fname = [a6].Value & [d6].Value
ActiveWorkbook.SaveAs Filename:=fname, FileFormat:= _
        xlNormal, Password:="", WriteResPassword:="", ReadOnlyRecommended:=False _
        , CreateBackup:=False
Avatar billede mfj1 Nybegynder
08. september 2002 - 13:29 #2
Hej bak.

Her er koden:

Sub OpretMapper()
Dim sti As String
Dim matrix As Variant
Dim StdWsh As Worksheet
Dim MedWsh As Worksheet
Dim SkaOpgwsh As Worksheet
Dim X As Integer, Y As Integer
Dim Oldsheets As Integer
Dim LastName As String
With ThisWorkbook
  Set StdWsh = .Sheets("skabelon")
  Set MedWsh = .Sheets("Medarbejdere")
  Set SkaOpgwsh = .Sheets("Opgørelse")
End With

With Application
  Oldsheets = .SheetsInNewWorkbook
  .SheetsInNewWorkbook = 1
  .ScreenUpdating = False
  .Calculation = xlCalculationManual
End With

matrix = MedWsh.UsedRange
For X = 1 To UBound(matrix, 2)
  Workbooks.Add
  With ActiveWorkbook
    .Sheets(1).Name = matrix(1, X)
    SkaOpgwsh.Copy after:=Sheets(1)
    For Y = 3 To UBound(matrix, 1)
      If matrix(Y, X) = "" Then Exit For
      StdWsh.Copy after:=.Sheets(Y - 1)
      With ActiveSheet
        .Name = matrix(Y, X)
        .Range("D6") = matrix(Y, X)
        .Range("C4") = matrix(1, X)
        .Range("D5") = matrix(2, X)
        If Y >= 4 Then
            .Range("C8").Formula = "='" & matrix(3, X) & "'!C8"
            .Range("C8:c27").FillDown
        End If
        LastName = matrix(Y, X)  'arknavnet på sidste ark
      End With
    Next
    With Sheets("Opgørelse")
      .Range("b4") = matrix(1, X)  'indsætter Firmanavn
      .Range("B5") = matrix(2, X)  'Indsætter indkøbsordrenummer
      .Range("B8").Formula = "='" & matrix(3, X) & "'!C8" 'indsætter jobnummer
      '***** indsætter formel med timer
      .Range("C8").Formula = "=sum('" & matrix(3, X) & ":" & LastName & "'!D155)"
      '***** indsætter formel med overtid
      .Range("D8").Formula = "=sum('" & matrix(3, X) & ":" & LastName & "'!E155)"
      '***** Kopierer formlerne ned
      .Range("B8:D27").FillDown
      .Move after:=Sheets(LastName)  'Flytter opgørelsen til sidste Ark
    End With
  End With
  With Application
    .DisplayAlerts = False
    Sheets(1).Delete  '*** sletter 1. ark
    .DisplayAlerts = True
  End With
Next
With Application
  .SheetsInNewWorkbook = Oldsheets
  .ScreenUpdating = True
  .Calculation = xlCalculationAutomatic
End With
End Sub
Avatar billede bak Forsker
08. september 2002 - 18:05 #3
Ok her er ny kode.
Som jeg kan se det er firmanavnet da i C4 og ikke i D6, så det har jeg gået ud fra, ellers kan du selv ændre det.


Sub OpretMapper()
Dim sti As String
Dim matrix As Variant
Dim StdWsh As Worksheet
Dim MedWsh As Worksheet
Dim SkaOpgwsh As Worksheet
Dim X As Integer, Y As Integer
Dim Oldsheets As Integer
Dim LastName As String
Dim Fname As String
With ThisWorkbook
  Set StdWsh = .Sheets("skabelon")
  Set MedWsh = .Sheets("Medarbejdere")
  Set SkaOpgwsh = .Sheets("Opgørelse")
End With

With Application
  Oldsheets = .SheetsInNewWorkbook
  .SheetsInNewWorkbook = 1
  .ScreenUpdating = False
  .Calculation = xlCalculationManual
End With

matrix = MedWsh.UsedRange
For X = 1 To UBound(matrix, 2)
  Workbooks.Add
  With ActiveWorkbook
    .Sheets(1).Name = matrix(1, X)
    SkaOpgwsh.Copy after:=Sheets(1)
    For Y = 3 To UBound(matrix, 1)
      If matrix(Y, X) = "" Then Exit For
      StdWsh.Copy after:=.Sheets(Y - 1)
      With ActiveSheet
        .Name = matrix(Y, X)
        .Range("D6") = matrix(Y, X)
        .Range("C4") = matrix(1, X)
        .Range("D5") = matrix(2, X)
        If Y >= 4 Then
            .Range("C8").Formula = "='" & matrix(3, X) & "'!C8"
            .Range("C8:c27").FillDown
        End If
        LastName = matrix(Y, X)  'arknavnet på sidste ark
      End With
    Next
    With Sheets("Opgørelse")
      .Range("b4") = matrix(1, X)  'indsætter Firmanavn
      .Range("B5") = matrix(2, X)  'Indsætter indkøbsordrenummer
      .Range("B8").Formula = "='" & matrix(3, X) & "'!C8" 'indsætter jobnummer
      '***** indsætter formel med timer
      .Range("C8").Formula = "=sum('" & matrix(3, X) & ":" & LastName & "'!D155)"
      '***** indsætter formel med overtid
      .Range("D8").Formula = "=sum('" & matrix(3, X) & ":" & LastName & "'!E155)"
      '***** Kopierer formlerne ned
      .Range("B8:D27").FillDown
      .Move after:=Sheets(LastName)  'Flytter opgørelsen til sidste Ark
    End With
  End With
  With Application
    .DisplayAlerts = False
    Sheets(1).Delete  '*** sletter 1. ark
    .DisplayAlerts = True
  End With
  Fname = Sheets(1).Range("A6").Value & Sheets(1).Range("C4").Value
  ActiveWorkbook.SaveAs Filename:=Fname, FileFormat:= _
        xlNormal, Password:="", WriteResPassword:="", ReadOnlyRecommended:=False _
        , CreateBackup:=False
Next
With Application
  .SheetsInNewWorkbook = Oldsheets
  .ScreenUpdating = True
  .Calculation = xlCalculationAutomatic
End With
End Sub
Avatar billede mfj1 Nybegynder
08. september 2002 - 18:17 #4
Det er C4, så du har ret, at jeg fik skrevet D6 skyldes måske vi kom lidt sent hjem fra vindmølle koncerten.  Eller virker det perfekt, Tak, du får lige 60 point.

Mfj1
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