< návrat zpět

MS Excel


Téma: number format do textboxu rss

Zaslal/a 13.1.2016 11:57

zdravím
mám kod

Set TextBox1 = list.OLEObjects.Add(ClassType:="Forms.TextBox.1")
With TextBox1
.Name = "box1"
.Left = list.Cells(23, 5).Left
.Top = list.Cells(23, 5).Top
.Width = list.Range("E23:F23").Width
.Height = list.Cells(23, 5).Height
.Object.BackColor = RGB(255, 255, 255)
.Object.ForeColor = RGB(0, 0, 0)
.Object.Text = ""
.Object.FontSize = 11
End With

může mi někdo prosím poradit jak nadefinovat number format pro tenhle textbox tak aby byl
NumberFormat = "#,##0"

díky :-)

Zaslat odpověď >

Strana:  1 2   další »
#029231
avatar
Pokud vím, tak TextBox má vždycky a zásadně pouze textový formát. To se týká i jiných ActiveX prvků. Numerické a časové údaje se do něj dají vkládat (např s použitím funkce Format), ale formálně to budou vždycky texty.citovat
#029232
elninoslov
Iba z tabletu, inšpirujte sa z tohoto kódu zo stackoverflow
Public Sub UserForm_Initialize()
TextBox6.Text = Format(Number, "0.0000")
End Sub

Private Sub TextBox6_Exit(ByVal Cancel As MSForms.ReturnBoolean)
If IsNumeric(TextBox6.Value) Then
TextBox6.Text = Format(TextBox6, "0.0000")
End If
End Sub

Private Sub TextBox6_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)
'// Disregard keys other than 0-9/period/minus sign.
If Shift Then KeyCode = 0
Select Case KeyCode
Case 8, 13, 46, 48 To 57, 96 To 105, 109, 110, 189, 190
Case Else
KeyCode = 0
End Select
End Sub

Je z formulára, ale to snáď jasné.citovat
#029234
avatar
Procedury od elninoslov jsou dobře použitelné. Jen výčet povolených znaků pro KeyDown mi připadne trochu zvláštní a v rozporu s vysvětlivkou v proceduře. Znaky 96 a výš tam podle mne nepatří, stejně jako znak 8. Místo tečky (znak 46) by tam asi měla být pro český Excel čárka (znak 44). Úplně chybí mínus (znak 45).
Procedury jsou zjevně odněkud převzaté, takže uvedené vady nejdou na triko elninoslov, ale na triko autora toho kódu.citovat
icon #029238
eLCHa
Obecně povolovat znaky je velmi nepraktické. Lepší je testovat, zda nový obsah je jakékoliv "číslo" a v tom případě změnu povolit.citovat
#029244
elninoslov
Takto by to mohlo fungovať:
Private Sub tbNumber_GotFocus()
tbNumber.Text = Replace(tbNumber.Text, Chr(160), vknullstring) 'Odstránenie formátovaných medzier

'''tbNumber.Text = Cells(3, 2) 'Voľba pre uchovanie neupravenej hodnoty v bunke, predošlý riadok zrušiť

End Sub

Private Sub tbNumber_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)
If Shift Then KeyCode = 0 'Ctrl, Shift, Alt
Select Case KeyCode
'8 BackSpace
'37 a 39 šípka vľavo a vpravo
'46 Delete
'48..57 0 až 9
'96..105 numerické čísla
'109 a 191 num "-" a "-"
'110 a 188 num "," a ","
Case 8, 37, 39, 46, 48 To 57, 96 To 105
Case 109, 110, 188, 191: If Not IsNumeric(tbNumber.Text) Then KeyCode = 0
Case 13: tbNumber.TopLeftCell.Offset(1, 0).Activate
Case Else: KeyCode = 0
End Select

'''Cells(3, 3) = tbNumber.Text 'Voľba pre uchovanie neupravenej hodnoty v bunke

End Sub

Private Sub tbNumber_LostFocus()
tbNumber.Text = Format(tbNumber.Text, "#.##0") 'Naformátovanie
End Sub

