Jump to content

SUBIECTE NOI
« 1 / 5 »
RSS
Imprimanta ciss rezista perioade ...

Garmin fēnix 7 / PRO / Saphi...

Care sunt cele mai mari regrete a...

Alfa Romeo Stelvio 2.2 jtd
 Intrebari srl nou

La multi ani @AndReW99!

Alegere masina £15000 uk

TVR vrea sa lanseze o platforma d...
 Strategie investie pe termen lung...

Modulator FM ptr auto alimentat p...

orange cablu f.o. - internet fara...

Robinet care comuta traseul
 A fost lansata Fedora 40

Samsung S24 plus

Imi iau un Dell? (Vostro vs others)

Abonati Qobuz?
 

Auto Complete cu sugerare date

- - - - -
  • Please log in to reply
7 replies to this topic

#1
kharloss

kharloss

    Junior Member

  • Grup: Members
  • Posts: 65
  • Înscris: 21.04.2004
Salut . I-mi trebuie un macro  ca acesta :

http://puremis.net/e.../code/041.shtml

sa faca acelasi lucru. Numai ca acel macro nu functioneaza .
Nu i`mi dau seama  unde e greseala.
Multumesc anticipat.

Aici script :
-------------------------------------------------
Option Explicit

Dim i As Long

Sub KeyEventOn()
	For i = 65 To 90
		Application.OnKey "{" & i & "}", "'MyValidation """ & i & """'"
	Next
End Sub
Sub KeyEventOff()
	For i = 64 To 90
		Application.OnKey "{" & i & "}"
	Next
End Sub
Sub MyValidation(ByVal KeyCode As Long)
	Dim strText As String, strList As String
	If Not TypeOf Selection Is Range Then Exit Sub

	strText = Selection.Value & Chr(KeyCode)
	strList = MakeArr(strText)
	Selection.Value = strText
	If strList = "False" Then
		Selection.Validation.Delete
	Else
		With Selection.Validation
			.Delete
			.Add 3, 1, 1, Formula1:=strList
			.IgnoreBlank = True
			.InCellDropdown = True
			.ShowInput = True
		End With
	End If
End Sub

Function MakeArr(ByVal strChr As String) As String
	Dim a As Variant
	a = [MyList].Value
	For i = LBound(a) To UBound(a)
		If InStr(1, a(i, 1), strChr, vbTextCompare) = 1 Then
			MakeArr = MakeArr & a(i, 1) & Chr(&H2C)
		End If
	Next
	If MakeArr <> "" Then
		MakeArr = Left(MakeArr, Len(MakeArr) - 1)
	Else
		MakeArr = "False"
	End If
End Function

___
mod edit:
foloseste tag-urile de cod [ codebox][ /codebox]

Edited by RAZ, 08 March 2007 - 11:00.


#2
mihaicris

mihaicris

    Junior Member

  • Grup: Members
  • Posts: 215
  • Înscris: 03.03.2003

 kharloss, on Mar 6 2007, 14:27, said:

Salut . I-mi trebuie un macro  ca acesta :

http://puremis.net/e.../code/041.shtml

sa faca acelasi lucru. Numai ca acel macro nu functioneaza .
Nu i`mi dau seama  unde e greseala.
Multumesc anticipat.
...

Salut

Am incercat codul si... functioneaza, insa nu oricum. Daca-mi spui ce eroare primesti, pot sa-mi dau seama mai cu precizie de ce nu merge.
Iata ce am crezut eu ca e important.
1. Am denumit range-ul in care se aflau valorile "MyList" asa cum spune nenea din link-ul ala (in caz ca nu ai facut-o, mie mi-a scapat prima oara).
2. lansezi KeyEventOn (nu uita sa lansezi KeyEventOff la sfarsit).
3. Aici e buba, MyValidation nu functioneaza decat pentru o lista mica de valori, altfel da eroare. La mine strList poate avea maxim 250 de caractere.

Solutii:
A. Poti sa folosesti Range-ul MyList in loc de strList, caz in care codul devine:

Option Explicit

Dim i As Long

