Avatar billede Bjarne Juniormester
27. december 2020 - 12:03 Der er 1 kommentar og
2 løsninger

Hjælp til Rest() funktion i VBA

Hej

Jeg har et regneark til daglig log til hver dag i måneden.
Ud fra hvilken måned og år det er, skal arkene, som ikke skal bruges, skjules.

Det er nedenstående formel, som gerne skulle omskrives til VBA kode.
=HVIS(OG(C1=2;REST(B2;4)=0));29;HVIS(C1=2;28;HVIS(ELLER(C1=4;C1=6;C1=9;C1=11);30;31)))

C1 er måneden
B2 er året.
Når resultatet er 29, skal ark 30 og 31 skjules. Er resultatet 28, skal 29, 30 og 31 skjules osv.

Jeg er indtil videre kommet frem til denne kode:
Sub hvis()

If Range("C1").Value = 2 And Range(B2).Value Mod 4 Then
    Range("F2").Value = 29
ElseIf Range("C1").Value = 2 Then
    Range("F2").Value = 28
ElseIf Range("C1").Value = 4 Or Range("C1").Value = 6 Or Range("C1").Value = 9 Or Range("C1").Value = 11 Then
    Range("F2").Value = 30
Else
    Range("F2").Value = 31
End If
End Sub

Jeg vil indsætte denne kode, i starten af makro koden:

Sub Unhide_All_Sheets()
    Dim ws As Worksheet
   
    ActiveWorkbook.Unprotect
    For Each ws In Worksheets
        ws.Visible = xlSheetVisible
    Next
       
End Sub

Med denne kode er alle ark synlige, inden jeg skjuler nogle.

Derudover skal koden helst kører automatisk ved ændringer i C1 og B2.
Avatar billede Bjarne Juniormester
27. december 2020 - 15:02 #1
Det skulle være denne her, som skal redigeres lidt:

Sub hvis()

If Range("C1").Value = 2 And Range("B2") Mod 4 = 0 Then
    Range("F2").Value = 29
ElseIf Range("C1").Value = 2 Then
    Range("F2").Value = 28
ElseIf Range("C1").Value = 4 Or Range("C1").Value = 6 Or Range("C1").Value = 9 Or Range("C1").Value = 11 Then
    Range("F2").Value = 30
Else
    Range("F2").Value = 31
End If
End Sub
Avatar billede Bjarne Juniormester
27. december 2020 - 16:00 #2
Er kommet lidt nærmer.

Sub Skjul_Ark()

    For Each ws In Worksheets
        ws.Visible = xlSheetVisible
    Next
   
    If Range("C1").Value = 2 And Range("B2") Mod 4 = 0 Then
    Worksheets(Array("30", "31")).Visible = False
    ElseIf Range("C1").Value = 2 Then
    Worksheets(Array("29", "30", "31")).Visible = False
    ElseIf Range("C1").Value = 4 Or Range("C1").Value = 6 Or Range("C1").Value = 9 Or Range("C1").Value = 11 Then
    Worksheets(Array("31")).Visible = False
    End If
    Sheets("År og måned").Select
   
End Sub

Mangler dog løsningen til automatisk kørsel ved indtastning.
Avatar billede Bjarne Juniormester
27. december 2020 - 16:42 #3
Har selv fundet den sidste løsning, som jeg manglede:

Private Sub Worksheet_Change(ByVal Target As Range)
    If Not Intersect(Target, Range("C1", "B2")) Is Nothing Then
      Call Skjul_Ark
    End If
End Sub
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

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