< návrat zpět

MS Excel


Téma: VBA - pokračování po DoEvents rss

Zaslal/a 17.11.2014 22:39

Tlačítkem spouštím makro - nekonečný cyklus Do..Loop, který načítá neustále hodnoty z technologické karty. Potřebuji stiskem klávesy cyklus přerušit a pokračovat za Loop. Dal jsem tam DoEvents, ale to ukončí celé makro, dál už nepokračuje a ještě k tomu skočí zpět do EXCELU do editace buňky(tzn. nabídky v liště šedivé) a čeká na zápis do buňky.
Jde to přerušit nějak jinak?
Nebo aspoň, aby se to vrátilo "normálně" do EXCELU bez nutnosti potvrdit?
---
Do
DoEvents
If Keypressed then Exit Do
Call XXX
Loop
MsgBox(.....sem už to nikdy nedojde)
End Sub

Zaslat odpověď >

Strana:  1 2 3   další »
#022370
avatar
Čo je to "keypressed"?citovat
#022371
avatar
"keypressed" je stisk klávesy, ale neví jak to tam dosadit.citovat
icon #022374
eLCHa
1) keypressed = jaký je to typ, odkud bere hodnotu - z toho kousku nic nepoznáme. Pro stisk klávesy byste pravděpodobně musel použít nějakou API funkci.
2) nekonečný cyklus + excel = to podle mně nikdy nebude fungovat spolehlivě. Především si nekonečným cyklem zablokujete celou aplikaci. Raději popište, co to je technologická karta (list v excelu, textový soubor, databáze...) a někdo Vám tady pomůže vymyslet lepší řešení za pomocí integrovaných nástrojů.citovat
#022375
avatar
Princip :Načítá to analogové a digitální hodnoty z měřícího stolu přes kartu. Uživatel pracuje s tím stolem a když jsou na něm hodnoty nastavené, měl by načítání zastavit stisknutím libovolné klávesy - tím přerušit ten nekonečný cyklus načítání a hodnoty se dále zpracují.
Potřebuji prostě stiskem libovolné (nebo konkrétní) klávesy přerušit cyklus Do..Loop
(doEvents to udělá, ale vrátí se to do editace buňky, což se mi nehodí, protože se musí vlastně nějakou klávesou přerušit a pak ještě stisknout další klávesu, což je uživatelsky "nic moc")citovat
#022376
avatar
keypressed je nejaká premenná a asi tam nebola priradená nijaká hodnota.

Skús použiť "OnKey"citovat
#022377
avatar

cmuch1 napsal/a:

"keypressed" je stisk klávesy, ale neví jak to tam dosadit.

No vo VBA som nič také nenašiel.citovat
icon #022378
eLCHa
V podstatě si stojím za svou předchozí odpovědí. Excel není stavěný na "nekonečný" cyklus. Ve volnějších chvílích jsem to ze zvědavosti zkoušel a po hledání na netu a v počítači jsem dospěl k následujícímu kódu:Option Explicit

Declare Function SetWindowsHookEx Lib "user32" Alias "SetWindowsHookExA" (ByVal idHook As Long, ByVal lpfn As Long, ByVal hmod As Long, ByVal dwThreadId As Long) As Long
Declare Function CallNextHookEx Lib "user32" (ByVal hHook As Long, ByVal ncode As Long, ByVal wParam As Long, lParam As Any) As Long
Declare Function UnhookWindowsHookEx Lib "user32" (ByVal hHook As Long) As Long
Declare Function GetCurrentThreadId Lib "kernel32" () As Long

Public Const WH_KEYBOARD As Byte = 2
Public Const VK_SPACE As Byte = &H20

Dim hHook As Long
Dim bEnd As Boolean

Function fncKeyboardProc(ByVal idHook As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
If idHook < 0 Then
fncKeyboardProc = CallNextHookEx(hHook, idHook, wParam, ByVal lParam)
Else
If &HF0000000 And wParam = &H20 Then
bEnd = True
End If
End If
End Function

Private Sub subTest()
bEnd = False

hHook = SetWindowsHookEx(WH_KEYBOARD, AddressOf fncKeyboardProc, Application.Hinstance, GetCurrentThreadId)

Dim i As Long, iMax As Long
i = 0
iMax = 1000000

While Not bEnd And i < iMax
i = i + 1
DoEvents
Wend

If bEnd Then
MsgBox "Space pressed ..."
Else
MsgBox "i = " & iMax
End If

UnhookWindowsHookEx hHook
End Sub
Cyklus běží, dokud i nedosáhne iMax (cca 10s) nebo pokud nestisknu mezerník. Funguje mi to, ale neprovádím žádnou činnost mezi tím. Teoreticky by to fungovat mělo, ale NERUČÍM ZA TO. Je to jen zajímavost a se svou úrovní angličtiny nemůžu tvrdit, že tomu na 100% rozumím (http://msdn.microsoft.com/en-us/library/windows/desktop/ms644990(v=vs.85).aspx)

Osobně bych to asi řešil jinak. Napadá mně napsání prográmku v .NET, který by načítal hodnoty, ukládal je do txt a po skončení by vyvolal nahrání hodnot do excelu. V podstatě by je mohl rovnou házet i do excelu bez txt. Ale mám málo informací o tom co děláte. V každém případě jste nám stále neobjasnil proměnnou keypressed.citovat
#022380
avatar
keypressed - to mám ještě z Pascalu "if keypressed then..." = když se stiskne libovolná klávesa tak.... - to není žádná proměnná, ale klíčové slovo pro událost VBA - je pravda, že v tom mém cyklu to nefunguje, protže DoEvents to spolejhlivě shodí celé, to je pozůstatek, co jsem různě zkoušel.
Tam jde ještě o to, že na obrazovce EXCELU mám schéma, které průbežně při té smyčce reaguje - analogové hodnoty se zobrazují (napětí, proudy), počítají se výkony atd. a dle digitálních se mění stavy vypínačů. Tzn., že celé to schema dynamicky během toho cyklu reaguje a když tam na stole "doštelují" hodnoty a právě stisknou "hotovo", tak chci aby se to celé zastavilo a z těch hodnot se potom vytiskne měřící protokol. ten váš algoritmus prohlédnu a vyzkouším.citovat
#022381
avatar
@mike55.
Presne to som si myslel, že splietaš dva jazyky dohromady.
To je ako keby si češtinu prepletal s čínštinou. Tiež by to bolo každému jasné.citovat
#022382
avatar
Co na to říct ? Omlouvám se stokrát za NEVHODNÉ, NEEXISTUJÍCÍ slovo keypressed. Sypu si popel na hlavu, jsem totální číňan, motám všechno dohromady. STAČÍ?
Chtěl jsem POUZE poradit, jak vyskočit z cyklu stiskem libovolné klávesy a ne tady vést nekonečnou, nesmyslnou debatu o slovu keypressed.citovat

Strana:  1 2 3   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