Print side | Luk vindue

Textbox

Udskrevet fra: Dansk Regneark Forum
Kategori: Hjælp til regneark.
Forum navn: Makro og VBA
Forum beskrivelse: Hjælp til Makroer og VBA-programmering
Web-adresse: https://forum.excel-regneark.dk/forum_posts.asp?TID=2365
Udskrevet den: 23.Nov.2024 kl. 11:16


Emne: Textbox
Besked fra: Siam Export
Emne: Textbox
Posteringsdato: 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



Svar:
Besked fra: Ib Hansen
Posteringsdato: 11.Jan.2016 kl. 10:15
Hej Dennis.

Hmmm. Jeg søgte på nettet og fandt dette link.
Åben link  http://social.msdn.microsoft.com/Forums/office/en-US/0c8f80b2-5084-4dba-b272-6797620f84a3/automatically-change-keyboard-input-language-when-set-focus-to-textbox-in-excel-userform?forum=exceldev" rel="nofollow - HER
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



Besked fra: EXCELGAARD
Posteringsdato: 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' Thumbs Up

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.


Besked fra: Ib Hansen
Posteringsdato: 11.Jan.2016 kl. 11:56
Fantastisk hvad man kan med VBA Clap

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


Besked fra: EXCELGAARD
Posteringsdato: 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.


Besked fra: Ib Hansen
Posteringsdato: 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å Smile

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...


Besked fra: EXCELGAARD
Posteringsdato: 12.Jan.2016 kl. 13:18
Man vælger nemlig ikke bare den største motor, men den rigtige Smile
Og, igen: 'Win64' udtrykker om EXCEL og ikke Windows er 64-bit Smile

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.


Besked fra: Ib Hansen
Posteringsdato: 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 Smile



Print side | Luk vindue