edoedokra
16.09.20,14:37
Ahojte všetci
Som začiatočník v programovaní VBA. Pomocou čítačky čiarových kódov napĺňam „sklad“ databázy cez Excel UserForm, ktorý má 3 prvky - ComboBox1 - TabIndex = 0, jedná sa o pole s názvom produktu, TextBox1-TbIndex = 1, to je množstvo a CommandButton1 - TabIndex = 2, má funkciu „Potvrdiť“.
Ako sa dá zo sladby prvkov posúdiť rozhodujúxu úlohu tu zohráva nastavenie v (Properties) "TabIndex" od 0 - 2
Môj problém je, že keď načítam čiarový kód do UserForm v prvku formulára „ComboBox1“, načíta ho a automaticky prejde na „TextBox1“, kde ručne vyplním množstvo a kliknem 2x Enter na „CommandButton1“, údaje sa zobrazia v databáze aktívneho hárka.
A tu sa začína problém,keď by formulár mal cyklus opakovať a prejsť opäť k prvku „Combo Box“ (TabIndex = 0 "), ale cyklus zamrzne a je potrebné kliknúť na klávesu PC „TAB “ a ešte„ Deleteť " a až potom formulár je znovu pripravený (kurzor bliká) a môžem do databázy načítať ďalší záznam čiarového kódu.
Problém je teda v tom, že si neviem poradiť, ako v programe nahradiť stlačenie „TAB“ a „Delete“ aby cyklus pokračoval odznovu. To je prípad, keď použijem kód, kde riadky majú „Rem" teda ' apostrof. Môj program však funguje, keď odstránim prvky„ Rem “, kde je formulár prakticky vynulovaný hlavne pomocou časti kódu :
" Unload UserForm13
UserForm13.Show "
Myslím si že by sa to mohlo dať vyriešiť aj pomocou kódu ale nejako to neviem zadefinovať aby to bolo funkčné. Je možné že kód nie je správne napísaný a potreboval by odbornú úpravu. poprosil by som ak by bol niekto ochotný a pomohol vyriešiť môj problém, za čo vopred moc ďakujem.

Tu je môj kód:


Private Sub CommandButton1_Click ()
'Macro for UserForm and Barcode
'Application.ScreenUpdating = False
Application.Calculation = xlCalculationManual
Dim x As Integer 'Variant
Dim y As Integer
Dim cel As Range
Dim ComboBox As Integer ' ComboBox1
Dim Textbox As Integer 'TextBox1
Dim CommandButton As Integer 'CommandButton1
Dim Keycode As Integer

x = Range ("B114") + 1 ' riadok – názov položky
y = Range ("D114") + 2 ' stĺpec - klient
Range ("F114"). Select ' načíta množstvo z ComboBox2 (v hárku)
'ActiveSheet.Select' ???
Selection.Copy
Cells (x, y) .Select
ScreenUpdating = False

Selection.PasteSpecial Paste: = xlPasteAll, Operation: = xlNone, SkipBlanks: = _
False, Transpose: = False
Application.CutCopyMode = False

Rem Me! ComboBox1.TabIndex = 0
Rem Me! TextBox1.TabIndex = 1
Rem Me! CommandButton1.TabIndex = 2
ScreenUpdating = True

Rem Unload UserForm13
Rem UserForm13.Show
Application.Calculation = xlCalculationAutomatic

End Sub
xxn
26.04.21,10:16
Vidím že Ti zatiaľ nik neodpovedal ...., takto na diaľku je to naozaj obtiažne zhodnotiť, tak moju snahu ber s rezervou.
Predpokladám že chceš aby Ti po uložení záznamu vymazalo formulár a nastavilo kurzor do prvého Comboboxu (tabIndex=0) nového, zatiaľ prázdneho, rekordu. Pritom to chceš urobiť kliknutím na jeden button.

1.) Procedúra na vyčistenie všetkých textboxov a combo boxov vo forme je napr:

Private Sub CommandButton1_Click()
Dim objOLE as OLEObject
For Each objOLE In Me.OLEObjects
Select Case TypeName(objOLE.Object)
Case "TextBox", "ComboBox"
objOLE.Object.Value = ""
Case "CheckBox"
objOLE.Object.Value = False
End Select
Next objole
End Sub

alebo aj
'clear the data
Me.Textbox = ""
Me.Combobox = ""
atď.

2.) Procedúra na postavenie kurzora do požadovaného textboxu je:
Me.Combox.SetFocus
Application.ScreenUpdating = True

Na nete nájdeš niekoľko stránok resp. videí s návodmi (žiaľ vačšinou v EN).
napr. https://www.contextures.com/xluserform01.html

Väčšina týchto návodov je ale urobená tak že máš osobitné tlačidlo pre "Save" a iné tlačidlo pre vymazanie formy a jej prípravu na nový zápis.
napr. https://www.youtube.com/watch?v=zkUgeat0qnM