Avatar billede jklausen Juniormester
02. oktober 2003 - 22:43 Der er 22 kommentarer og
1 løsning

Macro i Excel med tastetryk

Jeg har ikke arb. med makroer i lang tid.
Faktisk er det så længe siden at jeg brugte qpro.
Her kunne jeg selv vælge om den skulle optage tastetryk eller funktioner.
Hvordan gør jeg lige det i excel?
Jeg har importeret en kolonne tal fra en hjemmeside.
De kommer åbenbart til at stå som text med 4 tomme felter til slut. Jeg vil så optage det at gå ind i feltet og slette disse tomme felter.
...eller er der måske en anden smart måde at gøre det på?
Avatar billede jklausen Juniormester
02. oktober 2003 - 22:44 #1
og jeg har været ovre i notepad for at se om jeg kunne slippe af med felterne - det kunne jeg ikke!
Avatar billede jkrons Professor
02. oktober 2003 - 23:42 #2
Makrooptageren i Excel skelner ikke mellem, hvordan du udfører dine handlinger. Den er sådan set ligeglad mdd, om du bruger mus eller tastatur. Den registrer alene "resultatet".
Avatar billede jklausen Juniormester
02. oktober 2003 - 23:43 #3
jeg skal bruge flg. tastekombination, jeg står i det felt jeg vil arb. på:

tryk F2
tryk på backspace 4 gange
tryk enter

hvordan optager jeg den?
Avatar billede jklausen Juniormester
02. oktober 2003 - 23:46 #4
jkrons
det kan da ikke være rigtig? Qproen jeg brugte førhen var fra 1995!
Men ok, så må vi da kunne ændre i kodelinierne.
Avatar billede jkrons Professor
02. oktober 2003 - 23:49 #5
Jeg tror faktisk ikke at du kan optage de enkelte tastetryk i en makro, men måske kan du bruge følgende.

Sub SletSidste()
ActiveCell.Value = Mid(ActiveCell.Value, 1, Len(ActiveCell.Value) - 4)
End Sub
Avatar billede kabbak Professor
02. oktober 2003 - 23:55 #6
hvad med en formel

=VÆRDI(FJERN.OVERFLØDIGE.BLANKE(A1))
Avatar billede jkrons Professor
02. oktober 2003 - 23:56 #7
Problemet er, at når du indspiller makroen registrerer den ikke de enkelte tastetryk, men derimod det, der kommer til at stå i cellen, når makroen afsluttes.
Avatar billede jkrons Professor
02. oktober 2003 - 23:56 #8
kabbak-> Måske har du ret, men som jeg opfatter det, er det ikke blanke der afsluttes med, men derimod nogle tomme felter.
Avatar billede kabbak Professor
02. oktober 2003 - 23:57 #9
hvad så med tekst til kolonner
Avatar billede jklausen Juniormester
03. oktober 2003 - 00:05 #10
jkrons
Det lader til det funker, så mangler vi bare at løbe det hele igennem.

jeg får fejl med:
Do Until ActiveCell.Value = ""
 
ActiveCell.Value = Mid(ActiveCell.Value, 1, Len(ActiveCell.Value) - 4)
   
Loop
End Sub
Avatar billede jkrons Professor
03. oktober 2003 - 00:09 #11
Nu kender jeg ikek strukturen i dit ark, men hvis du ikke har andet i arket, end det nævnte, kan du måske bruge denne

For Each c In ActiveSheet.UsedRange.Cells
ActiveCell.Value = Mid(ActiveCell.Value, 1, Len(ActiveCell.Value) - 4)
Next c
Avatar billede jklausen Juniormester
03. oktober 2003 - 00:11 #12
kabbak, duer ikke.
jkrons, jeg tror at vi skal have en ekstra linie på:
ActiveCell.Value = Mid(ActiveCell.Value, 1, Len(ActiveCell.Value) - 4)
ActiveCell.Offset(ryk en celle ned) eller noget i den stil

