27. december 2020 - 12:03Der 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.
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
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.
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
Synes godt om
Ny brugerNybegynder
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.