Avatar billede magnus_thorn Nybegynder
11. december 2012 - 14:53 Der er 11 kommentarer og
1 løsning

Hjælp til makro i Excel

Hej.

Jeg sidder og bakser med noget makro i excel. Det er første gang jeg forsøger mig med det - jeg har forsøgt at læse mig frem til det på nettet, men jeg kan ikke få det til at virke. Er der nogen, som kan hjælpe mig med en kode til nedenstående?

Man skal ikke kunne skrive i kolonnerne R og S, hvis kolonne M ikke er udfyldt med "+"

Man skal ikke kunne skrive i kolonne Z, hvis kolonne X ikke er udfyldt med "+"

Man skal ikke kunne skrive i kolonne N, medmindre enten kolonne L eller M er udfyldt med "+"

Man skal kun kunne skrive i enten kolonne AF, AG eller AH.

Det hele gælder kun fra række 6 og ned.

Jeg håber, der er nogen som kan hjælpe

Med venlig hilsen
Magnus
Avatar billede finb Ekspert
11. december 2012 - 15:48 #1
Bax lidt med
Datavalidering
Avatar billede supertekst Ekspert
11. december 2012 - 15:49 #2
"Man skal kun kunne skrive i enten kolonne AF, AG eller AH" - altså kun i en af disse?

og så velkommen til Eksperten..
Avatar billede magnus_thorn Nybegynder
11. december 2012 - 16:19 #3
@Finb - tak for hurtigt svar. Jeg har bakset en masse med datavalidering, og det fungerer rigtig fint og er nemt at bruge. Men nogle af cellerne er der allerede datavalidering på, og så vidt jeg kan se er der ikke mulighed for både at lave eks. en rullemenu og en anden slags datavalidering.

Men flere af cellerne kan jeg jo egentlig godt lave på den måde. Nu vil jeg så gerne bare vide hvordan jeg gør nedenstående vha. makro:

Man skal ikke kunne skrive i kolonne O, medmindre enten kolonne M eller N er udfyldt med "+"
(jeg ved det er anderledes end tidligere bedsked, men jeg har sat en ekstra kolonne ind)

Det blev et lidt simplere spørgsmål.
Avatar billede store-morten Ekspert
11. december 2012 - 20:10 #4
Måske denne:
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Fejlcelle = Target.Address

If Not Intersect(Target, Range("O:O")) Is Nothing Then

If Not Target.Offset(0, -1).Value = "+" And _
Not Target.Offset(0, -2).Value = "+" Then
Range(Target.Offset(0, -2), Target.Offset(0, -1)).Select

MsgBox "Der mangler + i en eller begge markerede celler?", , "Celle " & Fejlcelle & " kan ikke udfyldes!!!"
End If
    End If
End Sub
Avatar billede magnus_thorn Nybegynder
12. december 2012 - 09:21 #5
Ja, det ser ud til at virke - men det skal kun være fra række 6 og ned
Avatar billede magnus_thorn Nybegynder
12. december 2012 - 09:30 #6
Og kan det lade sig gøre, at man godt kan markere cellen, men bare ikke skrive i den?

Og mange tak for svaret i øvrigt :)
Avatar billede store-morten Ekspert
12. december 2012 - 15:37 #7
Prøv:
Private Sub Worksheet_Change(ByVal Target As Range)
Application.EnableEvents = False 'For at undgå at koden looper

'Range("O6:O100") tilrettes?
If Not Intersect(Target, Range("O6:O100")) Is Nothing Then

If Not Target.Offset(0, -1).Value = "+" And _
Not Target.Offset(0, -2).Value = "+" Then
Range(Target.Offset(0, -2), Target.Offset(0, -1)).Select

MsgBox "Der mangler + i en eller begge markerede celler?", vbCritical, "Celle " & Target.Address & " kan ikke udfyldes!!!"
Target.Value = ""
End If
    End If
   
Application.EnableEvents = True 'For at undgå at koden looper
End Sub
Avatar billede magnus_thorn Nybegynder
13. december 2012 - 09:43 #8
Tusind tak! Det ser ud til at virke. Men et par gange er der kommet en fejlmeddelelse, hvor man kan trykke "Debug" eller "End". Hvis jeg trykker "end" kan jeg ikke få det til at virke igen. Hvordan slår man det ligesom til igen?

Og så send lige et svar, så jeg kan give dig nogle point.
Avatar billede magnus_thorn Nybegynder
13. december 2012 - 10:38 #9
Fejlmeddelelsen kommer frem hvis man prøver at udfylde flere af de spærrede celler på én gang (hvilket jo måske kunne ske ved en fejl.)

Arkene skal desuden være låst, men selvom jeg låser det, kan fejlmeddelelsen komme frem og brugeren kan ved at trykke 'debug' komme ind og ændre i makroen.

Hvordan låser jeg makroen af, og kan jeg undgå fejlmeddelelsen "Run-time error '13': Type mismatch" på nogen måde?
Avatar billede magnus_thorn Nybegynder
13. december 2012 - 13:56 #10
Desuden kan der heller ikke bruges autofyld i cellerne, selvom betingelserne er opfyldt, så der kan skrives i dem.
Avatar billede store-morten Ekspert
13. december 2012 - 20:04 #11
Prøv at teste denne:
Private Sub Worksheet_Change(ByVal Target As Range)
On Error GoTo Fejl
Application.EnableEvents = False 'For at undgå at koden looper

'Range("O6:O100") tilrettes?
If Not Intersect(Target, Range("O6:O100")) Is Nothing Then

If Not Target.Offset(0, -1).Value = "+" And _
Not Target.Offset(0, -2).Value = "+" Then
Range(Target.Offset(0, -2), Target.Offset(0, -1)).Select

MsgBox "Der mangler + i en eller begge markerede celler?", vbCritical, "Celle " & Target.Address & " kan ikke udfyldes!!!"
Target.Value = ""
End If
    End If
        GoTo Afslut
       
Fejl:
If Err.Number = 13 Then
MsgBox "Der er indtastet en eller flere værdier!" & vbCrLf & vbCrLf & vbTab & "Handlingen slettes?", , "Der opstod en fejl!!"
Target.Clear
End If

Afslut:
Application.EnableEvents = True 'For at undgå at koden looper
End Sub
Avatar billede magnus_thorn Nybegynder
14. december 2012 - 11:12 #12
Perfekt. Tusind tak. Da jeg kun ville slette indholdet af cellen og ikke formateringen gættede jeg mig til at lave Target.Clear
om til Target.value = "" og det ser ud til at det virker upåklageligt - tusind tusind tak for hjælpen, jeg sætter stor pris på, at I har taget jer tid til det. Tak!
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