< návrat zpět

MS Excel


Téma: Desetinné číslo v InputBox rss

Zaslal/a 3.4.2020 13:40

Ahoj, když mám tento příkaz:
sgBanka = Application.InputBox(Prompt:="Zadej počet přesčasových hodin", Default:=sgPrescasy, Type:=1)

a proměnná sgPrescasy není celé číslo (dejme tomu že má hodnoutu 4,5), tak se v inputBoxu zobrazí s tečkou místo čárky a když se zvolí OK, tak mi to do sgBanka načte nesmyslnou hodnotu 43956. Napadá mně to číslo rozbít na celou a desetinnou část a pak textově mezi to dát čárku. Ale jednak tuším, že si tím přidělám další potíže a myslím si, že na to musí být nějaký jednoduchý trik aby to inputbox chápal korektně...
Předem dík

Zaslat odpověď >

#046356
elninoslov
Skúste niečo takéto, len nástrel...
Sub pokus()
Dim ssgBanka As String
Dim sgPrescasy As Double
Dim sgBanka As Double

sgPrescasy = 4.5
While ssgBanka <> "False" And Not IsNumeric(ssgBanka)
ssgBanka = Replace(Application.InputBox(Prompt:="Zadej počet přesčasových hodin", Default:=sgPrescasy, Type:=2), ".", ",")
Wend
If ssgBanka <> "False" Then sgBanka = CDbl(ssgBanka)
End Sub
citovat
#046369
avatar
Děkuji za navržený způsob, který mně inspiroval ke konečnému řešení. Ve finále nakonec stačilo použít Replace přímo do Inputboxu:

sgBanka = Application.InputBox(Prompt:="Zadej počet přesčasových hodin", Default:=Replace(sgPrescasy, ".", ","), Type:=1)citovat
#046370
elninoslov
Nesmiete zabudnúť testovať či sgBanka = False. Vtedy bol totiž InputBox zrušený, bez zadania hodnoty. Makro treba zastaviť. To je úplne bežná vec, na ktorú treba myslieť.

Môj návrh rieši aj možnosť zadať 4.5 aj 4,5 a výsledok je vždy číslo 4,5. Vaše riešenie nefunguje, ak sa zadá bodka. Záleží asi aj na jazykovej mutácii. Pže niekde nieje desatinný oddeľovač čiarka, ako u nás. Nechce sa mi štartovať virtuálku s EN Win aj EN Office.

Sami musíte vedieť v akom prostredí u Vás čo môže nastať. Inak OK :)

EDIT:
Tak som to čiastočne overoval, a toto funguje za každých okolností Office SK, CZ, EN / Win SK, EN / W10, W7 / klávesnica SK, EN / oddeľovače "," "." / ošetrenie zrušenia InputBoxu.

Niekto dajte niečo jednoduchšie.
Sub pokus()
Dim ssgBanka As String
Dim sgPrescasy As Double
Dim sgBanka As Double
Dim Dec As String * 1, aDec As String * 1

Dec = Application.DecimalSeparator
aDec = IIf(Dec = ".", ",", ".")
sgPrescasy = 4.5

While ssgBanka <> "False" And Not IsNumeric(ssgBanka)
ssgBanka = Replace(Application.InputBox(Prompt:="Zadej pocet prescasových hodin", Default:=sgPrescasy, Type:=2), aDec, Dec)
Wend

If ssgBanka <> "False" Then sgBanka = CDbl(ssgBanka)
End Sub
citovat

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