Avatar billede timtoftgaard Praktikant
25. januar 2004 - 08:33 Der er 13 kommentarer og
1 løsning

Excel og VBA

Jeg håber I kan hjælpe mig med en macro i excel.
Jeg har via en AD converter (Picolog ADC11) fået data ind i mit excel. Det betyder at jeg i f.eks. celle D1 hele tiden kan se min måling som skifter op og ned afhængig af mit signal (range fra 0,000 - 0,800 mV).
Jeg har nu brug for en macro, som JEG kan starte, når det passer mig. Når den startes skrives værdien fra D:1 over til A:1 og efter næste 5 sekunder skal værdien fra D:1, (med det nye resultat), komme i A:2 osv, indtil jeg har målt i 120 sekunder (=24 værdier)
Kan du lave en sådan macro, som gerne må kaldes Pico og startes med "control t", (eller anden genvejstast!).
Avatar billede martin_moth Mester
25. januar 2004 - 12:56 #1
Kopier nedenstående kode ind i VBA-editoren.
Derefter kan du gå til Indstillinger > Macroer > afstil, vælg Pico, vælg indstillinger, og vælg at du skal bruge Ctrl+T som genvej. Voila!


Public RunWhen As Double
Public Const cRunIntervalSeconds = 5    ' two minutes
Public Const cRunWhat = "TheSub"
Public i As Long


Sub Pico()
RunWhen = Now + TimeSerial(0, 0, cRunIntervalSeconds)
Application.OnTime earliesttime:=RunWhen, procedure:=cRunWhat, _
    schedule:=True
End Sub

Sub TheSub()
  i = i + 1
  If i > 24 Then
      MsgBox "Kopiering slut"
      Call StopTimer
      Exit Sub
  End If
  Range("D1").Select
  Selection.Copy
  Range("A" & i).Select
  ActiveSheet.Paste
  Call Pico
End Sub

Sub StopTimer()
  On Error Resume Next
  Application.OnTime earliesttime:=RunWhen, _
      procedure:=cRunWhat, schedule:=False
End Sub
Avatar billede martin_moth Mester
25. januar 2004 - 12:56 #2
PS: Jeg har sat intervallet til 5 - det skal rettes til 20 :o)
Avatar billede martin_moth Mester
25. januar 2004 - 12:58 #3
PPS: Det er kopieret og rettet til fra et link på eksperten (søgefunktionen er din ven), du kan selv læse mere her: http://www.cpearson.com/excel/ontime.htm Forudsætter Excel 2000 eller nyere
Avatar billede timtoftgaard Praktikant
25. januar 2004 - 14:23 #4
Det virker næsten, men når jeg kører macroen kommer data godt nok over i A1, A2 osv, men der bliver hele opdateret i alle felterne til den sidst målte værdi. Jeg skulle meget gerne beholde den målte værdi i det enkelte felt.
Håber det kan lade sig gøre
Kan der også lægges en kode ind når macroen startes, hvor alt hvd der står i kolonne A slettes, før der lægges nye data ind?

Tim
Avatar billede timtoftgaard Praktikant
25. januar 2004 - 14:38 #5
Hov, jeg skrev det som et "svar".
Det virker næsten, men når jeg kører macroen kommer data godt nok over i A1, A2 osv, men der bliver hele opdateret i alle felterne til den sidst målte værdi. Jeg skulle meget gerne beholde den målte værdi i det enkelte felt.
Håber det kan lade sig gøre
Kan der også lægges en kode ind når macroen startes, hvor alt hvd der står i kolonne A slettes, før der lægges nye data ind?

Tim
Avatar billede martin_moth Mester
26. januar 2004 - 07:23 #6
Det kan ikke passe. Hos mig virker det perfekt, jeg kan skrive noget i D1, starte macroen, og så kopieres det til A1. Derefter kan jeg ændre D1 (mens macroen kører), og næste gang bliver den ændrede værdi skrevet til A2 osv...

Er det et absolut tal der skrives i D1, eller er det en formel, eller hvad er det? Kunne have noget med det at gøre. Prøv at indsæt speciel > værdier i A1, A2 osv:

