No a čo všetko sa má kopírovať? Hodnota, formát, písmo, formát komentu, ...
Tento príklad je možno bizarný, a vyvolá diskusie o tom, ako by funkcia (na rozdiel od procedúry) nemala meniť objekty. No ale je to jediný spôsob, ako nestratíme Undo. Lebo naproti tomu, keď budeme odchytávať vo Worksheet_Change zmenu zdrojovej bunky a meniť cieľovú, vykonáme procedúru, a tým stratíme Undo. Ale zase by sme mohli skopírovať celú bunku (koment, formát, rám, písmo, ...)
Function ZRKADLI_BUNKU(Zdroj As Range, Ciel As Range) As Variant
Application.Volatile
On Error Resume Next
ZRKADLI_BUNKU = Zdroj.Value 'hodnota zo zdroja do cieľa
If Not Zdroj.Comment Is Nothing Then 'ak má zdroj komentár tak ho skopíruj do cieľa
If Ciel.Comment Is Nothing Then 'ak cieľ nemá komentár, tak ho vytvor
Ciel.AddComment Text:=Zdroj.Comment.Shape.TextFrame.Characters.Text
Else 'ak cieľ má komentár, tak ho zmeň
Ciel.Comment.Text Text:=Zdroj.Comment.Shape.TextFrame.Characters.Text
End If
Else 'ak zdroj komentár nemá, ale cieľ áno, tak ho zmaž
If Not Ciel.Comment Is Nothing Then Ciel.Comment.Delete
End If
End Function
V prípade UDF funkcie musí prísť k prepočtu, teda samotná zmena zdrojového komentu nevyvolá zmenu cieľového komentu. Až zmena nejakej hodnoty v zošite vyvolá prepočet a zmenu.
Uveďte presnejší popis + príklad.
Tento príklad je možno bizarný, a vyvolá diskusie o tom, ako by funkcia (na rozdiel od procedúry) nemala meniť objekty. No ale je to jediný spôsob, ako nestratíme Undo. Lebo naproti tomu, keď budeme odchytávať vo Worksheet_Change zmenu zdrojovej bunky a meniť cieľovú, vykonáme procedúru, a tým stratíme Undo. Ale zase by sme mohli skopírovať celú bunku (koment, formát, rám, písmo, ...)
Function ZRKADLI_BUNKU(Zdroj As Range, Ciel As Range) As Variant
Application.Volatile
On Error Resume Next
ZRKADLI_BUNKU = Zdroj.Value 'hodnota zo zdroja do cieľa
If Not Zdroj.Comment Is Nothing Then 'ak má zdroj komentár tak ho skopíruj do cieľa
If Ciel.Comment Is Nothing Then 'ak cieľ nemá komentár, tak ho vytvor
Ciel.AddComment Text:=Zdroj.Comment.Shape.TextFrame.Characters.Text
Else 'ak cieľ má komentár, tak ho zmeň
Ciel.Comment.Text Text:=Zdroj.Comment.Shape.TextFrame.Characters.Text
End If
Else 'ak zdroj komentár nemá, ale cieľ áno, tak ho zmaž
If Not Ciel.Comment Is Nothing Then Ciel.Comment.Delete
End If
End Function
V prípade UDF funkcie musí prísť k prepočtu, teda samotná zmena zdrojového komentu nevyvolá zmenu cieľového komentu. Až zmena nejakej hodnoty v zošite vyvolá prepočet a zmenu.
Uveďte presnejší popis + príklad.
Příloha: 53231_zrkadli-bunku-aj-komentar.zip (19kB, staženo 5x)
citovat