Avatar billede krummel Juniormester
08. april 2016 - 12:12 Der er 15 kommentarer

VBA tjek og kopier

Via VBA vil jeg gerne tjekke kolonne C og 1000 rækker ned i faneblad 'Data'.
Hver gang der står FEJL i en celle, skal Celle A og B i samme række kopieres til de første frie celler i kolonne D og E i faneblad 'Forside'.

Dvs. samle alle rækker med fejl øverst på Forsiden og Data siden.

Nogen der har en løsning?

Jeg benytter Excel 2010
Avatar billede krummel Juniormester
08. april 2016 - 12:15 #1
lille rettelse:
Dvs. samle alle rækker med fejl øverst på Forsiden FRA Data siden.
Avatar billede Mads32 Ekspert
09. april 2016 - 16:16 #2
Hej Krummel

Jeg har lavet et lille testprogram med optagne makroer.

Hvis du er intereseret så send lige en afskrift af 2 rækker fra dit data-ark

Jeg vil lige tjekke om min makro reagerer rigtigt med din "fejlvisning", og ikke kun når jeg skrive "fejl" i Kolonne C.

Send en række med data og formel i Kolonne C, og en række der viser "Fejlmeldingen" i kolonne C. Måske er det formlen der skal bruges til at finde rækker med fejl.
Avatar billede krummel Juniormester
09. april 2016 - 21:07 #3
Der er ingen excel-fejlvisning i min kolonne c. Det er teksten "fejl" - altså ligesom når du skriver "fejl" i feltet.
Mit data ark er uden formler (det er kun tekst - downloaded fra en database).
Avatar billede Mads32 Ekspert
09. april 2016 - 22:44 #4
Hej Krummel

Jeg har i min test skrevet ordet fejl, hvis det også er det du gør, så kan  mit testprogram nemt anvendes.

Jeg har skrevet det  så det kun undersøger rækkerne 11:30; men dette kan nemt ændres.

Jeg har kaldt fanebladene "Forside" og "Data".

For at vise rækkerne med fejl, har jeg oprettet 2 hjælpeark navngivet "HjArk1" og "HjArk2"

På "Forside" er der lavet en "Makro-knap" hvorfra makroen eksekveres.

Er du interesseret, så send din mail-adresse til mig på:

jem.varde@gmail.com

Så sender jeg filen.
Avatar billede jens48 Ekspert
10. april 2016 - 13:02 #5
Er det ikke blot en makro som denne du har brug for?

Sub Flyt()
Sheets("Forside").Range("D1:E1000").ClearContents
For x = 1 To 1000
If Sheets("Data").Cells(x, 3) = "Fejl" _
Or Sheets("Data").Cells(x, 3) = "fejl" _
Or Sheets("Data").Cells(x, 3) = "FEJL" Then
Sheets("Data").Range("A" & x & ":B" & x).Copy _
Destination:=Sheets("Forside").Cells(Application.CountA(Sheets("Forside").Range("D:D")) + 1, 4)
End If
Next
End Sub
Avatar billede Mads32 Ekspert
10. april 2016 - 15:24 #6
Hej Jens48

Jeg følger tit dine svar på stillede spørgsmål. Igen må jeg sige, jeg er fuld af beundring for dine makroer.

Jeg har testet dit forslag. Det er ikke helt færdig. Du mangler en tæller for indsætningen af linjerne på forsiden. Den overskriver på linje 1.
Avatar billede krummel Juniormester
10. april 2016 - 22:11 #7
#Jens48
Hvor er det bare elegant lavet - kort og præcist. gid jeg havde de skills :-)
Mange tak. Giv svar og få point.

#Mads
Du skal bare kommentere ud/slette eller ændre range:
Sheets("Forside").Range("D1:E1000").ClearContents
Også tak til dig - du få ret par point for besværet.
Avatar billede Mads32 Ekspert
10. april 2016 - 22:40 #8
Hej

Jeg kan ikke få makroen til at vise flere rækker med fejl uden at indsætte en tæller.

Slut herfra
Avatar billede jens48 Ekspert
11. april 2016 - 00:18 #9
Du får et svar
Avatar billede jens48 Ekspert
11. april 2016 - 00:33 #10
Et forsøg mere
Avatar billede Mads32 Ekspert
13. april 2016 - 10:48 #11
Hej Jens48

Jeg har opgivet at få din makro til at virke uden at indsætte en tæller.

Men virker den uden en tæller??.

Svar venligst
Avatar billede jens48 Ekspert
13. april 2016 - 10:56 #12
Tælleren består af

For x = 1 To 1000

Next
Avatar billede Mads32 Ekspert
13. april 2016 - 12:44 #13
Hej Jens48

Den tæller kun gennemløbet,  men ikke hvor næste fejl skal sættes ind. Ved min test indsættes der kun den sidste fejl i 1. række, altså overskriver den hele tiden i 1. række.

Jeg har lavet en fuldstændig afskrift af dit program i en ny fil, men får den ikke til at virke som den skal, hvilket jeg ikke forstår.
Avatar billede jens48 Ekspert
13. april 2016 - 13:21 #14
Application.CountA(Sheets("Forside").Range("D:D")) + 1

tæller hvor mange celler der er skrevet i, i kolonne D og lægger 1 til
Avatar billede Mads32 Ekspert
13. april 2016 - 18:00 #15
Hej Jens48

Tak for dit indlæg.

Jeg har skriver igen med håbet om at du vil svare igen.

Selv om jeg skriver nøjagtig som du viser, er der ting der ikke virker. Makrotekster bliver røde.

Din linje:
Sheets("Forside").Range("D1:E1000").ClearContents --har jeg været nødt til at skrive sådan:

Sheets("Forside").Select
Range("D1:E1000").Select
Selection.ClearContents

Så virker det.    Hvorfor det??

Jeg hat prøvet på at skille din linje:

Sheets("Data").Range("A" & x & ":B" & x).Copy _
Destination:=Sheets("Forside").Cells(Application.CountA(Sheets("Forside").Range("D:D")) + 1, 4)

Det kan jeg ikke finde ud af. Kan du eventuelt foreslå en deling der måske vil virke ??

Jeg arbejder med Exel 2010. Er det et problem ??
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

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