Stránka 1 z 1
více podmínek IF
Napsal: 04 říj 2010 20:55
od m.niki
Dobrý den, potřeboval bych poradit, jak opravit níže uvedený kód aby fungoval... cílem je aby podmínka pro IF byl asplněna, když se aktivní buňka bude c 16, c 32, c 48, .... 288 (tady jsem kód trochu zkrátil), zlobí mě tam nějak to And a Or, zkoušel jsem dát závorky, ale nepomohly, výsledek je, že se podmínka spustí když kliknu kamkoliv do sloupce C nebo řádků 16,32,48.... takže mě to vlastně vytvoří takovou aktivní mříž :)
Kód: Vybrat vše
If (ActiveCell.Column = 3 And ActiveCell.Row = 16) Or _
(ActiveCell.Column = 3 And ActiveCell.Row = 32) Or _
(ActiveCell.Column = 3 And ActiveCell.Row = 48) Or _
(ActiveCell.Column = 3 And ActiveCell.Row = 64) Then
znáte někdo řešení? díky moc
Re: více podmínek IF
Napsal: 04 říj 2010 22:57
od Sender
V Pascalu bych to napsal takhle:
Kód: Vybrat vše
If ActiveCell.Column =3 then
case ActiveCell.Row of
16,32,48,64:begin
//nějakej kód
end;
end;
Re: více podmínek IF
Napsal: 04 říj 2010 23:16
od navstevnik
Nize je modelova procedura testujici adresu aktivni bunky, uprav pro svou potrebu, radek je neperiodicky:
Kód: Vybrat vše
Sub TestAdresyAktivniBunky()
Dim OK As Boolean
OK = False
With ActiveCell
If .Column = 3 Then ' sloupec
Select Case .Row
Case 16, 30, 40, 64 ' radek
OK = True
End Select
End If
If OK Then
' nejaka procedura
Debug.Print "Bunka na radku " & .Row
End If
End With
End Sub
Pro periodicke cislo radku napr. takto:
Kód: Vybrat vše
Option Explicit
Sub TestAdresyAktivniBunky()
With ActiveCell
If .Column = 3 Then ' sloupec
If .Row Mod 16 = 0 Then ' radek
' nejaka procedura
Debug.Print "Bunka na radku " & .Row
End If
End If
End With
End Sub
Re: více podmínek IF
Napsal: 05 říj 2010 17:01
od m.niki
navstevniku asi se někde stala chybička, nějak to nemůžu rozchodit, ani jeden kód nereaguje na žádné buňce, zkoušel jsem to i v novým souboru a nic.
Re: více podmínek IF
Napsal: 05 říj 2010 17:40
od navstevnik
Uvedene procedury jsou jen modelove pro test adresy aktivni bunky misto nekonecne rady podminek, umisteny ve standardnim modulu (jedna nebo druha, jinak nutno upravit nazev).
Po spusteni v editoru VBA (F5) testuji, zda aktivni bunka (na aktivnim listu) ma adresu ve sloupci C:C a radku 16, (32,48,...) nic vic, nic min.
Pro konkretni reseni musis dodat konkretni proceduru (nejlepe i se sesitem), ve ktere ma test probehnout.
Re: více podmínek IF
Napsal: 05 říj 2010 18:06
od m.niki
já jsem si do toho při zkoušení doplnil procedury, ale nijak to nereagovalo, pak jsem si všiml rozdílu mezi původním kódem,myslel jsem, že jde o větu v závorce za názvem kódu, při kopírování jsem zkopíroval celý řádek s názvem a fungovalo to, když jsem chtěl název změnit, tak to fungovat přestalo.
Kód: Vybrat vše
Sub Worksheet_SelectionChange(ByVal target As Range)
With ActiveCell
If .Column = 3 Then
If .Row Mod 16 = 0 And .Row > 30 And .Row < 289 Then
.Offset(0, 2).Value = .Offset(-16, 2) + 1
End If
End If
End With
End Sub
pokud v názvu udělám jakoukoliv změnu, tak to nefunguje, nevíš proč? ono vlastně o nic nejde, klidně se funkce může jmenovat takto, jen bych to chtěl pochopit. Jinak děkuji za elegantní řešení podmínky, hned kód vypadá lépe .
Re: více podmínek IF
Napsal: 05 říj 2010 18:24
od navstevnik
Procedura "pracuje" s vybranou bunkou - Target:
Kód: Vybrat vše
Option Explicit
Sub Worksheet_SelectionChange(ByVal Target As Range)
With Target
If .Column = 3 Then
If .Row Mod 16 = 0 And .Row > 30 And .Row < 289 Then
.Offset(0, 2).Value = .Offset(-16, 2) + 1
End If
End If
End With
End Sub