Keresés

Részletes keresés

Redlac Creative Commons License 2010.06.18 0 0 12086
Még az előző témát folytatva:

If Range("X38") > 0 Then MsgBox "Az első érkezésnél NEGATÍV részmenetidő érték keletkezett! A piros színnel jelölt részmenetidőhöz tartozó időpont(ok) nem megfelelőek!", vbCritical, "HIBÁS IDŐPONT!"

If Range("Y38") > 0 Then MsgBox "Az első érkezésnél NEGATÍV menetidő érték keletkezett! A piros színnel jelölt menetidőhöz tartozó időpont(ok) nem megfelelőek!", vbCritical, "HIBÁS IDŐPONT!"


A fenti szövegek egy-egy sorban vannak. Azt szeretném, ha a 2. mondat ("A piros színnel" kezdődő mondat) egy újabb msgbox-ban jelenne meg (miután az előzőt leokéztam).
- Ha egy sorba írom, külön msgbox-ként, akkor hibát jelez
- Ha simán alá írom, akkor bár megjelenik, de a hibás cella törlésekor újra feladja a 2. msgbox-ot.

Valami ötlet?
Redlac Creative Commons License 2010.06.17 0 0 12085
A függvények jól mennek, a makrókat tanulom.
Ebben segített a sétálás :-)
Előzmény: Delila_1 (12084)
Delila_1 Creative Commons License 2010.06.17 0 0 12084
Végül magad oldottad meg a feladatot, itt csak megsétáltattad. :)
Előzmény: Redlac (12083)
Redlac Creative Commons License 2010.06.17 0 0 12083
Megint tanultam valamit :-)

Köszönöm delila!
Előzmény: Delila_1 (12082)
Delila_1 Creative Commons License 2010.06.17 0 0 12082
Private Sub Worksheet_Change(ByVal Target As Range)
If Cells(4,3) > 0 then Msgbox ("A C5:C15 tartomány legalább egy cellája mínuszba került")
If Cells(5,3) > 0 then Msgbox ("A D5:D15 tartomány legalább egy cellája mínuszba került")

End sub

Ha nincs Else ág, a feltétellel egy sorba írva a Then ágat nincs szükség End If-re.
Előzmény: Redlac (12081)
Redlac Creative Commons License 2010.06.17 0 0 12081
Abba még tudnátok segíteni, hogy az msgbox szövege dinamikus legyen?

Tehát, ne a tartomány nevét írja ki (ahol a hiba), hanem, ha a J46-ban van szöveg, akkor azt. Ha azonban a J46 üres, akkor a J47-ben lévő (egyébként) fix szöveget.
Előzmény: Redlac (12080)
Redlac Creative Commons License 2010.06.17 0 0 12080
Igen, a tartományokat mindenképpen külön akartam vizsgálni.


Bár tovább gondolva az előjel függvényre sincsen szükség.

a C4-be ezt írom =DARABTELI(C5:C15;"<0")

a makró meg így nézne ki

Private Sub Worksheet_Change(ByVal Target As Range)
If Cells(4,3) > 0 then
Msgbox ("A C5:C15 tartomány legalább egy cellája mínuszba került")
End if
End sub

Köszönöm Nektek a segítséget, az együttgondolkodást :-)
Előzmény: Delila_1 (12079)
Delila_1 Creative Commons License 2010.06.17 0 0 12079
Valóban ez a legegyszerűbb. Egy oszlopban az

=HA(ELŐJEL(C5)=-1;1;"") képlet 1-et, vagy üres stringet ír.
Pl. a G2-ben az =SZUM(C5:C15) összesíti az eredményt.

A laphoz rendelve:

Private Sub Worksheet_Change(ByVal Target As Range)
If Range("G2") > 0 Then MsgBox "A C5:C15 tartomány legalább egy cellája mínuszba került."
End Sub

jajgat, ha mínuszba futott valamelyik érték.

