Excel-macro op achtergrond laten draaien

Status
Niet open voor verdere reacties.

DrKurka

Gebruiker
Lid geworden
8 okt 2009
Berichten
8
Hallo allemaal,

Ik zit met het volgende;
Graag wil ik op de achtergrond een macro onder excel laten draaien die continu checkt of er een bepaalde string in windows-Clipboard verschijnt (geplaatst door een andere applicatie). Deze dient hij vervolgens direct in excel te plaatsen. Ondertussen moet de gebruiker dus gewoon met excel kunnen blijven werken.

Het volgende stukje code werkt goed, alleen geeft het een en ander een (te) hoge systeembelasting. De processor wordt behoorlijk belast. Wie weet een betere oplossing?

Bij voorbaat dank!


Code:
Sub LeesEvents()
Dim i As Integer
Dim Interval As Single, Start As Single

i = 1
Interval = 1 '(sec)

  
Do While i < 60000    '' loops * intervaltijd= totale duur (nu op 1*60000 sec)
      ' Tijdsinterval instellen (sec).
      Start = timer    ' Aanvangstijd instellen.
      Do While timer < Start + Interval
           DoEvents    ' Overdragen aan andere processen.
      Loop
      CheckClipboard 'Kijkt of er iets in windows-clipboard staat, zo ja -> plaats in excel
      i = i + 1
Loop

End sub
 
Laatst bewerkt door een moderator:
Waarom geen databasequery of webquery met refreshinterval ?
 
Waarom geen databasequery of webquery met refreshinterval ?

Bedankt voor de tip.

Het probleem is dat er data door een (eigen) VB-app, uitgelezen van de serieele poort PC naar Excel moet worden gezet. Excel draait op de PC helaas in een Citrix-omgeving.

Normaal gesproken zal de VB-app via API-functies de data doorsturen, maar omdat Citrix feitelijk een andere omgeving is (server) lukt dat nu niet. De VB-app ook in Citrix laten draaien stuit op weerstand van de systeembeheerder, ook omdat de benadering van de seriele poort volgens hem wat lastig ligt. Ook de API-functie werkt binnen Citrix om een of andere reden niet meer.

Vandaar de keuze voor de minder gebruikelijk route via het geheugen van de PC. Een refresh-query is misschien wel een idee maar ook daar wellicht lastig omdat Excel (in Citrix) standaard geen toegang heeft tot de C-schijf.
 
gebruik in Excel de methode ontime en dataobject

voorbeeld: de code wordt om de 60 seconden uitgevoerd.

Code:
sub opnieuw()
    Set klem = New DataObject
    if klem.GetformClipboard<> "" then

    end if
  application.ontime dateadd("s",60,now),"opnieuw"
End Sub
 
gebruik in Excel de methode ontime en dataobject

voorbeeld: de code wordt om de 60 seconden uitgevoerd.

Code:
sub opnieuw()
    Set klem = New DataObject
    if klem.GetformClipboard<> "" then

    end if
  application.ontime dateadd("s",60,now),"opnieuw"
End Sub

Ja, inderdaad :) Dit is het. Bedankt en petje af. :thumb:
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan