Avatar billede alicevv Nybegynder
10. oktober 2002 - 22:29 Der er 14 kommentarer og
1 løsning

Indspil Makro?

Jeg forsøger mig lidt med at Indspille en eller flere Makroer, men da det er det samme jeg indspiller uge for uge bortset fra ”Range(”C4”).Selct” flytter sig 2 koloner
hver gang (hver uge) så sidste kolonne må blive ”BJ4”, er mit spørgsmål om der findes en nemmere  løsning end indspille Makroen 30 gange.

Et følge spørgsmål, når jeg engang er færdig, vil jeg gerne have alle filerne 01uge.xls, 02uge.xls osv. lagt ud på en server W:\UGER, filen Årsopgørelse_uge.xls ligger samme sted, men i en anden mappe W:\UGER\AARSOP. Hvordan klare man lige det i en Makro??

Windows("01uge.xls").Activate
    Selection.Copy
    Windows("Årsopgørelse_uge.xls").Activate
    Range("C4").Select
    ActiveSheet.Paste

    Windows("02uge.xls").Activate
    Range("C2:D25").Select
    Application.CutCopyMode = False
    Selection.Copy
    Windows("Årsopgørelse_ugeSIM.xls").Activate
    Range("E4").Select
    ActiveSheet.Paste

    Windows("03uge.xls").Activate
    Range("C2:D25").Select
    Application.CutCopyMode = False
    Selection.Copy
    Windows("Årsopgørelse_uge.xls").Activate
    Range("G4").Select
    ActiveSheet.Paste

    Windows("04uge.xls").Activate
    Range("C2:D25").Select
    Application.CutCopyMode = False
    Selection.Copy
    Windows("Årsopgørelse_uge.xls").Activate
    Range("I4").Select
    ActiveSheet.Paste
   
    Windows("04SIM.xls").Activate
    Range("I4").Select
    Application.CutCopyMode = False
End Sub

alicevv
Avatar billede alicevv Nybegynder
10. oktober 2002 - 22:53 #1
Windows("04SIM.xls").Activate, der er sket en afskrivnings fejl der skal stå:
Windows("04uge.xls").Activate

alicevv
Avatar billede sjap Praktikant
10. oktober 2002 - 23:08 #2
Nedenstående kan måske bruges til en del af opgaven (den der umiddelbart ser repitativ ud):

Dim tæller As Integer
For tæller = 2 To 52
    Windows(TEKST(tæller, "00") & "uge.xls").Activate
    Range("C2:D25").Select
    Application.CutCopyMode = False
    Selection.Copy
    Windows("Årsopgørelse_uge.xls").Activate
    Range(Chr(65 + tæller * 2) & "4").Select
    ActiveSheet.Paste
Next tæller
Avatar billede sjap Praktikant
10. oktober 2002 - 23:11 #3
Hov TEKST hedder ikke sådan i VBA. Linien erstattes med

    Windows(Format(tæller, "00") & "uge.xls").Activate
10. oktober 2002 - 23:13 #4
Du har sikkert lagt mærke til at når du indspiller, ender makroerne i et modul der hedder newmacro, hvor makroen begynder:

sub [makronavn]()
'kode
end sub

du kan blot kopiere kode stykket og sætte det ind under hinanden, samtidig med at du ændrer makro-navnet og de småting du har set er ændret inde i koden.

når du har gjort det og gemt, kan du i excel med [alt]+[f8] se alle dine 30 makroer, samt afspille dem efter behag.
10. oktober 2002 - 23:15 #5
Superjap> glimrende ! den var jeg inde på, men jeg tror ikke det er noget der skal afspilles på en gang med succesivt i løbet af året
Avatar billede sjap Praktikant
10. oktober 2002 - 23:22 #6
udviklingskonsulente

Nej, jeg så også bagefter at makroen skulle indspilles 30 gange - så der er i hvert tilfælde noget, der ikke går op med min makro.

Din ide er nu også udmærket - det eneste problem er at man så skal foretage kaldet til sub'en 30 gange, men det kan iøvrigt kombineres med mit forslag (ved at lægge kaldene ind in løkke). Ja, der er mange muligheder.
Avatar billede alicevv Nybegynder
11. oktober 2002 - 19:16 #7
Superjap.
Din Makro funger, men jeg har tre spørgsmål til den:
1.    Hvorfor kopier den ikke 01uge med over i ÅrsopgørelseUge
Jeg har lavet 5 små filer 01uge, 02uge osv. til at teste Makroen i?
2.    Hvorfor er den sidste fil 05uge forsat markeret som om den skal kopieres når Makroen har kørt?
3.    Hvorfor markeres Makro linien med fejl:
Windows(Format(tæller, "00") & "uge.xls").Activate

