Avatar billede RFJDK Nybegynder
19. oktober 2010 - 17:35 Der er 24 kommentarer og
1 løsning

Kan man have hvis sætinger i en makro?

Hej.
Er det muligt at have en hvis formel i en makro altså fx. Hvis "A1" er tom skal den ikke gøre noget, hvis ikke skal den skrive hej?

Og kan man på en måde validere ca. 1000 linier uden at skulle have 1000 hvis sætninger?

Tak
Rasmus
Avatar billede excelent Ekspert
19. oktober 2010 - 17:46 #1
Indsæt denne kode i arkets kodemodul

Private Sub Worksheet_Change(ByVal Target As Range)
If Intersect(Target, Range("A1")) Is Nothing Then Exit Sub
If Not IsEmpty(Target) Then MsgBox "hej"
End Sub

ad.2
ja fx med en løkke, afhænger af konkret situation
Avatar billede madiedk Nybegynder
19. oktober 2010 - 17:57 #2
Public Sub eksempel()


Dim i As Long

i = 1

Do While i < 1000

    If Cells(i, 1) <> "" Then
        MsgBox "hej"
    End If
i = i + 1
Loop

End Sub
Avatar billede store-morten Ekspert
19. oktober 2010 - 18:20 #3
Sub testTom()
For Each c In Range("A1:A1000")
    If c.Value = "" Then c.Value = "Hej"
Next c
End Sub
Avatar billede excelent Ekspert
19. oktober 2010 - 18:39 #4
Sådan indsættes koden

http://pmexcelent.dk/ModulTips2.html
Avatar billede RFJDK Nybegynder
20. oktober 2010 - 09:19 #5
Tak for hjælpen, jeg vil forsøge om jeg kan få det til at virke.

Hvordan giver man de der point? Og hvem skal man give dem til når der er flere der har hjulpet, løst det?

Mvh
Rasmus
Avatar billede madiedk Nybegynder
20. oktober 2010 - 09:33 #6
du skal give dem til mig:-) ej....det er op til dig, giv dem til den første med den rigtige løsningen, eller del dem mellem dem med den rigtige løsning.
Avatar billede RFJDK Nybegynder
20. oktober 2010 - 10:50 #7
Men hvordan giver man points?
Avatar billede store-morten Ekspert
20. oktober 2010 - 11:50 #8
Hej Rasmus
Velkommen til Eksperten :-)
Du beder den eller dem der har hjulpet dig med en brugbar løsning, om at lægge et 'Svar' til point givning.

http://www.eksperten.dk/faq#faq-3-2
Der er mere end en der har svaret, hvad gør jeg så?
Alle svar har været gode og hjulpet dig, så markerer du blot de relevante svar, og trykker på accepter i den boks som kommer frem. Så bliver point delt ligeligt imellem svarerne.

Du kan også fordele points mellem svarene ud fra hvor meget de har hjulpet dig på vej.

http://www.eksperten.dk/faq#faq-3-1
Hvordan accepterer eller afviser jeg et svar?
Når der er kommet et svar som du kan bruge, så klikker du ud for selve svaret i boksen "Acceptér dette svar". Derefter accepterer du svaret i den boks som dukker frem.

Er løsningen kommet gennem en kommentar, skal du stadig give point. Du skriver bare, at bruger XXX har løst problemet og beder vedkommende om et svar. Når svaret kommer, accepterer du bare dette.

Og du kan læse meget mere om brug af Eksperten her:
http://www.eksperten.dk/faq

God fornøjelse
Avatar billede RFJDK Nybegynder
21. oktober 2010 - 13:07 #9
@ storemorten, hvis jeg bruger dit script, kan man i stedet for at den skriver noget i celle Ax, så får den til at skrive i celle Bx hvor x i Ax og Bx selc er det samme. Jeg kan ikke få det til at virke. Kan man samtidig bede den om at poste det som "paste speciel - Værdi" ?

Tak
Rasmus
Avatar billede RFJDK Nybegynder
21. oktober 2010 - 13:11 #10
Og meget gerne skrive det i en ny fil. Altså så makroen starter med at åben en ny fil. Derefter søger om der er noget i celle A1 i fil aa og så skrive noget til celle B1 i fil bb.

Rasmus

PS: Kender nogen gode tutorials til VBA
Avatar billede store-morten Ekspert
21. oktober 2010 - 14:33 #11
Hvis A1:A1000 er "tom" skrives "Hej" i B1:B1000
Bemærk: Overskriver hvad der måtte stå i kolonne B
Sub testTom2()
For Each c In Range("A1:A1000")
    If c.Value = "" Then c.Offset(0, 1).Value = "Hej"
