07. marts 2007 - 19:23Der er
10 kommentarer og 1 løsning
Makro til at danne udskrift
Jeg har lavet et ark til at opgøre optjent afspadsering på mit arbejde. Min chef ville gerne at hun kunne udskrive opgørelsen for en enkelt person hvis hun bliver spurgt hvad vedkommendes saldo er for afspadseringskontoen. Hvis jeg markerer data for en én person kan jeg naturligvis udskrive markeringen, men det kommer til at fylde 2 sider med 2 linjer på hver side. Kan man ikke lave en makro der vælger ud fra navnet, derefter kopierer navnet samt vedkommendes data i 4 linjer over på et andet ark. Problemer: Navnene står i kolonne A i Ark1. Første navn står i A5 (A5 og A6 der flettet sammen). Andet navn står i A7 (A7 og A8 der flettet sammen). osv. Navnet skal kopieres over i Ark2 i cellen A1 uden at formater kopieres med. Første navns data står i områderne C5 til T6 og U5 til AM6. Disse områder skal kopieres til Ark2 C5 til C6 og C10 til T11. Kan i hjælpe?
Der er PT. 26 navne, der er lavet plads til yderligere 22 navne da vi ikke ved hvor længe vi skal bruge arket. Vi har PT. ikke et system der kan opgøre det i lønsedlerne.
Marker de rækker som skal udskrives,-kør makro - evt. blot i kolonne A øvrige rækker skjules imens der printes
Sub SelectPrint() Range("A1:A1200").EntireRow.Hidden = True Selection.EntireRow.Hidden = False ActiveSheet.PrintPreview ' udskift med ActiveSheet.PrintOut skriver til printer Range("A1:A1200").EntireRow.Hidden = False Range("A1").Select End Sub
Næsten rigtigt. Udskriften kommer dog ud på 2 sider da området fylder mere end et liggende A4 ark. Det er derfor jeg har dataområdet som 2 adskilte områder ;-) Det er nu ellers en meget god procedure du der har lavet.
Sub Makro2() Dim Data As Variant, I As Integer Data = Range(Range("A" & Selection.Row), Range("AM" & Selection.Row + 1)) Worksheets("Ark2").Cells(1, 1) = Data(1, 1) For I = 3 To 20 Worksheets("Ark2").Cells(5, I) = Data(1, I) Worksheets("Ark2").Cells(6, I) = Data(2, I) Worksheets("Ark2").Cells(10, I) = Data(1, I + 18) Worksheets("Ark2").Cells(11, I) = Data(2, I + 18) Next End Sub
Jeg har efterhånden erfaret tilstrækkeligt mange gange at man skal beskytte sit arbejde mod brugerne samt forsøge at tage forholdsregler mod så mange fejltagelser som man kan forestille sig. Jeg skjuler derfor så meget som muligt og låser desuden alle celler der ikke må tastes i. Jeg har derfor lavet nogen få ændringer i koden for at beskytte mod diverse fejltagelser. Koden ser nu sådan ud:
Sub UdskrivNavn() Dim Data As Variant, I As Integer, J As Integer
Range("A" & Selection.Row).Select Data = Range(Range("A" & Selection.Row), Range("AM" & Selection.Row + 1)) Sheets("UdskriftsArk").Visible = True Worksheets("UdskriftsArk").Cells(1, 3) = Data(1, 1) For I = 3 To 20 Worksheets("UdskriftsArk").Cells(5, I) = Data(1, I) Worksheets("UdskriftsArk").Cells(6, I) = Data(2, I) Next For J = 3 To 21 Worksheets("UdskriftsArk").Cells(10, J) = Data(1, J + 18) Worksheets("UdskriftsArk").Cells(11, J) = Data(2, J + 18) Next Sheets("UdskriftsArk").Select Range("A1").Select End Sub Sub Tilbage() Sheets("AfspadseringsListe").Select Range("D5").Select Sheets("UdskriftsArk").Visible = False End Sub
Ja, men du har også hjulpet mig flere gange ;-) Tak
Synes godt om
Ny brugerNybegynder
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.