Avatar billede mira96ac Novice
17. april 2007 - 17:53 Der er 5 kommentarer og
1 løsning

VBA+søg på celleværdi og returnere værdier

Prøv at se denne funktion. Man kan taste rækkenummer i funktionen "visaktuellerække" og så viser den alle værdierne i userformen for den lige præcis den række i regnearket. Men kan man ændre det så den slår værdien i kolonne A op.

Altså skal den søge på værdien man skriver i feltet "visaktuellerække" i userformen i kolonne A i regnearket. Derefter skal den returnere værdierne fra den pågældende linie til userformen.

Const grøn = &HC0FFC0
Const gul = &H80FFFF
Dim rækIArk, aktuelleRæk
Private Sub f_afslut_Click()
    ClearFelter
    Unload UserForm
End Sub
Private Sub f_clear_Click()
    ClearFelter
    aktuelleRæk = rækIArk
    visAktuelleRække
End Sub
Private Sub f_gem_Click()
Rem test om alle felter er udfyldt
    If Me.f_medarbnr.Value <> "" And _
        Me.f_navn.Value <> "" And _
            Me.f_adresse.Value <> "" And _
                Me.f_postnr.Value <> "" And _
                    Me.f_timesats.Value <> "" And _
                        Me.f_by.Value <> "" Then
                If Me.f_gem.BackColor = grøn Then
                    OpdaterIArk rækIArk
                Else
                    OpdaterIArk aktuelleRæk
                End If
    Else
        MsgBox ("Alle felter skal udfyldes")
        Me.f_medarbnr.SetFocus
    End If
End Sub
Private Sub f_visAktuelleRække_Exit(ByVal Cancel As MSForms.ReturnBoolean)
    If IsNumeric(Me.f_visAktuelleRække.Value) = True And _
        Val(Me.f_visAktuelleRække.Value) > 1 And _
            Val(Me.f_visAktuelleRække.Value) <= rækIArk Then
                aktuelleRæk = Val(Me.f_visAktuelleRække)
                visAktuelleRække
    End If
End Sub

Private Sub SpinButton1_SpinUp()
    If aktuelleRæk - 1 >= 11 Then
        aktuelleRæk = aktuelleRæk - 1
    End If
    visAktuelleRække
End Sub
Private Sub SpinButton1_SpinDown()
    If aktuelleRæk + 1 <= rækIArk Then
        aktuelleRæk = aktuelleRæk + 1
    End If
    visAktuelleRække
End Sub
Private Sub visAktuelleRække()
    Me.f_visAktuelleRække.Value = aktuelleRæk
        If aktuelleRæk = rækIArk Then
            Me.f_visAktuelleRække.BackColor = grøn
            Me.f_gem.Caption = "Gem"
            Me.f_gem.Accelerator = "G"
            Me.f_gem.BackColor = grøn
        Else
            Me.f_visAktuelleRække.BackColor = gul
            Me.f_gem.Caption = "Ret/slet"
            Me.f_gem.Accelerator = "K"
            Me.f_gem.BackColor = gul
            Me.f_sletRækkedata = False
        End If
   
    If Cells(aktuelleRæk, 1) <> "" Then
        Me.f_medarbnr.Value = Cells(aktuelleRæk, 1)
        Me.f_navn.Value = Cells(aktuelleRæk, 2)
        Me.f_adresse.Value = Cells(aktuelleRæk, 3)
        Me.f_postnr.Value = Cells(aktuelleRæk, 4)
        Me.f_by.Value = Cells(aktuelleRæk, 5)
        Me.f_tlf.Value = Cells(aktuelleRæk, 6)
        Me.f_fax.Value = Cells(aktuelleRæk, 7)
        Me.f_timesats.Value = Cells(aktuelleRæk, 8)
       
       
       
       
       
        Me.f_sletRækkedata.Enabled = True
    Else
        ClearFelter
        Me.f_sletRækkedata.Enabled = False
    End If
   
    Cells(aktuelleRæk, 1).Select
End Sub
Private Sub UserForm_activate()
    ActiveWorkbook.Sheets(2).Select
   
    rækIArk = findFørsteLedigeRække
    aktuelleRæk = rækIArk
    visAktuelleRække
    Cells(rækIArk, 1).Select
   
    ClearFelter
    Me.f_medarbnr.SetFocus
End Sub
Private Sub ClearFelter()
    Me.f_medarbnr.Value = ""
    Me.f_navn.Value = ""
    Me.f_adresse.Value = ""
    Me.f_postnr.Value = ""
    Me.f_by.Value = ""
    Me.f_tlf.Value = ""
    Me.f_fax.Value = ""
    Me.f_timesats.Value = ""
   
   
   
    Me.f_medarbnr.SetFocus
End Sub
Private Sub OpdaterIArk(række)
    If Me.f_sletRækkedata = False Then
        Cells(række, 1) = Me.f_medarbnr.Value
        Cells(række, 2) = Me.f_navn.Value
        Cells(række, 3) = Me.f_adresse.Value
        Cells(række, 4) = Me.f_postnr.Value
        Cells(række, 5) = Me.f_by.Value
        Cells(række, 6) = Me.f_tlf.Value
        Cells(række, 7) = Me.f_fax.Value
        Cells(række, 8) = Me.f_timesats.Value
    Else
        Rows(CStr(række) + ":" + CStr(række)).Select
        Selection.Delete Shift:=xlUp
    End If
       
    rækIArk = findFørsteLedigeRække
    aktuelleRæk = rækIArk
    visAktuelleRække
    Cells(rækIArk, 1).Select
    ClearFelter
