Pagina 1 din 1
Un (1) caracter/celula; o imposibilitate?
Scris: Joi Apr 08, 2010 1:08 pm
de RAMBO
Cum fac (daca se poate asa ceva) ca intr-o celula sa introduc doar un caracter dupa care sa se autoselecteze celula urmatoare (celula din acelasi rind, dar coloana vecina), asa cum este in exemplul atasat. Adica acest lucru sa se intimple fara artificii din partea utilizatorului. Adica fara ENTER dupa fiecare caracter, pentru ca ar trece la urmatorul rind si se intinde pe verticala. Am un cod care la apasarea tastei ENTER dupa completarea unei anumite celule, duce "cursorul" la alta celula declarata. Dar asta implica ENTER dupa fiecare caracter. Vreau sa evit acest lucru. Ma tem ca este imposibil. Codul de care vorbeam este urmatorul (cu niste rangeuri aleatoare):
Cod: Selectaţi tot
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Address(False, False) = "D3" Then
If Range("d3") > 0 Then
Application.EnableEvents = False
Me.Range("f4").Select
Application.EnableEvents = True
End If
End If
End Sub
Re: Un (1) caracter/celula; o imposibilitate?
Scris: Joi Apr 08, 2010 4:13 pm
de Dr. Cloud
Eu ti-am facut cu o formula sa iti separe un nume dintr-o celula.
Adica, introduci intr-o celula un nume si in tabel se extrage automat fiecare litera din acel nume.
Dar asta implica ENTER dupa fiecare caracter
Pai daca scrii un caracter intr-o celula sau orice altceva, atata timp cat nu dai un Enter sau apesi o alta tasta care permite validarea acelui text, cum ai vrea tu sa mearga mai departe?
Re: Un (1) caracter/celula; o imposibilitate?
Scris: Joi Apr 08, 2010 8:00 pm
de Dr.Windows
Pentru ca din pacate nu exista un eveniment "OnKey" pentru excel ca sa poti captura tastele apasate, o alta varianta pentru rezolvarea problemei tale ar fi (tot cu VBA) folosirea unei forme care sa e activeze la intrarea in "range"-ul potrivit - sa preia textul "intreg" de la user si apoi sa-l "splituiasca" in celulele din range-ul respectiv cum se intampla in exemplul atasat:
OnKeyReplacement.jpg
Codul din spatele formei ar fi urmatorul:
Cod: Selectaţi tot
Private Sub cmdOK_Click()
Dim cell As Range
Dim i As Long
'Sparge textul introdus in caractere
i = 0
cSplit = txtSplit.Value
Dim aSplit() As Variant
ReDim aSplit(1 To Len(cSplit))
For i = 1 To Len(cSplit)
aSplit(i) = Mid(cSplit, i, 1)
Next i
'sterge textul vechi
Range("rngSplit").ClearContents
'Scrie caracterele in celule
i = 0
For Each cell In Range("rngSplit")
i = i + 1
If i < Len(cSplit) + 1 Then
cell.Value = aSplit(i)
End If
Next cell
Unload Me
End Sub
Private Sub txtSplit_Enter()
'Preselecteaza textul la intrarea in textbox
frmText.txtSplit.SelStart = 0
frmText.txtSplit.SelLength = Len(frmText.txtSplit.Value)
End Sub
Private Sub txtSplit_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)
'Daca se apasa ENTER echivaleaza cu apasarea butonului OK
If KeyCode = 13 Then 'sau KeyAscii = vbCrLf
cmdOK_Click
End If
End Sub
Private Sub txtSplit_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)
'Daca se apasa ESC iese fara sa faca nimic
If KeyAscii = 27 Then 'sau KeyAscii = vbKeyEscape
Unload Me
End If
End Sub
Iar pentru a activa formularul ar trebui sa pui urmatorul cod in Sheet1
Cod: Selectaţi tot
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Dim cell As Range
Set isect = Application.Intersect(Target, Range("rngSplit"))
If isect Is Nothing Then
frmText.Hide
Else
'Initializare cu valoarea actuala a rangeului (daca exista)
cSplit = ""
For Each cell In Range("rngSplit")
cSplit = cSplit & cell.Value
Next cell
frmText.txtSplit.Value = cSplit
frmText.Show
frmText.txtSplit.SetFocus
End If
End Sub
Si fisierul "complet":
Re: Un (1) caracter/celula; o imposibilitate?
Scris: Vin Apr 09, 2010 10:41 am
de smcsa
RAMBO scrie:Adica fara ENTER dupa fiecare caracter, pentru ca ar trece la urmatorul rind si se intinde pe verticala.
La
Excel Options - Advanced - Editing Options ai
After pressing Enter, move selection si alegi de acolo ce vrei (informatia doar ca sa stii ca se poate si altceva decat pe coloana in jos)
Re: Un (1) caracter/celula; o imposibilitate?
Scris: Lun Apr 12, 2010 8:21 am
de RAMBO
Nu stiam ca se numeste eveniment "onkey", dar exact la asta faceam referire. Oricum in lipsa acestuia merge foarte bine si varianta cu VBA. Multumesc.
Re: Un (1) caracter/celula; o imposibilitate?
Scris: Lun Apr 12, 2010 5:50 pm
de Dr.Windows
RAMBO scrie:Nu stiam ca se numeste eveniment "onkey", dar exact la asta faceam referire. Oricum in lipsa acestuia merge foarte bine si varianta cu VBA. Multumesc.
Cu placere... chiar daca evenimentul nu se numeste neaparat "OnKey"... depinde de aplicatie... la unele chiar asa se cheama... On Key, la altele On KeyPress (cum este si in evenimenul folosit in textbox-ul din exemplul de mai sus:
txtSplit_KeyPress), etc... dar "pe acolo"...