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