To prvé bol iba ujo guugl z tabletu od kávy. Ale tento kód mne funguje, ale načo je to dobré ???citovat
#029261
avatar
Pokládám za svou povinnost omluvit se za chyby, kterých jsem se dopustil při hodnocení kódu, který zaslal elninoslov. Dosud nikdy jsem nepoužil událost KeyDown pro vyhodnocení hodnot stisknutých kláves. Tiše jsem ale předpokládal, že nemohu dostat nic jiného, než ASCII hodnotu znaku, zobrazeného stiskem. Z toho pak plynuly moje výhrady k výčtu jejich hodnot.
Druhá verze kódu od elninoslov mne ale varovala, že je někde něco jinak. Napsal jsem si proto jednoduchý test na vznikající hodnoty KeyCode.
Výsledek mne dost vyděsil, protože rozvrátil můj předpoklad o obsahu předávaných KeyCode. V příloze je můj test, tady moje omluva. Z výsledku testu pro mne plynou dva závěry:
- každý soud bez ověření je riskantní soud,
- událost KeyDown jsem potkal, otestoval a nikdy ji sám nepoužiji, protože mi vnáší zmatek do míst, která mám jinak docela dobře zmapovaná.
Příloha: zip29261_archiv160114.zip (18kB, staženo 25x)
citovat
#029277
elninoslov
Tie kódy sú fakt divné, svätá pravda. Musel som si pre istotu každý vyčítať za behu. Ale snáď to bude fachať.citovat
icon #029279
eLCHa
@elninoslov
Nemusel. Stačí použít nápovědu.
https://msdn.microsoft.com/en-us/library/aa243025%28v=vs.60%29.aspx

edit:
asi byste opravdu neměl o půlnoci ten excel otevírat ;)))

Namátkou:
vknullstring
"#.##0"citovat
icon #029280
eLCHa
Mimochodem - toto bude fungovat i mně i angličanovi a nemusím řešit lokalizaciPrivate Sub txtNumber_GotFocus()
With txtNumber
.Text = Format(.Text, vbNullString)
End With 'txtNumber
End Sub

Private Sub txtNumber_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)
With txtNumber
Dim sVal As String
If Len(.Text) = 0 Then
sVal = Chr(KeyAscii) & "0"
Else
sVal = Left$(.Text, .SelStart) & ChrW(KeyAscii) & Mid$(.Text, .SelStart + 1)
End If

If Not IsNumeric(sVal) Then
KeyAscii = 0
End If
End With 'txtNumber
End Sub

Private Sub txtNumber_LostFocus()
With txtNumber
.Text = Format(.Text, "#,##0.00")
End With 'txtNumber
End Sub


Naopak varymu to nepomůže, protože (nechápu proč) vkládá textbox do listu programově. Těžko tak bude přiřazovat tomuto prvku události. Tedy ten prvek nevytvářet programově, ale ručně a pouze zobrazovat/skrývat.citovat
#029282
avatar
Je poněkud neobvyklé hledat podporu pro Excel v nápovědě pro Visual Studio 6. Tam bych asi pro informaci k Excelu nezabrousil. Ke svému překvapení jsem ale v zabudované nápovědě k Excelu našel třídu KeyCodeConstants s úplným výčtem hodnot stisknutých kláves, a to i s jejich logickými jmény.
Nenašel jsem tam ale žádné logické vysvětlení, proč mají klávesy numerické klávesnice jiné hodnoty KeyCode než jejich "dvojčata" z velké klávesnice. Rovněž tak nic pro fakt, že malá i velká písmena produkují stejný KeyCode. Připadá mi to, jako kdybych vlezl do jiné zoologické zahrady. Takže z ní zase tiše odcházím, když jsem se bez ní obešel dosavadních patnáct let života s Excelem.
Dobré ale je, když ted vím, co na mne číhá za rohem. Je dobré vědět, že vbKey3 je úplně jiný než vbKeyNumpad3 a že např. vbKeyNumpad2 poskytuje ASCII hodnotu pro znak "b", přestože produkuje znak "2". Takhle nějak vypadají arménské hádanky z rádia Jerevan.
Můj závěr se tentokrát plně shoduje s hodnocením od elCHa: "Obecně povolovat znaky je velmi nepraktické. Lepší je testovat, zda nový obsah je jakékoliv "číslo" a v tom případě změnu povolit."citovat

Strana:  1 2   další »

Uživatelské menu

Nejste přihlášen(a)
avatar\n

Menu

Formulář Faktura

Formulář Faktura IV

Oblíbený formulář Faktura byl vylepšen a rozšířen.
Více se dočtete zde.

Helios iNuvio

Používáte podnikový systém Helios iNuvio? Potřebujete pomoci se správou nebo vyvinout SQL proceduru? Více informací naleznete na stránce Helios iNuvio.

On-line nástroje