Výsledky 1 až 10 z 10

Téma: [Visual Basic (EXCEL),WIN]ve fci nejde menit vlastnost bunky

  1. #1
    Junior Member
    Založen
    26.12.2003
    Bydliště
    Kosmonosy&Liberec
    Příspěvky
    96
    Vliv
    262

    Standardní [Visual Basic (EXCEL),WIN]ve fci nejde menit vlastnost bunky

    Zdravim,
    dělám aplikaci ve VB v EXCELU, když to dopadne mohl by z toho být aj ročníkový projekt. Mám tu však jeden problem, přes který se nemohu dostat.

    maximálně to zjednoduším:
    Public Function test()
    List1.Range("a11").Interior.ColorIndex = 4
    test = 999
    End Function

    Jde o to, že ta změna barvy se v te funkci nevykoná. Jak říkám zjednodušuju problém. Ono to neudělá, ani když dám buňku lockovat, nebo i vybrat atd.

    Stejně se to chová, když tu změnu barvy dám do samostatne procedury a tu v te funkci zavolam. Chápu, že fce musi vracet hodnotu, ale proč se ta procedura nevykoná? nechal jsem to krokovat, on do ni skoci ale ty prikazy nedela. Kdyz tu samou proceduru zavolam na button click je vse ok
    Priklad:
    Tohle je ta procedura:
    Public Sub Barva()
    ActiveSheet.Range("A1:A10").Select
    For Each bunka In Selection
    bunka.Interior.ColorIndex = 4
    Next
    End Sub

    tady ji volam na buttonclick-to funkguje
    Private Sub CommandButton1_Click()
    Barva
    End Sub


    tady ve funkci, kterou pak vyvolam z nejake bunky v excelu
    Public Function Zmena()
    Barva
    Zmena = 123
    End Function

    To 123 je jen aby neco vratila
    jen dodam ze tu fci stejne jako proceduru mam v samostatnem modulu.
    Diky za rady
    notebook Fujitsu Siemens E8410||undervolted

  2. #2

    Standardní

    Tak moment tobe to nefunguje kdyz volas funkci ale kdyz volas proceduru tak to funguje? Chapu to dobre?

    Ty procedury, fce a jejich volani jsou ve stejne modulu ale ne v List1?

    Ja to teda zkusil a normalne mi to jelo

    Jinak tez napis kterou mas verzi Excelu VBA protoze ony jsou mezi sebou (napr. 2000 a XP) nekdy nekompatibilni.

    Ja zkousel na XP Excelu(VBA 6.3).

  3. #3
    Junior Member
    Založen
    26.12.2003
    Bydliště
    Kosmonosy&Liberec
    Příspěvky
    96
    Vliv
    262

    Standardní

    vzorovy priklad:
    mam tu vyse zminenou fci test() v modulu jedna, takze kdyz ted vlezu normalne do excelu a kliknu na nejakou bunku dam do ni VLOZIT tuhle FUNKCI --> VLASTNI--> a tam je test, tak se do bunky zapise jen 999 ale barva bunky a11 se nezmeni.

    jinak mam taky 6.3, XP
    Diky za ochotu. Poslal jsem ti na maila radeji ukazku toho co sem vyse popsal.
    notebook Fujitsu Siemens E8410||undervolted

  4. #4

    Standardní

    IMHO pres funkce bys to nemel delat. To me prijde dost nesikovne. Nemuzes to barvit nejak jinak resp. odjinud?

    Fce by mely IMHO mit jen vykonny kod ketry vrati hodnot.

  5. #5
    Junior Member
    Založen
    26.12.2003
    Bydliště
    Kosmonosy&Liberec
    Příspěvky
    96
    Vliv
    262

    Standardní

    Jo jasne ja to chapu, jak jsem rikal, tohle je jen zjednoduseny priklad, me tam vubec o zadnou barvu nejde.
    Celej ten problem se spatne vysvetluje. Opet to zjednodusim.
    Mam 31 ComboBoxu, vsechny maj delat to samy, dle ListIndexu zapisovat do prislusnych policek, prislusne veci atd.
    Takze jsem jim napsal jednu funkci(jako parametr ma prislusny Combo a spoustu jinejch veci).
    Pak mam bunku s funkci, ktera mimo samotneho vysledku, ktery zapise ma nastavit i ListIndex v Combu.
    Takze by se mela logicky vyvolat udalost ComboBox1(<--treba)_change, ktera rika vymaz a lockni bunku A11.
    Ta udalost se take vyvola, ale proste to nelockne ani nesmaze.
    Je to uplne stejnej pripad jako s tou barvou nahore.
    Asi je problem v tom, jak si psal i ty, ze fce dokaze jen vratit hodnotu. Resp je jen "read Only".
    Diky
    notebook Fujitsu Siemens E8410||undervolted

  6. #6

    Standardní

    Takze chces proste aby to reagovalo na zmenu v dane bunce?

    Tak to zkus resit tak ze udelas Private Sub Worksheet_Change(ByVal Target As Range) na ten list kde je ta hlidana bunka a pak uz jednoduse porovnas jestli je zmenena ta bunka kterou chces hlidat a provedes danou operaci.

    Pres Target.Address dostanes adresu bunky (resp Range) a promo pres Target primo tu hodnotu. Asi by to slo resit elegantneji ale takhle to taky funguje

  7. #7
    Junior Member
    Založen
    26.12.2003
    Bydliště
    Kosmonosy&Liberec
    Příspěvky
    96
    Vliv
    262

    Standardní

    Zkusim dekuji!!!
    BTW jsem na praxi ve ŠKODOVCE, reknu vam je to huco, kdyz clovek dela na masine, ktera ma stejne RAM jako je jeji CPU clock.....zvlaste pokud jde o 3,06 Xeon....
    notebook Fujitsu Siemens E8410||undervolted

  8. #8
    Junior Member
    Založen
    26.12.2003
    Bydliště
    Kosmonosy&Liberec
    Příspěvky
    96
    Vliv
    262

    Standardní

    Ještě jeden dotaz, jak udelat tohle v cyklu:
    ActiveSheet.ComboBox1.ListIndex = 0
    ActiveSheet.ComboBox2.ListIndex = 0
    ActiveSheet.ComboBox3.ListIndex = 0
    ...
    ActiveSheet.ComboBox31.ListIndex = 0
    notebook Fujitsu Siemens E8410||undervolted

  9. #9

    Standardní

    Pres kolekci

    Kód:
    Dim X As New Collection
        
    X.Add List1.ComboBox1
    X.Add List1.ComboBox2
    X.Add List1.ComboBox3
    ...
    
    For Each a In X
    a.ListIndex = 0
    Next a
    ale musis je do te kolekce stejne narvat

  10. #10
    Junior Member
    Založen
    26.12.2003
    Bydliště
    Kosmonosy&Liberec
    Příspěvky
    96
    Vliv
    262

    Standardní

    Citace Původně odeslal jedik
    Takze chces proste aby to reagovalo na zmenu v dane bunce?

    Tak to zkus resit tak ze udelas Private Sub Worksheet_Change(ByVal Target As Range) na ten list kde je ta hlidana bunka a pak uz jednoduse porovnas jestli je zmenena ta bunka kterou chces hlidat a provedes danou operaci.

    Pres Target.Address dostanes adresu bunky (resp Range) a promo pres Target primo tu hodnotu. Asi by to slo resit elegantneji ale takhle to taky funguje
    Hoj, tak jsem to nakonec musel udelat uplne jinak. Kdyz jsem to delal na change, tak to desne dlouho pocitalo, to same na calculate. Mimochodem dost dobra vec je tohle: zapnuti a vypnuti prekreslovani okna, hodne to urychli vypocet.
    Na počátku uvedete Application.ScreenUpdating = False a na konci Application.ScreenUpdating = True.

    A jeste k tomu problemu, daval jsem si ten samy dotaz na Builder.cz a opravdu takova fce, ktera se vklada do bunky nemuze nijak ovlivnit okoli

    jeste jednou diky
    Cau
    notebook Fujitsu Siemens E8410||undervolted

Informace o tématu

Users Browsing this Thread

Toto téma si právě prohlíží 1 uživatelů. (0 registrovaných a 1 anonymních)

Pravidla přispívání

  • Nemůžete zakládat nová témata
  • Nemůžete zasílat odpovědi
  • Nemůžete přikládat přílohy
  • Nemůžete upravovat své příspěvky
  •