Stránka 1 z 1

Makro, které vymaže ovládací prvky vložené makrem

Napsal: 02 dub 2015 10:53
od lurban
Dobrý den, potřebuji poradit s tímto problémem: Mám makro, které do listu vloží tři ovládací prvky.
Sub Makro1()
'
' Makro1 Makro
'

'
Range("A4").Select
ActiveSheet.CheckBoxes.Add(1.5, 45, 93.75, 17.25).Select
Selection.Characters.Text = "Zateplení"
With Selection
.Value = xlOff
.LinkedCell = "A4"
.Display3DShading = True
End With
Range("C4").Select
ActiveSheet.CheckBoxes.Add(96, 45, 91.5, 17.25).Select
Selection.Characters.Text = "Výměna zdroje"
With Selection
.Value = xlOff
.LinkedCell = "B4"
.Display3DShading = True
End With
Range("E4").Select
ActiveSheet.CheckBoxes.Add(191.25, 44.25, 99.75, 17.25).Select
Selection.Characters.Text = "Využití odpadního tepla"
With Selection
.Value = xlOff
.LinkedCell = "C4"
.Display3DShading = True
End With
Range("B2").Select
End Sub

Je podmíněně spouštěno dalším makrem na základě hodnoty v buňce B2. Když je B2="5.1" vloží se ovládací prvky.

Private Sub Worksheet_Change(ByVal Target As Excel.Range)

Dim VRange As Range

Set VRange = Range("B2") 'hlídaná buňka

If Union(Target, VRange).Address = VRange.Address Then

If VRange = "5.1" Then Call Makro1 'zavolá makro vase_makro


End If

End Sub

Nyní ale potřebuji, aby když se hodnota B2 změní, ovládací prvky zase zmizely. Zkoušel jsem přes záznam makra, ale nefunguje to.

Nemám zkušenosti, nevím, zda raději vytvořit nové makro, které bude prvky mazat, nebo jestli je možné něco jako undo makra, případně zda to lze vyřešit úpravou spouštěcího makra...

Mohl by mi tedy někdo, prosím, poradit?
Děkuji.

Re: Makro, které vymaže ovládací prvky vložené makrem

Napsal: 02 dub 2015 12:21
od Azuzula
Vítám Tě na PC-HELPu.
Prosím, když sem dáváš nějaký kód, tak ho vkládej do tagu Code pro přehlednost. Děkujeme :)

A teď k dotazu. Nejprve bych checkboxu už při jeho vytvoření přiřadila nějaký název (v ukázce "xyz1"), podle toho jde snadno identifikovat a odstranit.
1.

Kód: Vybrat vše

'vytvoření checkboxu
With ActiveSheet.CheckBoxes.Add(1.5, 45, 93.75, 17.25)
    .Name = "xyz1"
    .Characters.Text = "Zateplení"
    .Value = xlOff
    .LinkedCell = "A4"
    .Display3DShading = True
End With


2.

Kód: Vybrat vše

'odstraní checkbox podle jeho názvu
ActiveSheet.Shapes.Range(Array("xyz1")).Delete

Když budeš chtít mazat víc checkboxů najednou, tak jejich názvy jednoduše přidáš do závorek a oddělíš je čárkou: Array("xyz1","xyz2", atd.)

Tohle celé můžeš nahradit 1. kódem.

Kód: Vybrat vše

Range("A4").Select
ActiveSheet.CheckBoxes.Add(1.5, 45, 93.75, 17.25).Select
Selection.Characters.Text = "Zateplení"
With Selection
.Value = xlOff
.LinkedCell = "A4"
.Display3DShading = True
End With


--- Doplnění předchozího příspěvku (02 Dub 2015 12:33) ---

Mazání checkboxů pak můžeš provádět buď automaticky makrem na základě definované změny na listu v buňce, nebo tlačítkem ručně.