Makroen er som følger NU:
'Dim tæller As Integer
For tæller = 2 To 52
    Windows(Format(tæller, "00") & "uge.xls").Activate
    Range("C8:D27").Select
    Application.CutCopyMode = False
    Selection.Copy
    Windows("ÅrsopgørelseUge.xls").Activate
    Range(Chr(65 + tæller * 2) & "4").Select
    ActiveSheet.Paste
Next tæller

End Sub

alicevv
Avatar billede alicevv Nybegynder
11. oktober 2002 - 19:29 #8
forsat kommentar
Hvis jeg åbner 01uge, 02uge, 03uge og 05uge og naturligvis ÅrsopgørelsenUge og køre Makroen stopper den ved 03uge, 05 uge bliver ikke kopieret over.

alicevv
Avatar billede alicevv Nybegynder
11. oktober 2002 - 19:32 #9
kommentar til første kommentar.
01uge kommer med når blot 2 ændres til 1.

alicevv
Avatar billede sjap Praktikant
11. oktober 2002 - 22:54 #10
alicevv

1. Sådan som jeg så dit oplæg, så gør du ikke helt det samme for uge 1, som for de andre uger. Du kan selvfølgelig ændre det, så det passer til dit behov.
2. Det var da et godt spørgsmål. Måske er det nødvendigt at placere en range("XX").select efter løkken.
3. Det forstår jeg ikke. Jeg kan får ikke nogen fejl i den linie. Hvad er fejlmeddelelsen?
Avatar billede sjap Praktikant
11. oktober 2002 - 22:58 #11
alicevv

Hvis 04uge ikke er åbnet går programmet naturligvis ned i den programlinie hvor den vil forsøge at markere et område i 04uge. Du skal i stedet enten undersøge om regnearket er åbent eller sørge for at programmet ikke går ned ved fejl, men blot fortsætter med den næste.
Avatar billede sjap Praktikant
11. oktober 2002 - 23:24 #12
Placer nedenstående kommando efter løkken - den sikrer, at kopimarkeringen fjernes.

Application.CutCopyMode = False
Avatar billede sjap Praktikant
12. oktober 2002 - 00:00 #13
alicevv

Jeg har lavet et par justeringer, der skulle rette op på de ting du nævnte:

-  Første uge, der kopieres er uge 1
-  Programmet går ikke ned ved manglende filer
-  Kopimarkeringen fjernes inden programmet afsluttes

Som du kan se kræver det lige en ekstra funktion (IsOpen) som jeg også har tilføjet.

NU er det vist sengetid  ;-)

Public Sub KopierUgeFiler()
Dim strFileName As String
Application.ScreenUpdating = False
For tæller = 1 To 52
    strFileName = Format(tæller, "00") & "uge.xls"
    If IsOpen(strFileName) Then
        Windows(strFileName).Activate
        Range("C8:D27").Select
        Selection.Copy
        Windows("ÅrsopgørelseUge.xls").Activate
        Range(Chr(63 + tæller * 2) & "4").Select
        ActiveSheet.Paste
    End If
Next tæller
Application.CutCopyMode = False
Application.ScreenUpdating = True

End Sub

Function IsOpen(filename As String) As Boolean
    Dim wb As Workbook
    For Each wb In Application.Workbooks
        If UCase(wb.Name) = UCase(filename) Then
            IsOpen = True
            Exit Function
        End If
    Next wb
    IsOpen = False
End Function
Avatar billede alicevv Nybegynder
12. oktober 2002 - 12:52 #14
Superjap.
Nu har jeg prøvet at teste Makroen på mange forskellige måder og det funger BARE, Tak.
Et lille spørgsmål, er det muligt at hente data fra en lukket fil??
Avatar billede sjap Praktikant
12. oktober 2002 - 13:27 #15
Alicevv

Det lyder godt. Vedrørende dit lille ekstraspørgsmål så prøv at se på http://j-walk.com/ss/excel/tips/tip82.htm
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