Érdemes a következő tartományt külön vizsgálni, akkor a figyelmeztetés meghatározza a hiba helyét. A másik tartományhoz egy másik feltételt adsz:

If Range("H2") > 0 Then MsgBox "Az M5:M15 tartomány legalább egy cellája mínuszba került."
Előzmény: Redlac (12076)
Redlac Creative Commons License 2010.06.17 0 0 12078
Tök jó magammal beszélgetni :-)

Lassan a cella meghatározás is működik:

Private Sub Worksheet_Change(ByVal Target As Range)
If Cells(4, 2) > 0 Then
MsgBox ("Bukta")
End If
End Sub


Ez így jó :-)
Előzmény: Redlac (12077)
Redlac Creative Commons License 2010.06.17 0 0 12077
Ez a saját ötletem működne, csak a makró nem ment

Private Sub Worksheet_Change(ByVal Target As Range)
If B4 > 0 Then
MsgBox ("Bukta")
End If
End Sub

A b4 a darabteli cellája. Ha az nagyobb, mint 0, akkor van legalább egy mínusz értékű cella a vizsgált tartományban.
Előzmény: Redlac (12076)
Redlac Creative Commons License 2010.06.17 0 0 12076
És mi a véleményetek arról, ha (rejtett oszlopban) az előjel függvénnyel vizsgálom a tartomány összes celláját, majd az egészből nézek egy darabtelit. Ha ennek eredménye 1, tehát van legalább egy negatív szám a vizsgált tartományban, akkor kiabálni kellene. Így a makrónak egy cellát (a darabteli eredményét) kellene vizsgálni?
Redlac Creative Commons License 2010.06.17 0 0 12075
Jimmy, én mindkét makrót kipróbáltam, de nem akarja az igazságot.

Próbaként egy egyszerű C5=D5-E5 függvényt tettem bele, aztán a D és E cellákba írtam olyan számokat, amik hatására a C-ben negatív szám jött ki, de semmit nem kiabált.
Feltételezem a makróban lévő f8:f300 tartomány csak a lehetséges másik tartományt jelöli?
Előzmény: Törölt nick (12073)
Redlac Creative Commons License 2010.06.17 0 0 12074
Jó reggelt!

Mire leültem a gép elé, már komplett megoldás hegyek vannak, csak kapkodom a fejem:-)

Máris tesztelem az írottakat.
Előzmény: Törölt nick (12073)
Törölt nick Creative Commons License 2010.06.17 0 0 12073
Szerintem erre a lassú de biztos (favágós) módszer az lenne, ha a vizsgált tartomány minden celláját ellenőriznénk negatív értékre:

Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
Dim Rng1 As Range, c As Range
With ThisWorkbook.Sheets("Munka1")
Set Rng1 = Union(.Range("C5:C15"), .Range("F8:F300"))
For Each c In Rng1
If c < 0 Then
MsgBox "A bevitt adat nem megfelelő, mert a Munka1 lap " & c.Address & " cellája mínuszba került. "
Exit Sub
End If
Next
End With
End Sub

Ha több munkalapon kell tartományokat figyelni, akkor lehet Rng2, Rng3, stb tartományokat definiálni, és mindre külön ciklus, ami végignézi őket.

