Avatar billede denero Juniormester
11. april 2012 - 14:47 Der er 4 kommentarer og
1 løsning

Hente data fra tilhørende række

På en userform er der flg.
Tekstboks 1
Tekstboks 2
Tekstboks 3
Tekstboks 4
Tekstboks 5
Tekstboks 6
Tekstboks 7
Tekstboks 8
Tekstboks 9
Tekstboks 10
Tekstboks 11
Tekstboks 12
I tekstboks 2 skrives et nummer, som der skal søges efter i kolonne B. Når dette findes, skal der i de øvrige tekstbokse fremkomme data fra samme række, altså tekstboks 1= data kolonne A, tekstboks 3=data kolonne C, tekstboks4=data kolonne D, osv. Jeg forestiller mig, at det kan gøres via Change i tekstboks 2. Når data er fundet, skal man kunne rette i data og derefter gemme nye data under det fundne nummer i tekstboks 2 - dvs. at gamle data skiftes ud med nye.
Avatar billede supertekst Ekspert
11. april 2012 - 15:56 #1
Du på gerne sende filen - så skal jeg prøve.
@-adresse under min profil.
Avatar billede denero Juniormester
13. april 2012 - 05:34 #2
Tak, tager imod tilbuddet.
Avatar billede supertekst Ekspert
17. april 2012 - 09:27 #3
Dim antalRækker As Long, containerRække As Long                    'globale variabler - kan tilgås fra alle sub og functions
Private Sub Annuler_Click()
    Unload Me                                                      'Userform lukkes
End Sub
Private Sub Gem_Click()
    gemFelter containerRække                                        'Felt-værdier gemmes
End Sub
Private Sub SøgeTekst_Exit(ByVal Cancel As MSForms.ReturnBoolean)  'Reno Djurs nr. forlades
    If Me.SøgeTekst <> "" Then                                      'Bestående felter slettes, hvis søgefelt udfyldt
        clearFelter
   
        containerRække = søgEfterContainerNr(Me.SøgeTekst)          'funktionen søgEfterContainer kaldes med SøgeTekst som parameter
        If containerRække > 0 Then                                  'hvis række er fundet d.v.s. > 0
            Me.Gem.Enabled = True                                  'så kan der gemmes
            visFelter containerRække                                'vis  de enkelte felter
        Else
            Me.Gem.Enabled = False                                  'søgekriteriet blev ikke fundet - neutraliser gem-knap
           
            MsgBox "Reno Djurs Nr.: " & Me.SøgeTekst & " kunne ikke findes"
        End If
    End If
End Sub
Private Function søgEfterContainerNr(cNr)
Dim ræk
    For ræk = 2 To antalRækker                                      'søgning begynder i række 2
        If Range("B" & ræk) = CStr(cNr) Then                        'kolonne 2 sammenlignes med søgenr, der sættes på string-form så det passer til feltet fra userform
            søgEfterContainerNr = ræk                              'funktionen returnerer rækkenr og funktionen afbrydes
            Exit Function
        End If
    Next ræk
    søgEfterContainerNr = 0                                        'det søgte blev ikke fundet - returner 0
End Function
Private Sub visFelter(ræk)                                          'Alle felter indeholder Kol & et tal mellem 1 og 12 i userform
Dim cc As Control, kolNr As Byte
    For kolNr = 1 To 12
        If kolNr <> 2 Then                                          'Kol2 er Reno Djurs Nr - så det skal ikke vises igen
            Set cc = Me.Controls("Kol" & CStr(kolNr))              'feltet i userform initieres - så det kan tilskrives værdi fra regnearket *)
           
            If kolNr = 1 Then                                      'datofelt editeres så det vises på dk-facomn
                cc.Value = Format(Cells(ræk, kolNr), "dd-mm-yyyy")
            Else
                cc.Value = Cells(ræk, kolNr)                        'celle i arket overfæøres til userform-feltet *)
            End If
        End If
    Next kolNr
End Sub
Private Sub clearFelter()
Dim cc As Control, kolNr As Byte
    For kolNr = 1 To 12                                            'samme princip for at tilgå felter i userform
        If kolNr <> 2 Then
            Set cc = Me.Controls("Kol" & CStr(kolNr))
            cc.Value = ""
        End If
    Next kolNr
End Sub
Private Sub gemFelter(ræk)                                          'samme princip som visfelter - blot omvendt
Dim cc As Control, kolNr As Byte
    For kolNr = 1 To 12
        If kolNr <> 2 Then
            Set cc = Me.Controls("Kol" & CStr(kolNr))
            If kolNr = 1 Then
                Cells(ræk, kolNr) = Format(cc.Value, "mm-dd-yyyy")
            Else
                Cells(ræk, kolNr) = cc.Value
            End If
        End If
    Next kolNr
End Sub
Private Sub UserForm_activate()
    antalRækker = ActiveCell.SpecialCells(xlLastCell).Row          'antal rækker i aktuelle ark beregnes
    Me.Gem.Enabled = False                                          'Gem knap neutraliseres
End Sub
Avatar billede denero Juniormester
18. april 2012 - 07:02 #4
Tusind tak for fyldestgørende svar - virker perfekt.
Avatar billede supertekst Ekspert
18. april 2012 - 08:30 #5
Selv tak..
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