Přidat otázku mezi oblíbenéZasílat nové odpovědi e-mailemVyřešeno Excel VBA-msgbox

Zdravím,
potřeboval bych makro (vba), tedy jedná se o "msgbox", který by se objevil vždy, když by byla překročena hodnota.

Př.
V buňce A2 na listu 1 by byla hodnota 4000, ve sloupcích C:C na listu 2 by byli uvedeny hodnoty. Pokud by součet hodnot na listu 2, sloupci C:C překročil hodnotu na listu 1 A2 (4000), ukázalo by se varovné hlášení, že byl překročen limit.

Předmět Autor Datum
Zdravím, Je otázka zda se pouštět do VBA bez základních znalostí. Přesto: Prvně je třeba zvolit udá…
usakji 12.07.2010 07:48
usakji
Suma stĺpca C sa dá vypočítať aj priamo vo VBA, nie je potrebné mať len kvôli tomu špeciálnu bunku.…
los 12.07.2010 19:26
los
Paráda, funguje to přesně, jak jsem chtěl. Opravdu děkuji a přejí příjemný den
Dieesels 12.07.2010 12:38
Dieesels
Síce to máš už vyriešené, ale pre úplnosť napíšem postup, ktorý by som uprednostnil, pretože sa to d… poslední
los 12.07.2010 19:27
los

Zdravím,
Je otázka zda se pouštět do VBA bez základních znalostí. Přesto:

Prvně je třeba zvolit událost při které se spustí makro, řekněme při změně hodnoty buňky na listu 2. Omezít akci pouze na výběr 3. sloupce, jinak by se hláška zobrazoala při každé změně na listu a to je dost protivné. Součet sloupce udělat sumou do některé buňky a je to. tady je kod:

Private Sub Worksheet_Change(ByVal Target As Range)
On Error Resume Next

Dim x_a As Integer
Dim x_b As Integer

If Target.Column <> 3 Then Exit Sub

x_a = List1.Cells(1, 1) 
x_b = List2.Range("D1") 'buňka se součtem sloupce C
 
If x_a < x_b Then MsgBox "Nějaký text ...", vbExclamation, "Nadpis"
End Sub

Suma stĺpca C sa dá vypočítať aj priamo vo VBA, nie je potrebné mať len kvôli tomu špeciálnu bunku. Ak by sa mal ošetriť aj prípad, keď používateľ zmení viacero buniek naraz (napr. cez Copy & Paste), tak by to mohlo vyzerať takto:

Private Sub Worksheet_Change(ByVal Target As Range)
    Dim aRange As Range
    Set aRange = Intersect(Target, Range("C:C"))
    If Not aRange Is Nothing Then
        If WorksheetFunction.Sum(Range("C:C")) > Sheet1.Range("A2") Then
            MsgBox "Nějaký text ...", vbExclamation, "Nadpis"
        End If
    End If
End Sub

Síce to máš už vyriešené, ale pre úplnosť napíšem postup, ktorý by som uprednostnil, pretože sa to dá riešiť aj bez makra.

Keďže máš limit a zoznam hodnôt na rôznych listoch, musíš si najprv pomenovať bunku, v ktorej máš ten limit. To spravíš tak, že vľavo hore, kde je adresa bunky (A2), napíšeš nejaké meno, napr. LIMIT. Potom len označíš stĺpec C s hodnotami a vyberieš validáciu dát (Data / Validation), kde si na záložke s nastaveniami (Settings) nastavíš vlastnú validačnú podmienku (Validation criteria / Allow: Custom) a vyplníš vzorec (Formula):

=SUM($C:$C)<=LIMIT

Na záložke pre chybové hlásenie (Error Alert) si potom môžeš nastaviť, čo sa má zobraziť pri chybe.

Zpět do poradny Odpovědět na původní otázku Nahoru