End Sub
Private Function findFørsteLedigeRække()
Dim r
    For r = 11 To 65000
        If Cells(r, 1) = "" Then
            findFørsteLedigeRække = r
            Exit Function
        End If
    Next r
End Function
Avatar billede splokit Nybegynder
18. april 2007 - 11:52 #1
Sub opslag()
Dim i, p As Integer
Dim Arr(1 To 150, 6) As Variant

Application.ScreenUpdating = False
For i = 2 To 150 'Række den skal søge i
    Arr(i, 0) = Sheets("Ark1").Cells(i, 1).Value 'Hvor Søge værdien findes
    Arr(i, 1) = Sheets("Ark1").Cells(i, 3).Value 'Hvad den skal retunere 1
    Arr(i, 2) = Sheets("Ark1").Cells(i, 4).Value 'Hvad den skal retunere 2
    Arr(i, 3) = Sheets("Ark1").Cells(i, 7).Value 'Hvad den skal retunere 3
    Arr(i, 4) = Sheets("Ark1").Cells(i, 8).Value 'Hvad den skal retunere 4
    Arr(i, 5) = Sheets("Ark1").Cells(i, 10).Value 'Hvad den skal retunere 5
Next i
  For p = 2 To 150
    If Tekstbox_i_din_Userform.Value = Arr(p, 0) Then
        Tekstbox.Value = Arr(p, 1)
        Tekstbox2 = Arr(p, 2)
        Tekstbox3 = Arr(p, 3)
        Tekstbox4 = Arr(p, 4)
        Tekstbox5 = Arr(p, 5)
        Exit For
      End If
    Next p 
Application.ScreenUpdating = True
End Sub
Avatar billede mira96ac Novice
18. april 2007 - 20:21 #2
Jeg tror ikke helt jeg forstår din løsning

Såvidt jeg kan se kan jeg ikke stille mig i Me.f_visAktuelleRække.Value og taste en værdi fra kolonne A i regnearket og på baggrund af denne værdi få udfyldt alle felterne i min userform eller hva' ????
Avatar billede splokit Nybegynder
19. april 2007 - 09:55 #3
Det den her gør hvis din værdi i a1 eks findes hvor man ønsker det.
Skal man returnere det til er andet ønskede sted, koden her tager fra et ark til et andet.. men det er lige til at lave om så den kan gøre i en userform med tekstbokse.
El. fra en userform til en anden osv...


Sub opslag()
Dim i, o, p As Integer
Dim Arr(2 To 150, 6) As Variant
Application.ScreenUpdating = False
On Error Resume Next
For i = 2 To 150
    Arr(i, 0) = Sheets("Ark2").Cells(i, 1).Value 'Søgeværdi
    Arr(i, 1) = Sheets("Ark2").Cells(i, 3).Value 'Returværdi
    Arr(i, 2) = Sheets("Ark2").Cells(i, 4).Value 'Returværdi
    Arr(i, 3) = Sheets("Ark2").Cells(i, 7).Value 'Returværdi
    Arr(i, 4) = Sheets("Ark2").Cells(i, 8).Value 'Returværdi
    Arr(i, 5) = Sheets("Ark2").Cells(i, 10).Value 'Returværdi
   
Next i
   
ActiveWorkbook.Close

Windows(mappe).Activate

For o = 1 To 100 'Række 1 til 100
    For p = 2 To 150              'Cells(o,1) er rækkenr og kolonnenr på Ark1
        If Sheets("Ark1").Cells(o, 1).Value = Arr(p, 0) Then'hvis række:A Findes på ark2
           
            Sheets("Ark1").Cells(o, 6) = Arr(p, 1) 'Retuner Værdien fra Ark2 til Ark1
            Sheets("Ark1").Cells(o, 7) = Arr(p, 2) 'Retuner Værdien fra Ark2 til Ark1
            Sheets("Ark1").Cells(o, 3) = Arr(p, 3) 'Retuner Værdien fra Ark2 til Ark1
            Sheets("Ark1").Cells(o, 8) = Arr(p, 4) 'Retuner Værdien fra Ark2 til Ark1
            Sheets("Ark1").Cells(o, 11) = Arr(p, 5) 'Retuner Værdien fra Ark2 til Ark1

            Exit For
        End If
    Next p
Next o
   
Application.ScreenUpdating = True
End Sub
Avatar billede mira96ac Novice
21. august 2007 - 15:45 #4
Point til dig splokit for din hjælp

Jeg er kommet helt bort fra denne sag og har "glemt" den lidt
Avatar billede splokit Nybegynder
22. august 2007 - 07:20 #5
Det er helt ok, men syndes du selv skal tage dem denne gang.. :D
Avatar billede mira96ac Novice
23. august 2007 - 20:30 #6
Takker
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