07. september 2007 - 18:55Der er
17 kommentarer og 1 løsning
Makro til visning af data
Jeg har en regnskabsmodel, hvor jeg med hjælp herfra har fået lavet en makro, der låser cellerne der er indtastet i. dvs. man kan ikk gå tilbage og ændre noget.
Nu er jeg nåede dertil hvor outputtet skal komme til visning i et særskilt ark. Men resultatet og opsummeringen skal først være synlig, såfremt man har trykket på en knap, der har låst alle de indtastede celler... er dette muligt??? Hvis der så bliver ændret i nogle af cellerne i de andre ark igen, skal dataene/outputtet ikke være synligt, medmindre man igen trykker på knappen, og låser de celler der er udfyldte.
For at tjekke om der er indtastet noget kan du bruge denne kode, men du bliver nok nød til at have en knap de skal trykke på inden.
du kan også lave en knap som tjekker om data er ændret, og giver en fejlmeddelse. Jeg tror ikke du kan gøre det dynamisk, så dine resultater bliver skjult, men det samme de indtaster en værdi.
kode for tjek af nye værdier og skrift hvid:
Dim aendret As Boolean
aendret = False Range("A1:D8").Select For Each c In Selection If c.Locked = False Then ' tjek om er låst i forvejen If c <> "" Then ' indtastet værdi c.Locked = True aendret = True End If End If Next If aendret = True Then ' hvis ændringer skrift = hvid Range("E9:H19").Select With Selection.Font .ColorIndex = 2 End With End If
Altså, jeg har 12 ark i alt. januar til december. Dvs. hvis man har indtastet noget i december, så skal man have trykket på knappen der låser det indtastede data..
Men hvis man så har glemt dette på hvert enkelt ark, så skal man kunne låse alle arkene, eller der hvor der er udfyldt, på uddata arket. og når man så har trykket på denne, så skal man have adgang til at kunne se outputtet.?
Men den kan sagtens virke hvis man ændre skriftsfarven til hvid, og så til sort når man har trykket på knappen. Men hvis der så er ændret noget i de andre ark, så skal skriftsfarven blive hvid igen:)
Jeg skal lige være helt med :-). Når der skal ændres noget, efter man har låst alle arkene, skal arkene så låses op?, så man kan rette de gamle værdier, eller må man kun indtastes nye værdier (i ulåst celler)?
Det skal kun være muligt at indtaste i celler der ikke er udfyldte:)
SÅ når man har tastet i januar arket, og låst det, ved at trykke på knappen, som du hjalp mig med i det første spørgsmål, så skal det være muligt at se uddata, eller outputtet i et andet ark.. Hvis man så indtaster nye data, i nogle af de celler som ikke er udfyldte, så skal man ikke kunne se outputtet med mindre man har trykket på knappen:)
Men det skal også være muligt at trykke på en knap i uddata arket, således at alle indtastede data bliver låst, og outputtet så kommer frem??
Nej, du er ikke utydelig, jeg skulle bare være sikker inden jeg kastede mig ud i større løsningsforslag. her kommer det.
Du skal selvfølglig ændre til dine koder og områder
Du skal huske at når du begynder på et helt nyt ark, at cellerne skal være ulåste.
I hver ark skal du følgende til at stå (vælg ark i højre side af VBA editor)
Private Sub Worksheet_Change(ByVal Target As Range)
If Not Intersect(Target, Range("A1:AA65536")) Is Nothing Then NyIndtastning End If End Sub
På dit outputark (i princippet ligegyldigt) kan du lægge følgende kode: Private Sub NyIndtastning() Dim aendret As Boolean Dim sheetnavn As String
aendret = False Range("A10:c14").Select ActiveSheet.Unprotect "kode" sheetnavn = ActiveSheet.Name For Each c In Selection If c.Locked = False Then ' tjek om cele er låst i forvejen If c <> "" Then ' indtastet værdi c.Locked = True aendret = True End If End If Next If aendret = True Then ' hvis ændringer skrift = hvid Sheets("ark3").Select ' her skal ark navn til output stå ActiveSheet.Unprotect "kode" ActiveSheet.Range("a15:c20").Select 'område der ønskes hvid With Selection.Font .ColorIndex = 2 End With End If ActiveSheet.Protect "kode" Sheets(sheetnavn).Select
Det kan da gøres meget lettere, vi behøver ikke at tjekke cellen længere, dem der er låst kan der jo ikke indtastes i!.
Private Sub NyIndtastning() Dim sheetnavn As String
Application.ScreenUpdating = False sheetnavn = ActiveSheet.Name Sheets("ark3").Select ' her skal ark navn til output stå ActiveSheet.Unprotect "kode" ActiveSheet.Range("a15:c20").Select 'område der ønskes hvid With Selection.Font .ColorIndex = 2 End With ActiveSheet.Protect "kode" Sheets(sheetnavn).Select Application.ScreenUpdating = True
I hver ark skal du følgende til at stå (vælg ark i højre side af VBA editor)
Private Sub Worksheet_Change(ByVal Target As Range)
If Not Intersect(Target, Range("A1:AA65536")) Is Nothing Then NyIndtastning End If ' vælg kun det område som gyldig for indtastning End Sub
På dit outputark (i princippet ligegyldigt) skal du lægge følgende kode: Private Sub NyIndtastning() Dim sheetnavn As String
Application.ScreenUpdating = False sheetnavn = ActiveSheet.Name Sheets("ark3").Select ' her skal ark navn til output stå ActiveSheet.Unprotect "kode" ActiveSheet.Range("a15:c20").Select 'område der ønskes hvid With Selection.Font .ColorIndex = 2 End With ActiveSheet.Protect "kode" Sheets(sheetnavn).Select Application.ScreenUpdating = True
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.