Valamivel gyorsabb, és szerintem jó módszer, ha csak a vizsgált tartomány minimumát ellenőrzöm. Ha a C5:C15 számok bármelyike negatív, akkor ugyanezen számok legkisebbike is negatív.
Tehát:

Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
Dim Rng1 As Range
With ThisWorkbook.Sheets("Munka1")
Set Rng1 = Union(.Range("C5:C15"), .Range("F8:F300"))
If Application.WorksheetFunction.Min(Rng1) < 0 Then
MsgBox "A bevitt adat nem megfelelő, mert a Munka1!" & Rng1.Address(False, False) & _
" tartomány legalább egy cellája mínuszba került. "
End If
End With
End Sub
Előzmény: Delila_1 (12072)
Delila_1 Creative Commons License 2010.06.17 0 0 12072
Redlac eredetileg a C5:C15 tartományt akarta figyeltetni, később azt írta, hogy más helyekre is kiterjesztené.
A makróddal 1 cellát lehet ellenőrizni, és nem látom, hogy lehetne ezt egy tartományra kiterjeszteni. Te biztosan tudod.
Előzmény: Törölt nick (12071)
Törölt nick Creative Commons License 2010.06.17 0 0 12071
Nem teljesen értem a kérdést...
Előzmény: Delila_1 (12070)
Delila_1 Creative Commons License 2010.06.17 0 0 12070
Igen, ez működik, de hogy adod ezt meg különböző tartományokra?
Előzmény: Törölt nick (12066)
kiwancsi Creative Commons License 2010.06.16 0 0 12069

Neked is köszönöm, remélem bírok majd vele.

A cél végülis az, hogy az adatokat csak egyszer, egy helyre vigyük fel, és ne pedig tíz különböző táblába(adatbázis), a 10 kül. tábla mégis létezzen. Akik azt nézegetik nem kell tudniuk honnan van.:-)

Előzmény: Törölt nick (12052)
kiwancsi Creative Commons License 2010.06.16 0 0 12068
Köszönöm, beleásom magam.
Előzmény: Jozsef (12051)
Törölt nick Creative Commons License 2010.06.16 0 0 12067
Viszont ez a módszer minden és bármilyen cellamódosulásnál pampogni fog, akár van hatása C5-re, akár nincs, mindaddig, amíg a negatív értéket eredményező beírást nem módosítjuk...
Előzmény: Törölt nick (12066)
Törölt nick Creative Commons License 2010.06.16 0 0 12066
Szerintem működne ez akkor, ha elhagynád a Target helyének vizsgálatát. Végül is tök mindegy, hogy melyik cellába írt be új adatot, ha attól megváltozik a figyelt cellákban a képlet értéke. A képlet értéke pedig általában akkor módosul, ha valahová új adatot írnak, tehát a változást el lehet csípni a Worksheet_Change eseménnyel.

Ha általánosabban akarjuk, akkor egyszerre figyelhetjük az összes munkalap változását:

Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
If ThisWorkbook.Sheets("Munka1").Range("C5") < 0 Then MsgBox "A bevitt adat nem megfelelő, mert a Munka1 lap C5 cellája mínuszba került. "
End Sub

Ezt már csak úgy lehet átverni, ha külső munkafüzetből, csatolással jön az adat, amiből C5 értéke származik.
Előzmény: Delila_1 (12064)
Delila_1 Creative Commons License 2010.06.16 0 0 12064
Nem működne. Ha egy feltételes formázással színezett cella színét, vagy színkódját lekérdezed, az eredeti színt, kódot kapod.

Azt lehetne megcsinálni, hogy ha pl. a C5 képlete =E5-D5, akkor azt a cellát kellene vizsgáltatnod, amelyiket utóbb viszel be. Ha ez az E5, akkor
If target.value-cells(target.row,4)<0 then msgbox ...

Az első két sor helyfoglalás az oszlop és a sor változónak, majd értékadás ezeknek.
A sor legyen a változott cella sora, az oszlop pedig a változott cella oszlopa.
Előzmény: Redlac (12063)
Redlac Creative Commons License 2010.06.16 0 0 12063
és akkor szerinted működne, ha feltételes formázással piros színnel jelölném, ha negatív szám jön ki a függvény eredményénél. Aztán a tartományban lévő piros szám megjelenését vizsgálom (ami ugye negatív számot jelent).
Előzmény: Delila_1 (12061)
Redlac Creative Commons License 2010.06.16 0 0 12062
Köszönöm, ez működik.

Mivel több egymástól különálló tartományra kellene alkalmazni a makrót, nem lehetne másképp meghatározni a target-et?

