Kezdőlap › Fórumok › Excel programozás › Villogó cella
- This topic has 3 hozzászólás, 3 résztvevő, and was last updated 8 years, 4 months telt el by delila.
-
SzerzőBejegyzés
-
2016-05-06-14:09 #2666
Szia Imre,
azt szeretném elérni, hogy egy munkalapon egy cella „villogó” legyen, vagyis a háttere hol sárga, hol fehér addig, amíg ki nem töltik.
Rengeteget keresgéltem, de csak olyan megoldást találtam, ami nagyon lassan villog. Ezek a megoldások az Application.OnTime-mal operálnak, de a Now és a TimeSerial függvények argumentuma Integer típusú, tehát nem lehetnek kisebbek egy másodpercnél, ez viszont nagyon lomha villogást eredményez. Az egyik megoldás itt van:Option Explicit
Public NextBlink As Double
‘The cell that you want to blink
Public Const BlinkCell As String = „Munka1!B2”‘Start blinking
Private Sub StartBlinking()
If Cells(2, 2).Value <> 1 Then
If Range(BlinkCell).Interior.ColorIndex = 6 Then
Range(BlinkCell).Interior.ColorIndex = 0
Range(BlinkCell).Interior.ColorIndex = 6
End If
‘Wait one second before changing the color again
NextBlink = Now + TimeSerial(0, 0, 1)
Application.OnTime NextBlink, „StartBlinking”, , True
End If
End Sub‘Stop blinking
Private Sub StopBlinking()
‘Set color to white
Range(BlinkCell).Interior.ColorIndex = 0
‘Clear the value in the cell
Range(BlinkCell).ClearContents
On Error Resume Next
Application.OnTime NextBlink, „StartBlinking”, , False
Err.Clear
End SubEgy másik megoldás, hogy a modul fejlécébe a következőt írjuk:
Declare Sub Sleep Lib „kernel32” (ByVal dwMilliseconds As Long)
a program törzsében pedig a megfelelő helyen meghívjuk ezt a függvényt, pl. így:
Sleep 500
ami 500 ms-ot jelent, tehát a villogás gyorsul.
Ez utóbbival két baj van:
1. Nem értem, hogy mi ez a függvény (úgy kukáztam a neten), és hogy hogyan működik ez a deklaráció
2. Amíg fut, addig semmit nem enged kijelölni vagy változtatni a munkalapon, kicsit kattintgatva pedig az Excel is leáll.Van valami ötleted arra, hogy hogy lehetne ezt a kettőt összehozni? Vagy bárhogyan, másképp… És egy-két mondatban segítenél abban, hogy mi ez a kernel32-es téma?
Előre is köszönöm
András
2016-05-08-14:00 #2667Kedves András!
A kernel32 és a kernel64 Windows oprendszer API-k. Leginkább dll fájlok, amiben meghívható windows szintű függvények vannak.
A sleep valószínűleg egy olyan fv, ami fél másodpercig „nem csinál semmit”
Én csak nagyon körültekintően használnék ilyesmit, mert más-más gépeken más-más eredményt produkálhat, vagy egyik gépen talán nincs is ottauz a dll, amiből hívnék egy függvényt.Biztosan megvan az okod, miért akarod, gondolom valami figyelem felkeltés, de ez a villogó dolog meglehetősen old style.
Azt sokkal egyszerűbb megcsinálni, hogy amíg nem töltik ki, valamilyen színű legyen a háttere, utána meg normál. Ez egy sima eseménykezelés.
A sheet kiválasztása eseményhez egy olyan kód, ami megnézi az adott cellát, és ha üres, akkor megszínezi valahogy
Az adott cella tartalom módosulásához pedig a háttérszín alapra állítása.imre
2016-05-09-08:33 #2669Köszönöm a választ, valóban figyelemfelkeltés lenne a cél, van egy cella, aminek a kitöltése gyakran elmarad.
Ezek szerint egyelőre marad a színezés.Üdv
András
2016-07-27-09:23 #2835Igaz, megkaptad a jó választ, azért írok egy másikat.
A laphoz kell rendelned a makrót. A lapra lépéskor figyeli, hogy az A1 cellában van-e adat. Ha nincs, másodpercenként változtatja a háttér színét. Mindenképp jobbnak tartom horvimi változatát.
Private Sub Timer() If Range("A1") <> "" Then Range("A1").Interior.ColorIndex = -4142 Exit Sub End If With Range("A1") If .Interior.Color = vbYellow Then .Interior.Color = vbRed Else .Interior.Color = vbYellow End If Application.Wait Now() + TimeValue("00:00:01") DoEvents Timer End With End Sub Private Sub Worksheet_Activate() Timer End Sub
-
SzerzőBejegyzés
- Be kell jelentkezni a hozzászóláshoz.