Avatar billede lobster79 Nybegynder
03. marts 2010 - 10:15 Der er 11 kommentarer og
1 løsning

Dynamisk område for datavalidering Excel/VB

Hej

Jeg arbejder på et excelark, hvor bruger indtaster oplysninger i cellerne A5:Fx. X-betyder at brugeren kan indtaste x antal linier. I kolonnerne A til F skal brugeren indtaste alle værdier og ikke undlade nogen information. Til dette vil jeg bruge datavalidering, men da det er på et dynamisk område har jeg problemer med at få min kode til at søge direkte det definerede område.

' Overfør_data Makro
'

'
    Dim RK1 As Long
    Dim x As Long
    Dim Blank As Long
    With ThisWorkbook.Sheets("Ark1")
        RK1 = .Range("A65536").End(xlUp).Row
    End With

    Set x = Range("A5:F" & RK1)
    For Each Celle In x.Cells
        If Celle = "" Then
            Blank = MsgBox(prompt:="Du mangler at indtaste oplysninger!", Title:="Meddelelse", Buttons:=vbInformation)
        End If
   

End Sub

På forhånd tak for hjælpen.
MVH
Kim
Avatar billede supertekst Ekspert
03. marts 2010 - 10:34 #1
Sub Overfør_data()
    Dim RK1 As Long
    Dim x As Long
    Dim Blank As Long
   
    With ThisWorkbook.Sheets("Ark1")
        RK1 = .Range("A65536").End(xlUp).Row
    End With

    Range("A5:F" & CStr(RK1)).Select
   
    For Each Celle In Selection.Cells
        If Celle = "" Then
            Blank = MsgBox(prompt:="Du mangler at indtaste oplysninger!", Title:="Meddelelse", Buttons:=vbInformation)
        End If
    Next

End Sub
Avatar billede lobster79 Nybegynder
03. marts 2010 - 10:44 #2
Det er stærkt. Tak for svaret.
Kan man evt. få farvet cellerne med manglende information røde?
Avatar billede supertekst Ekspert
03. marts 2010 - 10:52 #3
Ok & selv tak.

Det kan man godt og endvidere vil jeg foreslå at meddelelsen først bliver udskrevet til sidst - hvis der er noget at bemærke.

Vender tilbage...
Avatar billede supertekst Ekspert
03. marts 2010 - 11:00 #4
Rem verson 2
Sub Overfør_data()
    Dim RK1 As Long
    Dim x As Long
    Dim Blank As Long
    Dim antalTomme As Byte
   
    With ThisWorkbook.Sheets("Ark1")
        RK1 = .Range("A65536").End(xlUp).Row
    End With

    Range("A5:F" & CStr(RK1)).Select
   
    antalTomme = 0
   
    For Each celle In Selection.Cells
        If celle = "" Then
            antalTomme = antalTomme + 1
            celle.Interior.ColorIndex = 3
        Else
            celle.Interior.ColorIndex = xlColorIndexNone
        End If
    Next
   
    If antalTomme > 0 Then
        Blank = MsgBox(prompt:="Du mangler at indtaste oplysninger!", Title:="Meddelelse", Buttons:=vbInformation)
    End If
End Sub
Avatar billede lobster79 Nybegynder
03. marts 2010 - 12:56 #5
Det er super godt!

Jeg har dog lige en ting, som jeg ikke havde med i tankerne tidligere. Hvis brugeren ikke har indtastet informationer i kolonne A, men i B, C, D, E eller F tager dette skriv ikke højde for det:

    With ThisWorkbook.Sheets("Ark1")
        RK1 = .Range("A65536").End(xlUp).Row
    End With

Kan man ændre skrivet til at RK1 defineres som det højest rækkenummer i kolonnerne A til F?
Avatar billede supertekst Ekspert
03. marts 2010 - 13:08 #6
Rem verson 3
Sub Overfør_data()
    Dim RK1 As Long
    Dim x As Long
    Dim Blank As Long
    Dim antalTomme As Byte
   
    With ThisWorkbook.Sheets("Ark1")
        RK1 = ActiveCell.SpecialCells(xlLastCell).Row
    End With

    Range("A5:F" & CStr(RK1)).Select
   
    antalTomme = 0
   
    For Each celle In Selection.Cells
        If celle = "" Then
            antalTomme = antalTomme + 1
            celle.Interior.ColorIndex = 3
        Else
            celle.Interior.ColorIndex = xlColorIndexNone
        End If
    Next
   
    If antalTomme > 0 Then
        Blank = MsgBox(prompt:="Du mangler at indtaste oplysninger!", Title:="Meddelelse", Buttons:=vbInformation)
    End If
End Sub
Avatar billede lobster79 Nybegynder
03. marts 2010 - 14:20 #7
Det funger jo næsten perfekt!

Der er bare et problem at datavalideringen ikke nulstilles efter makroen er kørt.

Hvis bruger 1 indtaster data i rækkerne A5-F18, vil næste bruger 2, som indtaster data i rækkerne A5-F13 få røde celler og besked om at indtaste data i rækkerne A14-F18.

Hvordan nulstilles datavalideringen igen?
Avatar billede supertekst Ekspert
03. marts 2010 - 15:19 #8
Så skal rækker slettes på et eller andet tidspunkt.

PS: For en god ordens skyld - når du svarer - så send som Kommentar og ikke Svar. Svar ert forbeholdt den/de, der sender forslag som Kommentar eller løsning som Svar på problemet.
Avatar billede lobster79 Nybegynder
04. marts 2010 - 12:58 #9
Det skal jeg huske.
Er ikke så rutineret herinde.

Jeg har forsøgt forskellige muligheder for at slette rækkerne, men den laver stadig samme fejl.

    Range("A5").Select
    Range(Selection, Selection.End(xlToRight)).Select
    Range(Selection, Selection.End(xlDown)).Select
    Selection.Delete Shift:=xlToLeft
    Selection.ClearContents
    Selection.Interior.ColorIndex = xlNone

Kan man skrive det på en anden måde for at slette rækkerne, så den ikke giver fejl?
Avatar billede supertekst Ekspert
04. marts 2010 - 14:42 #10
ClearContents sletter kun indhold -  ikke cellerne  - prøv med .Delete
Avatar billede lobster79 Nybegynder
17. marts 2010 - 11:40 #11
Har prøvet med denne, men den sletter ikke datavalideringen.

Range("A5:E" & Range("A4").End(xlDown).Row + 1).Delete

Kan man skrive noget andet, så alt datavalidering, der farver de tomme celler røde bliver nulstillet?

Jeg vil godt give point for svaret, hvis der er nogen som kan hjælpe.
Avatar billede supertekst Ekspert
17. marts 2010 - 13:56 #12
Suppler evt. med følgende - evt. forbind med en knap eller anden handling:

Sub sletFraRække5()
    With ThisWorkbook.Sheets("Ark1")
        RK1 = ActiveCell.SpecialCells(xlLastCell).Row

    .Range("A5:F" & CStr(RK1)).Select
    Selection.Delete
    End With
End Sub
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