Telefonszámunk: 1-472-0679

Villogó cella

Kezdőlap Fórumok Excel programozás Villogó cella

4 bejegyzés megtekintése - 1-4 / 4
  • Szerző
    Bejegyzés
  • #2666
    Vbacube
    Felhasználó

      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 Sub

      Egy 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

      #2667
      horvimi
      Adminisztrátor

        Kedves 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

        #2669
        Vbacube
        Felhasználó

          Kö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

          #2835
          delila
          Felhasználó

            Igaz, 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
          4 bejegyzés megtekintése - 1-4 / 4
          • Be kell jelentkezni a hozzászóláshoz.