Avatar billede thums Praktikant
03. november 2003 - 12:04 Der er 14 kommentarer og
1 løsning

Mulighed for "enter" i celle-tekst

Problemet er at jeg har feltet en hel del celler og nu skal der fyldes en masse tekst ind i området. Dog skal det være muligt at bruge enter i feltet. Jeg har prøvet med at importere et word dokument.. der er bare et problem... den åbner word på en MacinTosh hvor at det skal kunne køre... dermed mangler jeg desperat en måde at skrive MED muligheden for linieskift andet end "enter"+"alt"
Avatar billede jkrons Professor
03. november 2003 - 12:07 #1
Hvad er der galt med Alt+Enter? Jeg tror ikke at du på nogen nem måde kan lave liniekift med Enter alene.
Avatar billede bufferzone Praktikant
03. november 2003 - 12:09 #2
i formater - celler - justering, kan du klikke "ombryd tekst" af herefter vil teksten automatisk fortsætte på næste linie når du når cellens længde begrændsning
Avatar billede jkrons Professor
03. november 2003 - 12:10 #3
bufferzone-> Men så styrer du ikke selv, hvor linieskiftene kommer. Det kan i så fald godt være midt i et ord.
Avatar billede thums Praktikant
03. november 2003 - 12:12 #4
jkrons: Problemet er at jeg skal tage hensyn til at vi har nogle ualmindeligt dovne brugere.. :)

bufferzone: Brugeren skal have mulighed for selv at vælge hvornår linie-skiftet skal foretages. Derfor er det ikke holdbart med normal tekstombrydning :)
Avatar billede jkrons Professor
03. november 2003 - 12:15 #5
Så er du nok nødt til at rode dig ud i et større kodearbejde, der "opfanger" et tryk på Enter tasten og ændrer det til et tryk på Alt+Enter. Problemet er, at Excel ikkek har en hændelse, der indtræffer når du taster i en celle. Så det må nok være noget med noget windows API programmering.

Men måske er der nogen, der har en nemmere løsning. Nememst ville det selvfølgelig være at lære brugerne at bruge Alt+Enter - elelr at undlade at skrive store tekstmængder i Excel :-)
Avatar billede stefanfuglsang Juniormester
03. november 2003 - 15:10 #6
Følgende kode kan gøre det, men hvordan skal man afslutte indtastning?

Kode til "Ark1":
Private Sub Worksheet_Change(ByVal Target As Range)
Dim c As Range
    'aktiver ændret celle og send "rediger celle, cursor til enden, alt+enter"
    Target.Activate
    Application.SendKeys ("{F2}{End}%{Enter}")   
End Sub
Avatar billede stefanfuglsang Juniormester
03. november 2003 - 15:13 #7
Ovenstående kode baserer sig på at man når man trykker Enter i en celle, kaldes Worksheet_change. Koden aktiverer den celle, der blev ændret og redigerer denne igen og indsætter ny linie i slutningen.
Men, som nævnt, brugerne vil nok nu kræve at programmet kan se forskel på om enter betyder ny linie eller afslut indtastning...
Avatar billede stefanfuglsang Juniormester
03. november 2003 - 15:22 #8
'med denne ændrede kode kan man afslutte med f.eks. tab
'private declare... skal anbringes i toppen af modulet
' desuden er koden lavet til at ligge i ThisWorkbook og virker derfor på alle ark
Private Declare Function GetKeyState Lib "user32.dll" (ByVal nVirtKey As Long)As Integer

Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
    If GetKeyState(13) Then
        Target.Activate
      Application.SendKeys ("{F2}{End}%{Enter}")
    End If
End Sub
Avatar billede thums Praktikant
03. november 2003 - 16:04 #9
stefanfuglsang: Hvor skal jeg rette i koden for at få den til at virke i f.eks H3?

Man skal stoppe med at fortolke enter som et linie skift når at der ikke er fokus på den bestemte celle. Der udover ville det være nice hvis det kunne lade sig gøre at den hopper ind som cursor når man markere cellen. Men ikke absolut nødvendigt... hvis det kan lade sig gøre er der 15 ekstra point...
Avatar billede stefanfuglsang Juniormester
03. november 2003 - 16:21 #10
Hvis den kun skal virke i celle H3 på ark 1, så er det nemmest at anbringe koden i kodemodulet for ark1, så hedder det (bemærk det så er worksheet_change og ikke workbook_change):
Private Declare Function GetKeyState Lib "user32.dll" (ByVal nVirtKey As Long)As Integer

Private Sub Worksheet_Change(ByVal Target As Range)
   
    If GetKeyState(13) and (Target.address = "$H$3" or Target.address= "$H$117") Then
        Target.Activate
        Application.SendKeys ("{F2}{End}%{Enter}")
    End If
End Sub

Du kan selv indsætte flere celler i linien
If GetKeyState(13) and (Target.address = "$H$3" or Target.address= "$H$117") Then
med "or" for hver ny celle
Avatar billede stefanfuglsang Juniormester
03. november 2003 - 16:22 #11
glemte at skrive (det er måske klart alligevel) at koden virker i celle H3 og H117 - som eksempel
Avatar billede stefanfuglsang Juniormester
03. november 2003 - 16:25 #12
Og det med markeringen kan gøres med
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
    If (Target.address = "$H$3" or Target.address= "$H$117") Then
        Application.SendKeys ("{F2}{End}")
    End If
End Sub
Avatar billede stefanfuglsang Juniormester
03. november 2003 - 16:30 #13
PS: Sendkeys sender tastekoder til Excel - der *kan* (i hvert fald teoretisk) være tilfælde, hvor dette giver utilsigtede hændelser, så afprøv det grundigt, inden du slipper brugerne løs
Avatar billede thums Praktikant
03. november 2003 - 16:35 #14
Hehe.. okay.. Jeg takker rigtigt mange gange.... og giver dig gladeligt dine point.... der er 15 mere som lovet i et spørgsmål jeg opretter nu her bagefter
Avatar billede thums Praktikant
04. november 2003 - 13:24 #15
GetKeyState(13) Fanger IKKE enter på macintosh!.. :(
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