

MS Access - specifický posun mezi větami databáze
Databáze MS Access (1997, popř. 2007). Jedna věta/řádek má 30 položek. Pro vkládání údajů do databáze je vytvořen formulář. Celé se to snažím koncipovat tak, aby se vůbec nepoužívala myš - výrazně zpomaluje práci...
Zadávání dat do formuláře (tedy jednoho řádku databáze) je řešeno tak, že po <enter> se kurzor posune na další položku dané věty. V jednom řádku se ovšem nevyplňují všechny položky; první čtyři vždycky a ze zbylých obvykle jen 3-5. Čili mezi prázdnými/nevyplňovanými položkami věty skáču mačkáním enteru.
Potřeboval bych dořešit jedinou věc, se kterou si nevím rady. Poslední vyplňovaná položka věty se pohybuje obvykle v druhé polovině databázové věty; někdy je to 16., jindy třeba 28. položka. Poslední položka to není skoro nikdy. Chtěl bych vytvořit klávesovou zkratku - ideálně by měla být modifikována klávesa PageDown - která by měla plnit následující: při jejím zmáčknutí by se měl kurzor (fokus) přesunout vždy na první položku následující věty. V defaultním nastavení Accessu je fokus posune na následující větu, ale na stejnou položku jako byl v minulé. Pro posun na první položku je potřeba následně mačkat Home. Mačkat v každé větě PageDown a hned poté Home je zdržující a otravné, takhle to nemůžu nechat, potřeboval bych to nějak sloučit do jedné klávesy. Databází je několik (se stejnou strukturou), roční objem zadávaných vět určitě přesahuje 100.000...
Tuším, že by mohla pomoci nějaké makro či spíše funkce VBA. Netuším ale jak na to...
Poradíte?
Příklad, abych to líp znázornil:
- databázová věta má položky A - Z
- jsem u šesté věty (A6 až Z6), fokus je na M6
- potřebuju se jedním stiskem klávesy (ideálně PageDown) dostat na A7.
Zatím se mi to podařilo vyřešit provizorně pomocí AutoKeys makra (spustit příkaz, přejít na nový záznam), ovšem namapované na INSERT
http://office.microsoft.com/en-us/access/HA10239111 1033.aspx
Rád bych to ale rozchodil na "PageDown", jenže netuším, jak tuto klávesu napsat
{PgDown} ani {PageDown} mi to nevzalo - odkazuje mě na použití SendKeys, bohužel nevím, jak na to...
Zkus do formu události Current vložit proceduru
If Me.OnKeyPress = "" Then
DoCmd.GoToControl "Název 1.položky"
End If
možná by to mohlo po PgDn chodit.
To je už pro mě vyšší dívčí, netuším, která bije

Nevím, jak na to...
takto určitě ne, správně by to mělo být takto:
1. za poslední "editovací" objekt si dáš další objekt (ať už viditelný (který je součástí dat formuláře), nebo neviditelný) a v jeho vlastnostech dáš do události "při získání fokusu" událostní proceduru ve VBA (tvůrce kódu) - vložíš do "Sub-u":
název této položky získáš v jejích vlastnostech.
A fungovat to bude tak, že při běžné editaci, po odklepnutí poslední položky enterem, by se mělo "odrotovat" na další záznam a přepnout na první ovládací prvek.
samozřejmě můžeš použít taky příkaz sendkeys, musel bys poslat "pgDn" a následně "Home"
Problém vidím v tom, že se k posledním položkám věty obvykle vůbec nedostanu (často končí poslední editace třeba někde v polovině, u 15.-20. položky z 30). Entrovat až konec se mi nechce, to už je jednodušší PgDown a Home.
S příkazem SendKeys mám problém, vůbec netuším, jak jej použít. Ale tuším, že to by mi pomohlo.
S manželkou jsme probírali možnost, že bychom místo PgDown používali Insert (vyřešeno viz výše), jenže 15-ti letá rutina se nedá tak snadno zlomit... (reálie dBASE IV)
znova: předpokladem je korektní nastavení pořadí ovládacích prvků. Nastavuje se to v kontextové nabídce nad formulářem v návrhovém zobrazení (takový ten černý čtvereček v rohu mezi pravítky)
Chápu, ale tohle je problém, "korektní nastavení pořadí"... Prostě netuším, nad kterou položkou ten příkaz vytvořit. Popřehazování kolonek mi nepomůže, když bych měl jednoznačně určit "tu poslední", po jejímž odentrování skočí fokus na první pole dalšího/nového záznamu.
Věta má 30 položek. První čtyři se vyplňují vždy, ze zbylých jen pár - pokaždé jiné. Jednou je poslední vyplňovaná položka (míněno jako pořadí položky ve větě) č. 11, jindy 20, jindy 25, zcela libovolně. Dojdu třeba k 11. položce a už chci skočit na další/novou větu, na její začátek. Jindy se dostanu až 20.,25. položce. Vyplňování vědy prostě pokaždé skončí někde jinde.
Vím, mohl bych jako poslední dát třeba jednu z těch prvních čtyř, které se musí vyplňovat vždy, ale to mě donutí 29x entrovat/tabovat, než se k ní dostanu.
Dám-li výše uvedený VBA "sub" nad poslední položku a doentruju-li se až k ní, pak to samozřejmě funguje.
-------
Opravdu cítím, že se budu muset spíše zaměřit na SendKeys, pokud nějak přebindovat klávesa PgDown vůbec jde...
aha, už chápu.
Nicméně, stisk klávesy "home" je příliš redundantní?
Síla zvyku. Oba (s manželkou) máme za sebou určitě milión (možná několik...) dbf vět s "PgDown a nic víc". Ovládání máme tak zažráno pod kůži, že vlastně pomalu nekoukáme ani na monitor (pochopitelně ani na klávesnici).
Než mačkat dvě klávesy, to se raději naučíme ten Insert.
Předělat databáze z dBASE do Accesu jsem se odhodlával už několikrát, vždy to ale ztroskotalo na (ne)ergonomii výsledku. Myš je prostě vyloučena; v naší práci hrozně zdržuje.
-------![]:)](https://static.poradna.net/images/smiley/evilsmile.gif)
![]:)](https://static.poradna.net/images/smiley/evilsmile.gif)
![]:)](https://static.poradna.net/images/smiley/evilsmile.gif)
Ještě bych mohl vyloupnout klávesy PgDown a Insert a zaměnit je, třeba by to fungovalo
Nevím, jak na to... Tak znovu: Otevřeš si zadávací form v návrhovém zobrazení, dál vlastnosti formu, "Při události Current" vytvoříš událostní proceduru, otevřeš a vložíš mnou výše uvedený příkaz - celé to vypadá takto:
Private Sub Form_Current()
If Me.OnKeyPress = "" Then
DoCmd.GoToControl "Název 1.položky"
End If
End Sub
Je to funkční na kterémkoli poli při vyplňování záznamu na stisk PgDn (nastavení pořadí na to nemá vliv). Rovněž můžeš "entrovat" až nakonec.
To touchwood: tvoje navrhované řešení "DoCmd.GoToRecord , , acNext DoCmd.GoToControl "Název 1.položky" bude bez problému fungovat pod příkazovým tlačítkem, ale požadavek byl na PgDn bez myšky.
já jsem předpokládal, že to je vždy na určitém poli formuláře.
...až pojedeš někdy jižní Moravou nedaleko Rakouska a Slovenska, stav se na víno. Zatím posílám aspoň virtuální
...tím chci naspat, že tohle funguje k mé plné spokojenosti. Díky moc!!
-----
Značím vyřešeno.