Udskift

  ActiveSheet.Paste

med

  Selection.PasteSpecial Paste:=xlValues, Operation:=xlNone, SkipBlanks:=False, Transpose:=False
Avatar billede timtoftgaard Praktikant
26. januar 2004 - 07:57 #7
I feltet D1 bliver værdine hele tiden (= hvert sekund) opdateret en værdi, men så snart jeg ændrede den sidste formellinie, virker det perfekt!
Hermed max point!
Håber du kan give mig en kode, så alle gamle værdier i kolonne A, slettes, når macroen startes!

Mange tak for hjælpen, som har bragt mig langt videre

Tim
Avatar billede martin_moth Mester
26. januar 2004 - 09:19 #8
Omdøb

  Sub Pico()

til
  Sub TimerSub()



Og sæt følgende ind i din kode

Sub Pico()
  Range("A1:A20").Select
  Selection.ClearContents
  call TimerSub
End Sub

Så slettes kolonne A1 inden du kører macroen. Men det er helt unødvendigt, da den bare vil overskrive de gamle værdier, så du behøver ikke foretage ovenstående rettelse
Avatar billede martin_moth Mester
26. januar 2004 - 11:58 #9
Jeg ville nok lave det sådan, for at være 100% sikker på at i bliver nulstillet:

Public RunWhen As Double
Public Const cRunIntervalSeconds = 20 
Public Const cRunWhat = "TheSub"
Public i As Long

Sub Pico()
  i=0
  Range("A1:A20").Select
  Selection.ClearContents
  call TimerSub
End Sub

Sub TimerSub()
RunWhen = Now + TimeSerial(0, 0, cRunIntervalSeconds)
Application.OnTime earliesttime:=RunWhen, procedure:=cRunWhat, _
    schedule:=True
End Sub

Sub TheSub()
  i = i + 1
  If i > 24 Then
      MsgBox "Kopiering slut"
      Call StopTimer
      Exit Sub
  End If
  Range("D1").Select
  Selection.Copy
  Range("A" & i).Select
  Selection.PasteSpecial Paste:=xlValues, Operation:=xlNone, SkipBlanks:=False, Transpose:=False
  Call Pico
End Sub

Sub StopTimer()
  On Error Resume Next
  Application.OnTime earliesttime:=RunWhen, _
      procedure:=cRunWhat, schedule:=False
End Sub
Avatar billede martin_moth Mester
26. januar 2004 - 12:16 #10
Husk at lukke spørgsmålet :o)
Avatar billede timtoftgaard Praktikant
26. januar 2004 - 12:52 #11
Nu er der gået helt ´kuk i det. der er gemt den ene macro oven i den anden.

jeg har slettet alt, og så prøvet at få den sidste version ind
Desværre går det galt. Jeg har prøvet at slette alt og oprette ny macro som hedder pico. Derefter i visual basic kopieret ovenstående ind, men det går helt galt, ider så pludselig ligger gamle macroer. Hvordan får jeg slettet alt og lagt den sidste version ind

Håber igen for hjælp

Tim
Avatar billede martin_moth Mester
26. januar 2004 - 16:48 #12
Optag en ny macro:
Tools > Macro > Record new macro
Kald den noget tilfældigt, og stop optagningen

Gå til VBA editoren Alt + F11

Hvis du ikke har din project explorer tændt, så tænd den ved View > Project explorer

Under Modules ligger der nu et modul der hedder module1 - åben det (dobbeltklik)

Slet den macro du netop har optaget, og evt. andre macroer, og sæt min kode ind
Avatar billede timtoftgaard Praktikant
04. februar 2004 - 16:47 #13
Jeg har stadig problem, idet jeg kan køre min macro en gang, men næste gange stopper den efter få sekunder og siger at den er færdig. Jeg skal så slukke excel, og når jeg starter igen kan jeg køre macroen en gang
Se nyt spørgsmål http://www.eksperten.dk/spm/456559
Avatar billede martin_moth Mester
08. februar 2004 - 17:34 #14
Se min kommentar 26/01-2004 11:58:44
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester