Forfatter |
Emne Søg Emne funktioner
|
Siam Export
Sølv bruger
Medlem: 01.Dec.2012
Land: Thailand
Status: Offline
Point: 200
|
Emne: Textbox Sendt: 10.Jan.2016 kl. 01:57 |
Hej Igen
Jeg har en raekke textbox, men 1 af dem skal jeg kunne skrive thai i. (ketboad kan skrive thai, hvis man skifter om) vil gerne ha det paa auto i den textbox. fks. textbox5 kan skrive thai, imens resten forbliver paa dansk
paa forhaand mange tak
Dennis
|
Bruger 2010 UK
|
|
|
|
|
Ib Hansen
Guld bruger
Medlem: 15.Apr.2014
Land: Danmark
Status: Offline
Point: 652
|
Sendt: 11.Jan.2016 kl. 10:15 |
Hej Dennis.
Hmmm. Jeg søgte på nettet og fandt dette link. Linket konverterer dog Textboxen til Arabisk og ikke til Thai.
Herfra må du selv arbejde videre med det. Måske kan du modificere koderne, så de passer til Thai.
Download testark /uploads/1125/Skriv_andet_sprog_i_Textbox.xlsm" rel="nofollow">HER
Mvh. Ib
Userform koden og Module koden kan du kopiere fra linket eller Textarket
Userform koden - Ændr selv hvilken Textbox den skal virke på. - Find HKLkoden for Thai og udskift HKLarabic med den. (Jeg aner ikke hvad Thai koden hedder, men det er der måske andre der gør).
Option Explicit
#If Win64 Then Dim HKLsystem As LongPtr, HKLarabic As LongPtr #Else Dim HKLsystem As Long, HKLarabic As Long #End If
Private Sub TextBox1_Enter()
ActivateKeyboardLayout HKLarabic
End Sub
Private Sub TextBox1_Exit(ByVal Cancel As MSForms.ReturnBoolean)
ActivateKeyboardLayout HKLsystem
End Sub
Private Sub UserForm_Initialize()
HKLsystem = LoadKeyboardLayout(GetKeyboardLCID)
HKLarabic = LoadKeyboardLayout(1025)
End Sub
Private Sub UserForm_Terminate()
ActivateKeyboardLayout HKLsystem
UnloadKeyboardLayout HKLarabic End Sub |
|
|
EXCELGAARD
Platin bruger
Medlem: 27.Dec.2012
Land: Denmark
Status: Offline
Point: 5470
|
Sendt: 11.Jan.2016 kl. 10:39 |
Yeps, det var osse sådan jeg ville have gjort: Brug de 4 tastatur API, der ligger i 'User32' Jeg vil dog brugt 'VBA7' som 64-bit flag, og ikke 'Win64', da man i princippet godt kan have en 64-bit udgave af Excel, der kører VBA6, og dermed ikke kender 'LongPtr'. Anyway, tastaturkoden til Thai er 1054. HKLkoden er ikke andet end msoLanguageID koden, og man kan finde dem alle her: http://www.EXCELGAARD.dk/Bib/msoLanguageIDs/
|
Husk, at trykke på [Tak], hvis du kan lide et indlæg. Husk, at trykke på [Accepteret Svar], hvis du kan bruge et løsningsforslag.
|
|
Ib Hansen
Guld bruger
Medlem: 15.Apr.2014
Land: Danmark
Status: Offline
Point: 652
|
Sendt: 11.Jan.2016 kl. 11:56 |
Fantastisk hvad man kan med VBA Det betyder Userformen skal ændres til:
Private Sub UserForm_Initialize() HKLsystem = LoadKeyboardLayout(GetKeyboardLCID) HKLarabic = LoadKeyboardLayout(1054) End Sub |
Og Module koden skal ændres til:
Private Sub Example_KeyboardLayout()#If Win64 Then Dim SaveHKL As LongPtr, NewHKL As LongPtr, ThisHKL As LongPtr #Else Dim SaveHKL As Long, NewHKL As Long, ThisHKL As Long #End If 'Get the current keyboard layout SaveHKL = LoadKeyboardLayout(GetKeyboardLCID) 'Load the arabic keyboard layout NewHKL = LoadKeyboardLayout(1054) If NewHKL = 0 Then MsgBox "This keyboard layout is not supported by your system." Exit Sub End If 'Activate it ThisHKL = ActivateKeyboardLayout(NewHKL) If ThisHKL = NewHKL Then MsgBox "Unable to activate keyboard layout" End If 'Type an "y" now! Stop 'Restore the keyboard layout ActivateKeyboardLayout SaveHKL UnloadKeyboardLayout NewHKL End Sub |
Men betyder det du skriver om Win64 kontra VBA7 så, at kode-teksten skal ændres fra Win64 til VBA7, i alle koderne, hvor der er brugt Win64 ?
#If Win64 Then'*' ændres til #If VBA7 Then |
|
|
EXCELGAARD
Platin bruger
Medlem: 27.Dec.2012
Land: Denmark
Status: Offline
Point: 5470
|
Sendt: 11.Jan.2016 kl. 17:23 |
Det korte svar er 'Ja'.
Lad mig prøve, at forklare:
Flaget 'Win64' indikerer IKKE, hvorvidt der benyttes en 64-bit udgave af Windows eller ej! Flaget indkerer, om der benyttes en 64-bit udgave af Excel eller ej. Ja, flaget burde nok havde heddet noget i retning af, 'XL64', men Microsoft slår til igen med deres 'logik'.
Flaget 'VBA7' indikerer om der køre med VBA v7.x motoren eller ej.
Man kan altså godt installere en 32-bit Excel med en VBA7 motor, ligesom man kan installere en 64-bit Excel med f.eks. VBA6 motor.
Men, nu kommer trickset: VBA7 forstår alle de 'nye' 64-bit elementer (som f.eks. 'LongPtr') selvom VBA7 kører på en 32-bit Excel.
Dette betyder, at hvis det blot drejer sig om de samme biblioteker, der skal kaldes, men med 64-bit pointere og/eller udgaver, ja, så er VBA7 flaget nok.
Eneste tilfælde, hvor man behøver teste for 'Win64' (64-bit Excel), er i de MEGET få situationer, hvor der kaldes forskellige biblioteker, alt efter om der skal køres 32-bit eller 64-bit kode.
Dette sker måske 1 ud af 1.000.000 gange, og jeg selv er kun stødt på det en eneste gang.
Altså er VBA7 flaget både det rigtige at teste op imod, og det mest fejlsikre.
Håber, at det gav mening...
|
Husk, at trykke på [Tak], hvis du kan lide et indlæg. Husk, at trykke på [Accepteret Svar], hvis du kan bruge et løsningsforslag.
|
|
Ib Hansen
Guld bruger
Medlem: 15.Apr.2014
Land: Danmark
Status: Offline
Point: 652
|
Sendt: 12.Jan.2016 kl. 07:59 |
Ja, det gav stor mening. Ved at vælge den rigtige og største motor, kan man køre med alle hastigheder, incl. de lave også. VBA7 virker på dét den skal, nemlig VBA og ikke Windows og den er allround- og bagud kompatibel ! Når jeg opdager en genial kode, laver jeg et testark og gemmer det. Jeg vil modificere og gemme dette testark også Problemet er så bare at huske, i netop hvilket testark, den geniale kode "man lige står og mangler" lå. Men det er nok mere et alders betonet problem og "de små grå" kører ikke helt så hurtigt mere - Ha... Hmmm...
|
|
EXCELGAARD
Platin bruger
Medlem: 27.Dec.2012
Land: Denmark
Status: Offline
Point: 5470
|
Sendt: 12.Jan.2016 kl. 13:18 |
Man vælger nemlig ikke bare den største motor, men den rigtige Og, igen: 'Win64' udtrykker om EXCEL og ikke Windows er 64-bit Man, ja, grundlæggende har du fanget det
|
Husk, at trykke på [Tak], hvis du kan lide et indlæg. Husk, at trykke på [Accepteret Svar], hvis du kan bruge et løsningsforslag.
|
|
Ib Hansen
Guld bruger
Medlem: 15.Apr.2014
Land: Danmark
Status: Offline
Point: 652
|
Sendt: 13.Jan.2016 kl. 08:28 |
Jeg har fuldstændig forstået det, men udtrykte mig måske lidt dårligt. Da jeg skrev "den største motor", mente jeg den nyeste version VBA, med den formodning om, at den nyeste version altid var bagud kompatibel med koder fra tidligere versioner og man hermed var dækket ind. Men her tager jeg gruelig fejl ! Jeg har fundet mange koder på nettet, fra tidligere VBA versioner, der slet ikke kører i Excel 2010 og det syntes jeg er totalt dumt og fjollet. Et eksempel er SendKeys ("^{HOME}"), der skulle gengive tastaturgenvejene Ctrl+Home og som jeg fandt i et forum fra 2003.
Hvorfor man dropper sådan en kode i nyere versioner, er mig uforståeligt, men jeg forstår din pointe om, hvorfor man skal finde den rigtige version og ikke kun den nyeste.
Men nok om det.Tak for forklaringen
|
|