25. januar 2004 - 08:33Der 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!).
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
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
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?
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?
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:
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
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
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
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
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
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.