Avatar billede richter1 Nybegynder
10. november 2007 - 16:57 Der er 19 kommentarer og
1 løsning

Kopier to kolonner fra en worksheet over i en ny workbook.

Jeg har en udfordring i forbindelse med en woorkbook kaldet a, hvor jeg skal have kopieret indholdet fra kolonne e og kolonne f over i en ny workbook kaldet b. Der står noget i de andre kolonnner som ikke skal med over. Der er flere worksheets i workbooken. i alle tilfælde er det indholdet af kolonne e og f, der skal med over. Af den årsag vil jeg gerne have kopieret de enkelte worksheets én ad gangen. Hvem kan hjælpe?
Avatar billede excelent Ekspert
10. november 2007 - 17:54 #1
Forudsætter begge projektmapper er åbne og de har samme antal ark
Ark(1) E1:F100 i a.xls kopieres til Ark(1) E1:F100 i b.xls

Sub CopyEF()

Dim wb1 As Workbook
Dim wb2 As Workbook
Set wb1 = Workbooks("a.xls")
Set wb2 = Workbooks("b.xls")

For t = 1 To wb1.Sheets.Count
wb1.Sheets(t).Range("E1:F100").Copy Destination:=wb2.Sheets(t).Cells(1, "E")
Next

End Sub
Avatar billede excelent Ekspert
10. november 2007 - 17:54 #2
derefter ark(2),ark(3) osv
Avatar billede richter1 Nybegynder
10. november 2007 - 19:01 #3
workbook b eksistere ikke, men skal oprettes som en del af makroen. navnene på fanebladene på det enkelte worksheet skal med over i det nye ark. Navnet på den nye workbook skal dannes ud fra månedsnavnet + 1. Hvis workbook a hedder november, så skal den nye hedde december.
Avatar billede excelent Ekspert
10. november 2007 - 19:35 #4
har du flere overraskelser inden jeg går i gang ?
Avatar billede richter1 Nybegynder
11. november 2007 - 09:29 #5
Jeg har ikke så stor erfaring her på eksperten, så jeg har nok ikke udtryk mig klart nok i spørgsmålet, da jeg mente at det var naturligt at navnet på fanebladene kom med over.
Avatar billede excelent Ekspert
11. november 2007 - 10:24 #6
ok jeg ser på det
Avatar billede excelent Ekspert
11. november 2007 - 10:49 #7
prøv om denne kan bruges :

Sub CopyEF()

'gemmer først aktuel projektmappe
ThisWorkbook.Save

'find næste måneds navn
n = Left(ThisWorkbook.Name, 3)
For t = 1 To 12
If n Like Format(DateSerial(2007, t, 1), "mmm") Then
navn = Format(DateSerial(2007, t + 1, 1), "mmmm")
End If
Next

'sletter alle kolonner på nær E og F
For Each sh In ActiveWorkbook.Sheets
sh.Range("A1:D65535").Clear
sh.Range("G1:IV65535").Clear
Next

'gemmer med nyt navn
ActiveWorkbook.SaveAs navn & ".xls"

End Sub
Avatar billede hubertus Seniormester
12. november 2007 - 16:24 #8
Første del med at gemme og generee det nye navn virker ok, men sidste del virker ikke. Jeg får en fejl i linien sh.Range("A1:D65535").Clear. Det ser ud som om at det er sh der giver problemet. Hvad kan være årsagen?
Avatar billede excelent Ekspert
12. november 2007 - 16:29 #9
umiddelbart gætter jeg på arkbeskyttelse, men jeg checker lige i mit testark
Avatar billede hubertus Seniormester
12. november 2007 - 16:32 #10
Der er ikke nogen beskyttelse på mit testark, men det er der på det ark som jeg skal bruge koden i.
Avatar billede excelent Ekspert
12. november 2007 - 16:35 #11
beskyttelse kan vi slå til eller fra via koden
men fejler koden i et ikke beskyttet ark ?
Avatar billede hubertus Seniormester
12. november 2007 - 16:37 #12
ja det gør den. Jeg har lavet et ark med 3 sheets og så blot indsat noget tekst i de felter som jeg ønsker slettet. Koden stoppen ved linien: sh.Range("A1:D65535").Clear
Avatar billede excelent Ekspert
12. november 2007 - 16:43 #13
kan du ikke sende dit testark til mig så kikker jeg på det
pm@madsen.tdcadsl.dk
Avatar billede hubertus Seniormester
12. november 2007 - 16:58 #14
Jeg har lige prøvet at med et helt nyt testark, og her virker den sjovt nok. Det tager blot lang tid, med at gennemføre sletningen. Vil det være hurtigere hvis man testede på hvor mange rækker der er på de enkelte ark, og derpå slette?
Når man kan slå beskyttelsen til og fra, kan man så på tilsvarende måde slå delingen til og fra?
Avatar billede excelent Ekspert
12. november 2007 - 17:08 #15
Vedr. deling ved jeg ikke
Vedr. antal rækker så jo,
er alle kolonner fyldt lige langt ned
eller er der en kolonne der altid er flest udfyldte rækker i ?
Avatar billede hubertus Seniormester
12. november 2007 - 17:12 #16
Nej det er de ikke. Der er tale om et skema med rammer omkring. Hvis der tælles på kononne E og F, så vil det hele komme med. Der er ikke nogle kolonner der har flere rækker end de to førnævnte.
Avatar billede excelent Ekspert
12. november 2007 - 17:14 #17
ok jeg prøver at ændre koden til det
men du er vel opmærksom på at filen gemmes 2 gange hvilket tager tid
Avatar billede excelent Ekspert
12. november 2007 - 17:20 #18
Sub CopyEF()

'gemmer først aktuel projektmappe
ThisWorkbook.Save

'find næste måneds navn
n = Left(ThisWorkbook.Name, 3)
For t = 1 To 12
If n Like Format(DateSerial(2007, t, 1), "mmm") Then
navn = Format(DateSerial(2007, t + 1, 1), "mmmm")
End If
Next

'sletter alle kolonner på nær E og F
For Each sh In ActiveWorkbook.Sheets
rkE = sh.Cells(65500, "E").End(xlUp).Row
rkF = sh.Cells(65500, "F").End(xlUp).Row
If rkE < rkF Then rkE = rkF

sh.Range("A1:D" & rkE).Clear
sh.Range("G1:IV" & rkE).Clear
Next

'gemmer med nyt navn
ActiveWorkbook.SaveAs navn & ".xls"

End Sub
Avatar billede richter1 Nybegynder
12. november 2007 - 19:52 #19
Det ser ud til at virke perfekt - og hurtigt. Tusinde tak for hjælpen.
Lægger du et svar?

ps. Hubertus er en af mine kollegaer, som har hjulpet lidt til med mit projekt.
Avatar billede excelent Ekspert
12. november 2007 - 19:58 #20
ok velbekom
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