TextBox provázaný na buňku listu

V tomto článku se podíváme na ovládací prvek TextBox použitý na formuláři. Náš cíl bude jednoduchý – provázat a používat tento prvek ve vazbě na číselnou hodnotu v buňce listu. Říkáte si, že na tom přece nic není, postačí příkaz přiřazení. Možná změníte názor.

Pro zkušební účely postačí formulář s několika textovými poli a jedno tlačítko.

TextBox propojený na buňku v režimu návrhu
TextBox propojený na buňku v režimu návrhu

Povšimněte si provázání prvku TextBox7 s buňkou listu B4 prostřednictvím vlastnosti ControlSource.

Chování textových polí vyzkoušíme užitím jednoduchého kódu už při načítání formuláře.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
Private Sub UserForm_Initialize()

    'čárka
    Label1 = Range("B2")
    'čárka
    Label2 = Range("B2").Value
    'čárka
    Label3 = Range("B2").Text
    'čárka
    Label4 = CDbl(Range("B2").Value)
    'čárka
    Label5 = Format(Range("B2").Value, "0.00")
    'tečka
    Label6 = Replace(Range("B2").Value, ",", ".")

    'tečka
    TextBox1 = Range("B2")
    'tečka
    TextBox2 = Range("B2").Value
    'tečka
    TextBox3.Value = Range("B2")
    'tečka
    TextBox4.Value = Range("B2").Value
    'čárka
    TextBox5.Text = Range("B2").Value
    'čárka
    TextBox6.Text = Range("B2").Text

End Sub

Tlačítko má za úkol přenést hodnoty z textových polí zpátky do listu Excelu.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
Private Sub CommandButton1_Click()

    Dim strOddelovac As String

    'desetinný oddělovač
    'viz Windows 7: Ovládací panely / Oblast a jazyk, Další nastavení
    strOddelovac = Application.International(xlDecimalSeparator)

    'TextBox1 ... text 6.28
    'TextBox5 ... číslo 6,28

    'na listu jako text s formátem datumu
    '1.6.1928, resp. 2028
    Range("D2") = TextBox1

    'na listu jako číslo 6,28
    Range("D3") = TextBox1.Text
    Range("D4") = TextBox1.Value

    'na listu jako text s formátem čísla 6,28
    Range("E2") = TextBox5
    Range("E3") = TextBox5.Text
    Range("E4") = TextBox5.Value

    'univerzální postup pro číselný výstup
    Range("F2") = CDbl(Replace(TextBox1, ".", strOddelovac))
    Range("F3") = CDbl(Replace(TextBox5, ".", strOddelovac))

End Sub

Obrázek níže ukazuje stav textových polí po spuštění a klepnutí na tlačítko CommandButton1 v Excelu 2010 CZ běžícím pod operačním systémem Windows 7 CZ.

TextBox propojený na buňku
TextBox propojený na buňku

Slovně okomentuji pouze dvě věci. Zatímco ve sloupci E nabízí inteligentní značky (Smart Tags, viz zelené trojúhelníčky v levých růžcích buněk) převedení textových hodnot na čísla, buňku D2 identifikují jako textově zadané datum. Vazbu buňka-textové pole danou vlastností ControlSource není možné dle mého názoru ovlivnit tak, abych zobrazovala na obou stranách lokalizovaný desetinný oddělovač (čárku). Proto bych se jejímu použití u číselných hodnot vyhýbal.