Next c
End Sub
Avatar billede RFJDK Nybegynder
21. oktober 2010 - 15:14 #12
Fedt, så skal jeg bare finde ud af at indkoorpore en ny fil i det hele :-)
Tak
Avatar billede store-morten Ekspert
21. oktober 2010 - 16:57 #13
Når du vil have "Hej" i Kolonne B kan du klare det med en formel.
I celle B1 skrives: =HVIS(A1="";"Hej";"") fyld ned af.
Avatar billede store-morten Ekspert
21. oktober 2010 - 17:31 #14
Så lige du efterspurgte makro :-)
Avatar billede RFJDK Nybegynder
22. oktober 2010 - 09:24 #15
Hej Morten
Tusinde tak for hjælpen. Lige en sidste ting, kan jeg få makroen til at se om celle A1 i ark1 er tom hvis ja ingen ting, hvis nej kopiere indholdet af Ark1 A1 til Ark2 A1 ? i den formel du lavede tidligere? Det kunne være super fedt.

Jeg har selv gjort det med hvissætninger, men mit problem er at når jeg via makro kopierer de "tomme felter" altså med hvissætninger i over i en anden fil og gemmer som .csv fil så kommer der en masse kommaer i alle celler. Har jeg ingen ting i cellerne går det rigtigt. Derfor ønsker jeg at makroen kun kopierer noget over i de celler der er udfyldt og så klarer det den vej igennem. Jeg håber det giver mening.

Tak
Rasmus
Avatar billede store-morten Ekspert
22. oktober 2010 - 13:15 #16
Okay.

Når du via makro kopierer, med hvissætninger i, over i en anden fil, så prøv at indsætte 'Værdier'
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False
Avatar billede RFJDK Nybegynder
25. oktober 2010 - 11:16 #17
Jeg har prøvet med paste values, men ender stadig ud med kommaer :-(

Den makro du skrev tidligere med "For aech c in range" skal bare rettes til. Jeg har nu ædret at den giver en værdi hvis der er noget i celle, men desværre giver den mig værdien i celle A1 og ikke "kolonne+række nr" alstå så hvis den validere celle A545, så skal den hvis den er udfyldt skrive værdien i celle A545.

Jeg kan heller ikke lige finde ud af at få den til at smide det over i et andet ark. Altså hvis der er noget i "Ark1! celle A333" så skal den i "Ark2! celle A333 skrive indholdet af "Ark1! celle A333.
Mvh
Rasmus
Avatar billede store-morten Ekspert
25. oktober 2010 - 19:14 #18
Prøv:
Sub FlytUdfyldte()
Dim Row As Integer
For Each c In Range("A1:A1000")
Rk = c.Row
    If c.Value <> "" Then Sheets(2).Range("A" & Rk) = c.Value
Next c
End Sub
Avatar billede store-morten Ekspert
25. oktober 2010 - 20:33 #19
Lidt kortere:
Sub FlytUdfyldte2()
For Each c In Range("A1:A1000")
If Not c.Value = "" Then Sheets(2).Range("A" & c.Row) = c.Value
Next c
End Sub

Prøv også:
Sub FlytUdfyldte3()
For Each c In Range("A1:B1000")
If Not c.Value = "" Then Sheets(2).Cells(c.Row, c.Column) = c.Value
Next c
End Sub

Flytter udfyldte i både Kolonne A og B
Avatar billede store-morten Ekspert
25. oktober 2010 - 21:10 #20
Og:
Sub FlytUdfyldteOgGem()
For Each c In Range("A1:B1000")
If Not c.Value = "" Then Sheets(2).Cells(c.Row, c.Column) = c.Value
Next c
    'Kopier ark2 og gem i ny mappe på skrivebord
    Sheets(2).Copy
    ActiveWorkbook.SaveAs Filename:="C:\Documents and Settings\Hjemmebruger\Skrivebord\" & ActiveSheet.Name & ".xls"
    'Ret: C:\Documents and Settings\Hjemmebruger\Skrivebord\ ovenfor
    ActiveWindow.Close
End Sub
Avatar billede RFJDK Nybegynder
26. oktober 2010 - 10:34 #21
Morten
I den sidste du skriver, er det hele arket der bliver kopieret over?

Jeg ønsker kun at kopiere de udfyldte celler over, og der er celler der ikke skal med (Overskrifter osv. det er kun de rå data jeg gerne vil have med over.).
Tak
Rasmus
Avatar billede store-morten Ekspert
26. oktober 2010 - 10:42 #22
Ja, den kopierer Ark2 over.
Så du skal jo bare flytte de rå data du gerne vil have med, om på Ark2?
Avatar billede RFJDK Nybegynder
26. oktober 2010 - 10:54 #23
Morten, jeg troede jeg var kommet nærmere, men nu har jeg forsøgt at skrive den sidste kode du skrev ind, men jeg har et andet opslagsark og der bliver alt også kopieret over fra, er det fordi den løber igennem "alle" ark?

Rasmus
Avatar billede RFJDK Nybegynder
26. oktober 2010 - 11:25 #24
Har nu som du skriver fundet ud af at det er fordi den kopierer ark 2 ...

Nu skal jeg have den til at kopiere fra ark 1 til ark xx og smide det over.
Avatar billede store-morten Ekspert
26. oktober 2010 - 11:37 #25
Sheets(2).Copy
Ændres til:
Sheets(1).Copy
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