Un (1) caracter/celula; o imposibilitate?

Informatii despre cum se utilizeaza Microsoft Excel 2007. Calcule, Formule, Functii, Tabele pivot, Analiza datelor, etc

Un (1) caracter/celula; o imposibilitate?

Mesajde RAMBO » Joi Apr 08, 2010 1:08 pm

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
Nu aveţi permisiunea de a vizualiza fişierele ataşate acestui mesaj.
Ultima oară modificat de Anonymous pe Joi Apr 08, 2010 1:11 pm, modificat de 2 ori în total.
Motiv: Adaugare tag CODE si rectificare cod
RAMBO
 
Mesaje: 388
Membru din: Mie Noi 25, 2009 2:17 pm
Localitate: Pitesti

Re: Un (1) caracter/celula; o imposibilitate?

Mesajde Dr. Cloud » Joi Apr 08, 2010 4:13 pm

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?
Nu aveţi permisiunea de a vizualiza fişierele ataşate acestui mesaj.
Dr. Cloud
 
Mesaje: 3329
Membru din: Mar Oct 02, 2012 11:19 am

Re: Un (1) caracter/celula; o imposibilitate?

Mesajde Dr.Windows » Joi Apr 08, 2010 8:00 pm

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":
Nu aveţi permisiunea de a vizualiza fişierele ataşate acestui mesaj.
Dr.Windows
Site Admin
Site Admin
 
Mesaje: 4493
Membru din: Vin Iul 31, 2009 7:32 am

Re: Un (1) caracter/celula; o imposibilitate?

Mesajde smcsa » Vin Apr 09, 2010 10:41 am

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)
smcsa
 
Mesaje: 2805
Membru din: Mar Sep 29, 2009 7:29 pm
Localitate: Timisoara

Re: Un (1) caracter/celula; o imposibilitate?

Mesajde RAMBO » Lun Apr 12, 2010 8:21 am

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.
RAMBO
 
Mesaje: 388
Membru din: Mie Noi 25, 2009 2:17 pm
Localitate: Pitesti

Re: Un (1) caracter/celula; o imposibilitate?

Mesajde Dr.Windows » Lun Apr 12, 2010 5:50 pm

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"... ;)
Dr.Windows
Site Admin
Site Admin
 
Mesaje: 4493
Membru din: Vin Iul 31, 2009 7:32 am


Înapoi la Intrebari despre Excel 2007

Cine este conectat

Utilizatorii ce navighează pe acest forum: Niciun utilizator înregistrat şi 4 vizitatori