Avatar billede Farveglad Nybegynder
13. august 2012 - 09:08 Der er 9 kommentarer og
1 løsning

Hvordan opretter men en Command Button som lukker forskellige kolumner hver gang?

Jeg prøver at skrive en kode som lukker de kolumner som man lige har skrivet, i når man trykker på en Command Button. Man begynder at skrive i C og AA. Derefter skriver man i D og AB etc. ind til at man har byttet kolunmer 19 gange.

Jeg skrev først en kode hvor Command Button lukker C og AA, og åbner D og AB, men kan ikke komme videre derfra. Jeg prøvede derfor at skrive en kode ud fra ActiveCell, men hvis man markerer et andet sted, inden man bruger Command Button, så vil helt forkerte kolumner lukkes.

En komplicerende faktor er, at jeg også har lavet en "undo" Command Button, så man kan ikke bare begynde på C og derefter tælle op.

Kan nogen hjælpe mig at finde en løsning? Tak!
Koden kan ses nedenfor:


Private Sub ButtonSkjul_Click()

'Public Sub Vil_du_gå_videre()
Dim Answer As VbMsgBoxResult, AnswerStr As String
MsgBox "Denne boks vil føre dig til næste borgere", , "Messagebox"
Answer = MsgBox("Er du sikker på, at du vil gå videre til den næste borgere?", vbYesNo)
If Answer = vbYes Then
            ' Hide_Column Makro
            Range("C2").EntireColumn.Hidden = True
            ' Viser Column D2
            Range("D2").EntireColumn.Hidden = False
            ' Hide_Column Makro
            Range("AA2").EntireColumn.Hidden = True
            ' Viser Column D2
            Range("AB2").EntireColumn.Hidden = False

End If
End Sub


Private Sub CommandButtonTest_Click()

'Public Sub Vil_du_gå_videre()
Dim Answer As VbMsgBoxResult, AnswerStr As String
MsgBox "Denne boks vil føre dig til næste borgere", , "Messagebox"
Answer = MsgBox("Er du sikker på, at du vil gå videre til den næste borgere?", vbYesNo)
If Answer = vbYes Then
        ' Hide_Column Makro
        ActiveCell.EntireColumn.Hidden = True
        ' Viser Column D2
        ActiveCell.Offset(0, 1).EntireColumn.Hidden = False
        ' Hide_Column Makro
        ActiveCell.Offset(0, 24).EntireColumn.Hidden = True
        ' Viser Column D2
        ActiveCell.Offset(0, 25).EntireColumn.Hidden = False

End If
End Sub
Avatar billede supertekst Ekspert
13. august 2012 - 11:18 #1
Er alle kolonner synlige fra begyndelsen?
Hvad er formålet med det ønskede?

og så velkommen til Eksperten..
Avatar billede Farveglad Nybegynder
13. august 2012 - 11:35 #2
I begyndelsen er kun C og AA synelige og jeg vil gerne vise to kolonner ad gangen ind til V og AT.

Arket skal bruges som indtastningsskema. Jeg vil prøve, at gøre det sværere for den som indtaster, at skrive i den forkerte række.
Avatar billede Farveglad Nybegynder
13. august 2012 - 11:36 #3
...og tak!
Avatar billede supertekst Ekspert
13. august 2012 - 11:52 #4
Skal prøve i en ledig stund...
Avatar billede supertekst Ekspert
13. august 2012 - 14:13 #5
Til inspiration:

Const antalNæste = 19
Const xKol = 3
Const yKol = 27
Dim antal As Integer, førsteKol As Integer, forSkyd As Integer
Public Sub næste()                                  'Skal forbindes med Knap
    If antal <= antalNæste Then
        skjulKolonne førsteKol + 1, False
        skjulKolonne førsteKol + 1 + forSkyd, False
        skjulKolonne førsteKol, True
        skjulKolonne førsteKol + forSkyd, True
        antal = antal + 1
        førsteKol = førsteKol + 1
    End If
End Sub
Private Sub skjulKolonne(kolonneNr, skjul As Boolean)
    ActiveSheet.Columns(kolonneNr).Hidden = skjul
   
    If skjul = False Then
        ActiveSheet.Columns(kolonneNr).ColumnWidth = 170
    End If
End Sub
Rem ================================================
Private Sub Worksheet_Activate()                    'Når arket aktiveres
    antal = 1
    førsteKol = xKol
    forSkyd = yKol - xKol
    visOpstartsKolonner
End Sub
Sub visOpstartsKolonner()
    Application.ScreenUpdating = False
    For kol = 1 To ActiveSheet.Columns.Count
        If kol = xKol Or kol = xKol + forSkyd Then
            ActiveSheet.Columns(kol).Hidden = False
            ActiveSheet.Columns(kol).ColumnWidth = 170
        Else
            ActiveSheet.Columns(kol).Hidden = True
        End If
    Next kol
    Application.ScreenUpdating = True
End Sub
Avatar billede Farveglad Nybegynder
13. august 2012 - 16:59 #6
Er det muligvis muligt, at finde den første ikke skjulte kolonne fra venstre? Det ville nok være en nemmere måde at løse mit problem på.
Avatar billede supertekst Ekspert
13. august 2012 - 17:30 #7
Public Sub findFørsteIkkeSkjulteKolonne()
Dim førsteLedigeKolonne As Integer
    førsteLedigeKolonne = søgLedigKolonne
   
Rem ...
End Sub
Private Function søgLedigKolonne()                  'returnerer nr på første kolonne, der er synlig
Dim kol As Integer
    For kol = 1 To ActiveSheet.Columns.Count
        If ActiveSheet.Columns(kol).Hidden = False Then
            søgLedigKolonne = kol
            Exit Function
    End If
    Next kol
    søgLedigKolonne = 0
End Function
Avatar billede Farveglad Nybegynder
15. august 2012 - 10:35 #8
Tak for din hjælp! Jeg kom dog til, at bruge en anden løsning:


Private Sub CommandButton1_Click()

Dim iSvar As Integer
iSvar = MsgBox("Er du sikker på, at du vil gå videre til den næste borgere?", vbYesNo)
If iSvar = vbYes Then
    For Each Column In Range("C1:AT1").Columns
        If Column.Hidden = False Then
            Column.EntireColumn.Hidden = True
            Column.Offset(1, 1).EntireColumn.Hidden = False
            Column.Offset(0, 24).EntireColumn.Hidden = True
            Column.Offset(0, 25).EntireColumn.Hidden = False
            Exit Sub
        End If
    Next Column
    End If
End Sub
Avatar billede Farveglad Nybegynder
15. august 2012 - 10:35 #9
Hvordan giver jeg dig pointerne?
Avatar billede supertekst Ekspert
15. august 2012 - 12:54 #10
Selv tak - blot det lykkedes..

Du får et svar til Accept..
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
Kurser inden for grundlæggende programmering

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