Avatar billede HHA Professor
27. november 2023 - 20:16 Der er 10 kommentarer og
1 løsning

VBA blokere for at indsætte værdi

Hejsa,

Jeg har kæmpet med dette i en del timer og kan ikke finde ud af hvad der skal stå....

Har nedenstående formel, som sætter X i de celler i kolonnerne B, C og D, hvis jeg bare klikker på den celle jeg ønsker et X i.
Men jeg kæmper med at den ikke må sætte et X i kolonne B, med mindre der er en værdi større end 0.
Jeg har fået lavet så den ikke må sætte X i kolonne C, hvis der er et X i kolonne B.
Men det sidste kan jeg sgu ikke lige greje.
Nogen der kan sparke mig i den rigtige retning?
Jeg har prøvet med det der står mellem alle ? tegnene.

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
    If Not Intersect(Target, Range("B20:D2000")) Is Nothing And Target.Count = 1 Then
        If Target = "X" Then
            Target = ""
        Else
            Target = "X"
     
        If Selection.Column = 3 And Target.Offset(0, -1) = "X" Or Selection.Column = 2 And Target.Offset(0, 1) = "X" Then
        Target = ""
???????        If Selection.Column = 2 And Target.Offset(0, -1) < 0 Then
        Target = ""  ???????
     
        End If
        End If
        End If
    End If

End Sub
Avatar billede MaxZpaD Professor
30. november 2023 - 08:35 #1
Er det rigtigt forstået, at hvis værdien i kolonne B er større end nul, så skal den overskrives med et "X"?
Avatar billede MaxZpaD Professor
30. november 2023 - 08:37 #2
Eller er det værdien i kolonne A måske?
Avatar billede HHA Professor
30. november 2023 - 09:13 #3
MadZpaD, det er da rigtigt dårligt forklaret af mig....

Men jeg kæmper med at den ikke må sætte et X i kolonne B, med mindre der er en værdi større end 0 I KOLONNE A I SAMME RÆKKE 😒

Tak for at korigere mig 👍
Der er sgu ingen der kan hjælpe, hvis jeg ikke forklarer problemet rigtigt.
Avatar billede MaxZpaD Professor
30. november 2023 - 09:19 #4
HHA - no problemo :-) Jeg kender det godt selv, at man er så dybt inde i sin problemstilling, at man tager for givet, at andre også er det :-)

Mit første forslag ser sådan her ud, men jeg er lidt i tvivl om, hvorvidt det er helt rigtigt i forhold til en efterfølgende markering af kolonne C:

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
    If Not Intersect(Target, Range("B20:D2000")) Is Nothing And Target.Count = 1 Then
        Select Case Target.Column
            Case 2
                If Target.Offset(, -1) <= 0 Or Target.Offset(, 1) = "X" Then
                    Target.ClearContents
                Else
                    If Target = "X" Then
                        Target.ClearContents
                    Else
                        Target = "X"
                    End If
                End If
            Case 3
                If Target.Offset(, -1) = "X" Then
                    Target.ClearContents
                Else
                    If Target = "X" Then
                        Target.ClearContents
                    Else
                        Target = "X"
                    End If
                End If
            Case Else
               
        End Select
    End If
End Sub
Avatar billede HHA Professor
30. november 2023 - 10:30 #5
Virker nu på det jeg ønskede, men nu virker den ikke på kolonne C, som du selv nævner.
Den skal måske have af vide at det med kolonne A > 0 kun gælder for kolonne B?
Men hvordan?
Bare for at gøre det vanskeligere....
Hvis man sætter et kryds i kolonne B (selvfølge lig med det kriterie at der er en værdi i kolonne A > 0), kunne den så automatisk sætte et i kolonne D?
Avatar billede MaxZpaD Professor
30. november 2023 - 11:58 #6
Har jeg forstået det korrekt?

Generelt skal cellerne udfyldes med "X", med mindre der i forvejen står "X", i hvilket fald der så skal slettes/blankes ud. Dog gælder også følgende regler:

1. Skriv kun "X" i kolonne B hvis værdien i kolonne A er større end nul
2. Et "X" i kolonne B skal automatisk medføre et "X" i kolonne D
3. Skriv "X" i kolonne C uanset indholdet af kolonne A og B ??

Uddyb gerne :-)
Avatar billede HHA Professor
30. november 2023 - 12:53 #7
Jeg har et Excel ark der skal læses af et andet program, som skal hente data fra det.
Det skal så bruge X'erne til at finde ud af hvad det skal gøre med de data der står kolonnerne efter kolonne D.

I kolonne A vil der nogen gange være et tal, og her vil jeg gerne have muligheden for at kunne sætte et X i kolonne B.
Når der er et X i kolonne B, skal den sætte automatisk sætte et X i kolonne D.
Hvis der ikke er noget tal i kolonne A, så skal jeg ikke kunne sætte et X i kolonne B, men frit i kolonne C og D, som jeg lyster.

Har lagt en del af Excel filen på nedenstående link.
Det giver nok mere fornemmelse af hvad det er jeg mener :)

http://46.32.50.245:8080/share.cgi?ssid=984b55dabda94cda9802570b12f23bb2&fid=984b55dabda94cda9802570b12f23bb2

Adgangskode: 1245
Avatar billede MaxZpaD Professor
30. november 2023 - 13:57 #8
Tak - det øger forståelsen :-)

Må der altid kun være én af de tre kolonner, som er udfyldt med "X"?
Avatar billede HHA Professor
30. november 2023 - 14:11 #9
Når du spørger 3 første, så er det vel B, C og D du mener?

Hvis der ikke er noget tal i kolonne A, så skal jeg ikke kunne sætte et X i kolonne B, men frit i kolonne C og D, som jeg lyster, altså i både C og D samtidigt.

Hvis der er et tal i kolonne A, må jeg kun kunne sætte kryds i B og så skal X i D automatisk sættes.
Avatar billede MaxZpaD Professor
30. november 2023 - 14:39 #10
Jeg kan ikke lige gennemskue, hvor jeg har skrevet noget om "tre første", men ja - det er B, C og D, jeg arbejder ud fra :-)

Prøv med denne kode og se, om det giver dig det ønskede resultat:

    If Not Intersect(Target, Range("B20:D2000")) Is Nothing And Target.Count = 1 Then
        Select Case Target.Column
            Case 2
                With Target
                    If .Offset(, -1) > 0 Then
                        If .Value = "X" Then
                            .ClearContents
                            .Offset(, 2).ClearContents
                        Else
                            .Value = "X"
                            .Offset(, 1).ClearContents
                            .Offset(, 2) = "X"
                        End If
                    End If
                End With
            Case Else
                With Target
                    If Me.Cells(.Row, 1) > 0 Then
                    Else
                        If .Value = "X" Then
                            .ClearContents
                        Else
                            .Value = "X"
                        End If
                    End If
                End With
        End Select
    End If
Avatar billede HHA Professor
30. november 2023 - 14:57 #11
Du er sgu skrap 👍
Den sidder lige i skabet....
Tusind tusind tak for hjælpen 💪
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
Vi har et stort udvalg af Excel kurser. Find lige det kursus der passer dig lige her.

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