Avatar billede denero Juniormester
21. marts 2012 - 12:06 Der er 5 kommentarer og
1 løsning

Tal mellem 1-1000, der ikke forekommer i kolonne

Har en userform med en comboboks, som skal sætte et nummer ind i en kolonne. Hvis nummeret er brugt i kolonnen, skal der komme en meddelse, at man skal bruge et andet nummer.Kolonnen skal indeholde unikke værdier.
Avatar billede store-morten Ekspert
21. marts 2012 - 21:18 #1
Ikke userform men Inputbox:

Der spørges efter et tal mellem 1 og 10000
der kontrolleres om tallet findes i kolonne A1:A10001
Hvis ikke oprettes dette i A1:A10001 nederst
Public Sub InputBoxEksempel()
    Dim Svar As String
    Dim CorrectAnswer As Boolean
On Error GoTo ErrorHandler1
    Do
        Svar = InputBox("Indtast dit valg", "Vælg et tal mellem 1 og 10000")

        If Svar >= 0 And Svar < 10001 Then
            CorrectAnswer = True
           
            Range("A1:A10001").Select
           
            On Error GoTo ErrorHandler2

            Selection.Find(What:=Svar, After:=ActiveCell, LookIn:=xlFormulas, LookAt _
            :=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:= _
            False, SearchFormat:=False).Select
       
            MsgBox "Nummeret er brug, vælg et andet..."
            Call InputBoxEksempel
        Else
            CorrectAnswer = False
            MsgBox "Det var skidt - men vi prøver bare igen!"
        End If
 
    Loop Until CorrectAnswer
   
Beforeexit:
Exit Sub

ErrorHandler2:
MsgBox "=-= Nummeret er ikke i brug =-=" & vbCrLf & _
                      "Vil nu blive oprettet"
Cells(65000, ActiveCell.Column).End(xlUp).Offset(1, 0).Select
Selection.Value = Svar
Resume Beforeexit
ErrorHandler1:
Select Case Err

        Case 13
            MsgBox "Det er skidt, at du slet ikke tør vælge et tal!"
            Resume Beforeexit
        Case Else:
            MsgBox "Error # " & Err & " : " & Error(Err)
            End Select
End Sub
Avatar billede denero Juniormester
21. marts 2012 - 22:59 #2
Jeg skulle have oplyst bedre, i hvilken sammenhæng, det skal bruges. På min userform er der en tekstbox, hvor man skriver et givent tal.Når man forlader boksen, skal der tjekkes om tallet er brugt - hvis det er brugt, er det fint med meddelsen og retur til tekstboksen. Hvis det ikke er brugt, skal man kunne gå videre med at udfylde de øvrige tekstbokse (2 stk.) for til sidst at sætte alle data ind på første ledige plads efter øvrige data, som du også gør.
Avatar billede store-morten Ekspert
21. marts 2012 - 23:10 #3
Det var også kun et eksempel.
Er det "fri" tekst i de 2 tekstbokse?
Send evt. på mail
Avatar billede denero Juniormester
21. marts 2012 - 23:26 #4
Den ene er en "datoboks" den anden til kommentarer, men den vi taler om skal indeholde unikke værdier. Senere regner jeg med, at der kommer flere tekstbokse til.
Avatar billede denero Juniormester
09. april 2012 - 17:17 #5
Fin løsning Store-Morten - lægger du et svar?



Private Sub CommandButton1_Click()
Dim rCell As Range
Dim rOmraade As Range
Dim Kontrol As String
On Error GoTo ErrorHandle

'Rangevariablen sættes = celle A2
Set rOmraade = Range("A2")

'Hvis der står noget i cellen nedenunder (A2),
'udvides rOmraade nedad til den sidste celle
'med indhold. Dette svarer til CTRL + SHIFT + pil ned.
If Len(rOmraade.Offset(1, 0).Formula) > 0 Then
  Set rOmraade = Range(rOmraade, rOmraade.End(xlDown))
End If

'Hvis Textbox1 er tom gås til linien til Tom:
If TextBox1.Value = "" Then
    GoTo Tom
    Exit Sub
Else
'Hvis Textbox1 ikke er tom farves hvid
TextBox1.BackColor = RGB(255, 255, 255)
End If

'Hvis Textbox1 er >1000 gås til linien til TalOver1000:
If TextBox1.Value > 1000 Then
GoTo TalOver1000
    Exit Sub
End If

'Hvis Textbox1 er <1 gås til linien til TalUnder1:
If TextBox1.Value < 1 Then
GoTo TalUnder1
    Exit Sub
End If

Kontrol = TextBox1.Value

'Nu gennemløbes området celle for celle.
'Hvis indholdet findes
'Stoppes og Textbox1 tømmes.
For Each rCell In rOmraade
    If rCell.Value = Kontrol Then
      GoTo TalMatch
      Exit Sub
    End If
Next

With ActiveCell
    .Offset(0, 0).Value = TextBox1.Text
    .Offset(0, 1).Value = TextBox2.Text
    .Offset(0, 2).Value = TextBox3.Text
    End With

TextBox1.Value = ""
TextBox2.Value = ""
TextBox3.Value = ""
  Range("A2").CurrentRegion.Select
    ActiveCell.Offset(Selection.Rows.Count, 0).Activate
   
BeforeExit:
'Rangevariablerne fjernes fra hukommelsen.
Set rCell = Nothing
Set rOmraade = Nothing
'Set Kontrol = Nothing
Exit Sub
ErrorHandle:
'MsgBox Err.Description & ", Der opstod en fejl", "Fejl"
Resume BeforeExit

Tom:
MsgBox "Du skal skrive et tal" & vbCrLf & _
"Mellem 1 og 1000" & vbCrLf & _
"Vælg et nyt"
TextBox1.Value = ""
TextBox1.BackColor = RGB(255, 255, 150)
TextBox1.SetFocus
Exit Sub

TalOver1000:
MsgBox "Tallet er større end" & vbCrLf & _
"1000" & vbCrLf & _
"Vælg et nyt mindre end 1000"
TextBox1.Value = ""
TextBox1.BackColor = RGB(255, 255, 150)
TextBox1.SetFocus
Exit Sub

TalUnder1:
MsgBox "Tallet er mindre end" & vbCrLf & _
"1" & vbCrLf & _
"Vælg et nyt større end 1"
TextBox1.Value = ""
TextBox1.BackColor = RGB(255, 255, 150)
TextBox1.SetFocus
Exit Sub

TalMatch:
MsgBox "Tallet Findes i forvejen!" & vbCrLf & _
"Vælg et nyt"
TextBox1.Value = ""
TextBox1.BackColor = RGB(255, 255, 150)
TextBox1.SetFocus
Exit Sub

End Sub


Private Sub UserForm_Initialize()
Worksheets("Ark1").Activate
Range("A2").Select
If Range("A2").Value = "" Then
    Range("A2").Activate
Else
    Range("A2").CurrentRegion.Select
    ActiveCell.Offset(Selection.Rows.Count, 0).Activate
End If
'Sætter overskrift fra Ark1 på Userform
'Ret overskrift på Ark1 og Userform rettes
Label1.Caption = Range("A1").Value
Label2.Caption = Range("B1").Value
Label3.Caption = Range("C1").Value
End Sub
Avatar billede store-morten Ekspert
09. april 2012 - 18:37 #6
Velbekomme
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