Kan du uddybe hvad de forskellige komandoer i din kodelinie betyder?
Avatar billede jkrons Professor
03. oktober 2003 - 00:15 #13
For hver celle i det brugte område i det aktive ark skal du
give den aktive celle en værdi, der en del af den samme værdi, startende fra begyndelsen og sluttende fire tegn før den samlede længde af værdien.

Activecell.value tager værdien af den aktive celle.
MID() finder en substring af dette fra det første tal (1) til det sidste tal.
LEN()-4 finder den samlede længde minus 4 og indsætter det som "hertil" i MID
Avatar billede jklausen Juniormester
03. oktober 2003 - 00:17 #14
jkrons
invalid procedurekald.
Det er
ActiveCell.Value = Mid(ActiveCell.Value, 1, Len(ActiveCell.Value) - 4)
der fejler når de andre linier kommer på
Avatar billede jkrons Professor
03. oktober 2003 - 00:20 #15
Min fejl, det er ved at være sent, så jeg er ikke så vågen lige nu:

For Each c In ActiveSheet.UsedRange.Cells
c.Value = Mid(c.Value, 1, (Len(c.Value) - 4))
Next c
Avatar billede jklausen Juniormester
03. oktober 2003 - 00:28 #16
jkrons
Tak, jeg har ikke prøvet dit sidste forslag endnu (men gør det lige om lidt). Jeg fik den til at køre (med lidt fusk) så den stopper lidt brat.
ActiveCell.Value = Mid(ActiveCell.Value, 1, Len(ActiveCell.Value) - 4)
ActiveCell.Offset(1, 0).Range("A1").Select
Application.Run "Mappe1!Makro2"

jeg er i mappe1 og min makro hedder makro2.
Avatar billede jkrons Professor
03. oktober 2003 - 00:31 #17
Loopet er OK, men tager lidt længere tid end For Each...Next, hvis der er mange celler, der skal køres igennem.

Tak for point.
Avatar billede jklausen Juniormester
03. oktober 2003 - 00:38 #18
jkrons
får stadig runtime error 5
invalid procedure call eller argument
Avatar billede jkrons Professor
03. oktober 2003 - 00:40 #19
OK. Den sidste kode jeg gav dig viker fint hos mig.
Avatar billede bak Forsker
03. oktober 2003 - 08:23 #20
docbill-> man kan måske ikke optage det, men man kan sagtens skrive det i en makro.

Sub test()
Application.SendKeys "{F2}{BS 4}{ENTER}"
End Sub
Avatar billede jkrons Professor
03. oktober 2003 - 08:49 #21
bak-> jeg havde selv tænkt på Sendkeys, men bruger det stort set aldrig. Jeg laver mest i Access, og her er SendKeys lidt farlig, fordi Sendkeys altid virker i det aktive vindue, og hvis der tilfældigvis er et andet vindue aktivt, når proceduren kaldes, end det man havde regnet med, da man skrev koden, kan du opstå en del uforudsete ting.

Her kan det dog gosdt lade sig gøre, man skal bare huske at skifte fra modularket til regnearket inden man tester koden - opdagede jeg :-)
Avatar billede bak Forsker
03. oktober 2003 - 09:19 #22
:-)
Jeg bruger den også sjældent, men der kan jo være situationer....
Avatar billede jklausen Juniormester
03. oktober 2003 - 13:34 #23
bak, ja det var det jeg efterlyste - dog kan jeg ikke få loop'en til at virke med din kode?

jkrons, nu virker det uden fejl:
Do Until ActiveCell.Value = ""
    ActiveCell.Value = Mid(ActiveCell.Value, 1, Len(ActiveCell.Value) - 4)
    Selection.Offset(1, 0).Select
    Loop
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
Excel kurser for alle niveauer og behov – find det kursus, der passer til dig

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