Sub KeyEventOn()
	For i = 64 To 90
		 Application.OnKey "{" & i & "}", "'MyValidation """ & i & """'"
	Next
End Sub


Sub KeyEventOff()
	For i = 64 To 90
		Application.OnKey "{" & i & "}"
	Next
End Sub


Sub MyValidation(ByVal KeyCode As Long)
	Dim strText As String
	If Not TypeOf Selection Is Range Then Exit Sub

	strText = Selection.Value & Chr(KeyCode)
	Selection.Value = strText
		With Selection.Validation
			.Delete
			.Add 3, 1, 1, Formula1:="=MyList"
			.IgnoreBlank = True
			.InCellDropdown = True
			.ShowInput = True
		End With
End Sub


Am atasat un xls cu varianta asta.

B. Modifici MakeArr  astfel incat in loc de lista, returneaza un sub-Range format din celulele care incep cu litera tastata si numit ... subRange de exemplu.
Acest subRange il folosesti apoi in MyValidation in linia:
.Add 3, 1, 1, Formula1:="=subRange"
Asa scapi de limitarea de la pct. 3 si obtii exact functionalitatea initiala.
Deocamdata nu mai am timp sa incerc varianta asta, poate mai incolo daca nu reusesti. Oricum nu se intampla nimic spectaculos, functionalitatea e departe de autocomplete-ul de la alte programe, doar iti arata o lista de cuvinte care incep cu litera pe care ai tastat-o.


Spor,

Mihai

Attached Files



#3
kharloss

kharloss

    Junior Member

  • Grup: Members
  • Posts: 65
  • Înscris: 21.04.2004
merci. chiar daca atasamentul functioneaza cu restrictiile de care vorbeai, nu ma ajuta prea mult.Exact asta i-mi doresc. AUtocomplete.Chiar daca codul acesta nu e ok, exista o alta varianta pt. problema mea ?

#4
kharloss

kharloss

    Junior Member

  • Grup: Members
  • Posts: 65
  • Înscris: 21.04.2004
aici atasamentul cu eroarea care i-mi apare la scriptul initial.

Attached Files



#5
mihaicris

mihaicris

    Junior Member

  • Grup: Members
  • Posts: 215
  • Înscris: 03.03.2003

 kharloss, on Mar 8 2007, 10:19, said:

aici atasamentul cu eroarea care i-mi apare la scriptul initial.
Salut

La eroarea pe care o ai cred ca nu e scrisa bine linia urmatoare din KeyEventOn
Application.OnKey "{" & i & "}", "'MyValidation """ & i & """'"
Vezi pe la numarul de ghilimele " si apostrofuri '.

Diferit in codul original fata de al meu este ca in loc de intreaga lista iti afiseaza numai cuvintele care incep cu litera tastata. Numai prima litera !

Se poate si altfel, un autocomplete mai bun, de exemplu sa-ti faci o forma pe care sa pui un ComboBox si sa arati forma respectiva la KeyEventOn.
Din pacate chiar nu am timp sa fac un exemplu, mi-ar lua 1-2 ore cred si cum in prezent programul meu de lucru e 9 - 21 crede-ma ca nu mai vad decat "papa" si "nani" cand ajung acasa    :(

Poate pe duminica...

#6
mihaicris

mihaicris

    Junior Member

  • Grup: Members
  • Posts: 215
  • Înscris: 03.03.2003

 kharloss, on Mar 7 2007, 15:47, said:

merci. chiar daca atasamentul functioneaza cu restrictiile de care vorbeai, nu ma ajuta prea mult.Exact asta i-mi doresc. AUtocomplete.Chiar daca codul acesta nu e ok, exista o alta varianta pt. problema mea ?

Am reusit sa fac un fisier de exemplu cu un ComboBox, am folosit si codul de mai sus.

Cum functioneaza:

Dictionarul de cuvinte este in sheet-ul "dictionar", coloana A, trebuie sa fie gata sortata.
Introducerea se poate face in orice celula din primul sheet.
La deschiderea fisierului se ruleaza automat codul din vechiul exemplu, cel cu OnKey, se vede la ThisWorkbook - procedura Workbook_Open. Astfel nu mai e nevoie de lansarea KeyEventOn. Daca este totusi nevoie sa nu porneasca automat, se poate reface procedura in modulul 1.

La tastarea unei litere, apare o forma cu un ComboBox in care se regasesc cuvintele, se face scroll pana la primul cuvant care incepe cu litera tastata.
Forma apare in zona celulei active din sheet.
La tastarea urmatoarelor litere se parcurge lista din ComboBox si se selecteaza cuvantul potrivit.
Cu sagetile se pot selecta cuvintele potrivite din lista.
La ENTER se completeaza celula activa cu valoarea selectata din ComboBox.
La ESC se ascunde forma fara a se completa nimic in celula activa.


Limitari:
  • Nu merge cu cuvinte care au initiala litera mare, trebuie schimbata procedura MyValidation daca este cazul.
  • Intreaga lista de cuvinte se incarca in ComboBox la initializarea formei, in exemplu sunt peste 1.000, ar putea aparea probleme la PC-uri mai slabe si liste de cuvinte mari. Avantajul e ca se incarca numai o data in UserForm_Initialize, daca vreau sa o incarc numai cu cuvintele care incep cu litera tastata ar trebui sa o fac de fiecare data in UserForm_Activate
  • La tastarea primei litere numai aceasta apare in ComboBox, nu se completeaza cu cuvantul potrivit decat incepand cu a doua litera.
  • Nu functioneaza bine decat pe monitorul principal in cazul sistemelor cu mai multe monitoare.
  • Altele de care nu mi-am dat seama inca :)
Poti aduce orice modificari crezi de cuviinta ptr. a-ti folosi cat mai bine.
Succes.

Attached Files



#7
kharloss

kharloss

    Junior Member

  • Grup: Members
  • Posts: 65
  • Înscris: 21.04.2004
Extraordinar. Chiar nu credeam ca o sa ma ajute cineva la modul asta.
Multumesc mult.

#8
DigitalMaster

DigitalMaster

    Member

  • Grup: Members
  • Posts: 354
  • Înscris: 18.02.2007
Hristos a inviat! si Paste fericit tuturor!  :D

Anunturi

Chirurgia cranio-cerebrală minim invazivă Chirurgia cranio-cerebrală minim invazivă

Tehnicile minim invazive impun utilizarea unei tehnologii ultramoderne.

Endoscoapele operatorii de diverse tipuri, microscopul operator dedicat, neuronavigația, neuroelectrofiziologia, tehnicile avansate de anestezie, chirurgia cu pacientul treaz reprezintă armamentarium fără de care neurochirurgia prin "gaura cheii" nu ar fi posibilă. Folosind tehnicile de mai sus, tratăm un spectru larg de patologii cranio-cerebrale.

www.neurohope.ro

0 user(s) are reading this topic

0 members, 0 guests, 0 anonymous users

Forumul Softpedia foloseste "cookies" pentru a imbunatati experienta utilizatorilor Accept
Pentru detalii si optiuni legate de cookies si datele personale, consultati Politica de utilizare cookies si Politica de confidentialitate