Lehet, hogy hülye a kérdés, de ha a c5:d5 tartományt elnevezem "cél"-nak, akkor azt is meg lehet oldani?

Az kezd világos lenni, hogy adott tartományra hogyan hivatkozom, de azok a megoldások, mintha itten nem működnének.

Megpróbálok nem kész megoldást kérni, hanem értelmezném az általad leírtakat.

A makród első két sora pontosan mit jelent?

Illetve ez így miért rossz?

Private Sub Worksheet_Change(ByVal Target As Range)

Target.Range = cél

If Target.Value < 0 Then
MsgBox "Ez a cella negatív számot nem tartalmazhat"

End If
End Sub

(a cella adatának törlése egyelőre nem kell)
Előzmény: Delila_1 (12058)
Delila_1 Creative Commons License 2010.06.16 0 0 12061
Azokat a cellákat kellene figyeltetni bevitelkor a Worksheet_Change metódussal, amelyek eredményeként a C5:C15 tartományban létrejöhet negatív érték.
Előzmény: Redlac (12056)
Delila_1 Creative Commons License 2010.06.16 0 0 12060
A 11292-es hsz. sajnos nem jó, mert a függvénnyel létrejött értékeket a target nem figyeli, csak ha másolod a függvényt tartalmazó cellát a C5:C15 tartományba. :(
Előzmény: Redlac (12056)
Delila_1 Creative Commons License 2010.06.16 0 0 12059
Sajnos nem jött össze. A makród felsorolta a Fájl menü (nem eszköztár!) menüpontjait. Biztonság kedvéért, hogy jobban lássam, beírattam a neveket egy oszlopba. Még az utoljára megnyitott füzeteim nevét is megadta.

Megnéztem a linkeket. Végül arra a következtetésre jutottam, hogy az a bővítmény (?) hiányzik, vagy hibásodott meg nálam, ami a levélben küldést csatolással hajtaná végre. Próbálkoztam már az Office újabb telepítésével, hibajavításával, de nem akar sikerülni.

Köszönöm a fáradozásodat.
Előzmény: Törölt nick (12054)
Delila_1 Creative Commons License 2010.06.16 0 0 12058
A laphoz kell rendelned a makrót.

Private Sub Worksheet_Change(ByVal Target As Range)
Dim oszlop As Integer, sor As Integer
oszlop = Target.Column
sor = Target.Row

If oszlop = 3 And sor > 4 And sor < 16 And Target.Value < 0 Then
MsgBox "Ez a cella negatív számot nem tartalmazhat"

'Ez a sor negatív szám esetén törli a cella tartalmát:
Cells(sor, oszlop) = ""
End If
End Sub
Előzmény: Redlac (12056)
SQLkerdes Creative Commons License 2010.06.16 0 0 12057
Delila posztolt néhány ilyen change tipusú kódot, az ő hozzászólásait érdemes visszanézni.

Tárgyi tudás híján én csak annyit szeretnék mondani, hogy lehet nem Private Sub kell ide hanem valami speckó.
Előzmény: Redlac (12056)
Redlac Creative Commons License 2010.06.16 0 0 12056
Üdv Mindenkinek!

Azt szeretném elérni, hogy ha egy cellában lévő szám negatív lesz (függvény eredményeképpen), akkor egy üzenetpanel ugorjon ki, hogy azt nem lehet, tehát valamit elrontott.

Ezt próbáltam, de kutyafüle:

Private Sub h()

If Target.Range = "c5:c15" And Target.Value < 0 Then
MsgBox ("Ez a cella negatív számot nem tartalmazhat")

End If
End Sub


Valaki megtudná mondani, hogy miért? Azok a válaszok, hogy "csak", "me' buta vagy" nem érnek :-)

Előre is köszi

Ha kedveled azért, ha nem azért nyomj egy lájkot a Fórumért!