Avatar billede firstchoice Nybegynder
19. januar 2004 - 10:12 Der er 16 kommentarer og
1 løsning

Move op og ned i en tabel

Jeg har oprettet en VBA formular, som jeg bruger til at indtaste data i et Excel ark. Jeg vil gene udvide funktionen med en frem og en tilbage knap, så jeg kan flytte op og ned i tabellen, og rette allerede indtastede data.
How to do??
19. januar 2004 - 12:23 #1
Det er jo et godt spørgsmål..... det afhænger jo lidt af hvordan du har lavet det.
Smid arket i en mail til fd@win-consult.com, så vil jeg hjælpe dig i aften, hvis ikke du har fået hjælp inden.
Avatar billede s_h_m Nybegynder
19. januar 2004 - 12:43 #2
Følgende scroller 30 rækker ned

Sub Makro1()
    ActiveWindow.SmallScroll Down:=30
End Sub

Der er så lige problematikken med at knapperne ikke følger med scrollet.
19. januar 2004 - 15:11 #3
Eksempel sendt retur.
Avatar billede s_h_m Nybegynder
19. januar 2004 - 18:51 #4
Her er også et løsningsforslag, da jeg har fundet ud af at få knapperne til at følge med op og ned ved scrolling.
For følgende gælder at der skal være 2 knapper i arket, en der hedder Op og en der hedder ned.
De tre makroer kopieres og lægges i et modul.

Sub ScrollDown()
    Dim nUp As Single
    nUp = ActiveWindow.VisibleRange.Cells(1, 1).Top
    ActiveWindow.SmallScroll Down:=30 'scroller 30 linier ned
    ActiveWindow.VisibleRange.Cells(1, 1).Select
    KeepControls True, nUp
End Sub
Sub ScrollUp()
    Dim nUp As Single
    nUp = ActiveWindow.VisibleRange.Cells(1, 1).Top
    ActiveWindow.SmallScroll Up:=30 'scroller 30 linier op
    ActiveWindow.VisibleRange.Cells(1, 1).Select
    KeepControls False, nUp
End Sub
Sub KeepControls(Dwn As Boolean, nUp As Single)
' Denne makro sørger for at alle knapper følger med op/ned.
    Dim sh As Shape
    For Each sh In ActiveSheet.Shapes 'vælger alle knapper
        With sh
            Select Case .Name
                Case "Op", "Ned" 'knappernes navne
                Case Else
                    x = .Top - nUp
                    If Dwn Then
                      .Top = ActiveWindow.VisibleRange.Cells(1, 1).Top + x
                    Else
                      .Top = ActiveWindow.VisibleRange.Cells(1, 1).Top + x
                    End If
            End Select
        End With
    Next
End Sub

-> flemmingdahl, jeg vil også gerne se dit løsningsforslag. Man kunne måske lære noget nyt, det har jeg i hvert fald gjort, da jeg sad og rodede med det her  :o)
Min e-mail: soeren109@hotmail.com
19. januar 2004 - 19:06 #5
Hej Søren

Koden jeg har lavet er til en userform, som firstchoice har sendt til mig, hvor vidt om en kopi af regnearket sendes videre til dig vil jeg lade firstchoice om. Dog vil jeg postere koden her om lidt.
19. januar 2004 - 19:16 #6
Private Const mlHeaderRow As Long = 6
Private mrCurReg As Range
Private mbFoundDB As Boolean
Private mobjCtl As MSForms.Control

Private Sub cmdCancel_Click()
    Unload Me
End Sub

Private Sub cmdSave_Click()
    If Me.scbRecords.Value = Me.scbRecords.Max Then
        WriteRecord True
    Else
        WriteRecord False
    End If
End Sub

Private Sub scbRecords_Change()
    ReadRecord
End Sub

Private Sub UserForm_Initialize()
    mbFoundDB = True
   
    ' Determin database range
    Set mrCurReg = ActiveSheet.UsedRange
    If mrCurReg.Rows.Count = mlHeaderRow Then mbFoundDB = False
    Set mrCurReg = mrCurReg.Offset(mlHeaderRow, 0).Resize( _
        mrCurReg.Rows.Count - mlHeaderRow)
   
    If mbFoundDB Then
        Me.scbRecords.Min = 1
        Me.scbRecords.Max = mrCurReg.Rows.Count + 1
        Me.scbRecords.Value = 1
        ReadRecord
    End If
End Sub

Private Sub UserForm_Terminate()
    Set mrCurReg = Nothing
    Set mobjCtl = Nothing
End Sub

Private Sub ReadRecord()
    For Each mobjCtl In Me.Controls
        Select Case TypeName(mobjCtl)
            Case "TextBox"
                mobjCtl.Text = mrCurReg.Cells(Me.scbRecords.Value, Val(Right(mobjCtl.Name, 2))).Value
        End Select
    Next mobjCtl
End Sub

Private Sub WriteRecord(ByVal bCreateNew As Boolean)
    If bCreateNew Then
        Me.scbRecords.Value = Me.scbRecords.Max
        Me.scbRecords.Max = Me.scbRecords.Max + 1
        Set mrCurReg = mrCurReg.Resize(Me.scbRecords.Max)
    End If
   
    For Each mobjCtl In Me.Controls
        Select Case TypeName(mobjCtl)
            Case "TextBox"
                mrCurReg.Cells(Me.scbRecords.Value, Val(Right(mobjCtl.Name, 2))).Value = mobjCtl.Text
        End Select
    Next mobjCtl
End Sub
19. januar 2004 - 19:22 #7
Jeg har lavet en lille eksempelfil med userform i, den sender jeg.
Avatar billede s_h_m Nybegynder
19. januar 2004 - 19:23 #8
Det er fint nok med koden, tak.
Nu må jeg så se, om jeg kan tygge mig gennem den og forstå den  :o)
Avatar billede s_h_m Nybegynder
19. januar 2004 - 19:25 #9
En eksempelfil er da meget velkommen.
Avatar billede s_h_m Nybegynder
19. januar 2004 - 19:30 #10
Ok, det var ikke sådan jeg havde opfattet spm., men en rigtig god løsning som jeg godt kan gøre brug af.
19. januar 2004 - 19:36 #11
Spørgsmålet kunne også forståes på flere måder, det var også derfor jeg bad om en fil. God fornøjelse med det.
22. januar 2004 - 09:19 #12
firstchoice - er vi færdige her ?
Avatar billede firstchoice Nybegynder
22. januar 2004 - 15:44 #13
Jeg siger tak for hjælpen, og bøvler videre
22. januar 2004 - 16:55 #14
Fino :-) Lukker du så ikke spørgsmålet.
Avatar billede janvogt Praktikant
26. januar 2004 - 09:14 #15
Flemming> Må jeg se eksempelfilen?
Avatar billede firstchoice Nybegynder
01. februar 2004 - 19:30 #16
Hej Flemming.
Jeg troede jeg havde afsluttet sagen.
Beklager
01. februar 2004 - 20:18 #17
Helt ok :-)
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