View Full Version : [Vba Excel] Attivare cella il cui carattere iniziale e' Y
mauimaui4
17-08-2010, 21:24
Salve.
lavoro con vba di excel 2003
E' da un po di tempo che mi sto cimentanto con questo problema in sostanza devo crearmi una macro (partendo da una UserForm con Combobox che visualizza le lettere dell'alfabeto) in cui solo sulla colonna A effettui una ricerca che attivi,ad esempio scegliendo da combobox la lettera B, la cella della colonna A che abbia come carattere iniziale la lettera B che magari contiene il testo Berardi.
In sostanza ho migliaia di nomi che sono spesso tutti uguali ma ordinati alfabeticamente, ogni volta che ne devo aggiungere uno o cambiare i connotati a qualche cristiano devo scrollare per kilometri il foglio excel, ora pedestremente ho creato una nuova colonna di indice che ha una lettera posta in corrispondenza del primo nome avente una lettera iniziale nuova cerco quella lettera sulla colonna relativa e il cursore va sulla riga di quel nome.
Vorrei togliermi dalle scatole quella brutta colonna di indice.
Sto lavorando con l'istruzione
Alphabetic_Column.Find(What:=Find_String).Activate
:muro:
Ma chiaramente cosi' non intercetta il carattere iniziale della cella, ma il carattere comunque contenuto nel valore della cella
ho provato con
For Each ce In Range("A:A")
If ce = "Y" Then .....
Next ce
:doh:
Non so se e come si puo' fare un left(range..) un left di ogni valore del range, attivando poi solo la prima cella che soddisfa la condizione.
:mc:
:help: ... Help Me Please..... :help:
Questo il codice della Form fino ad ora elaborato.
Private Sub GO_General_Choice_Letter__Button_Click()
Dim Alphabetic_Column As Range
Dim Find_String As String
Dim Fix_Part As String
Fix_Part = "°"
Set Alphabetic_Column = Range("A:A")
If Alphabetic_Menu__CMBox = "" Then
'MsgBox "Please First Choice Letter And Then Press GO Button"
GoTo Back
End If
Find_String = (Alphabetic_Menu__CMBox)
Alphabetic_Column.Find(What:=Find_String).Activate
Back:
End Sub
Estratto Base dati.
Gigliola .. Emanuele
Mariano .. luca____(alla ricerca con la lettera M vorrei che si attivasse questa cella)
Mariano .. Antonio
Mariano .. Giovanni
Mariano .. Lucilla
Mariano .. Cristina
Martino .. Lucia
Martino .. Silvano
Martino .. Angela
Marcelli .. Alfonso
Naeri .. Antonio____(alla ricerca con la lettera N vorrei che si attivasse questa cella)
Nardi .. Luca
Nardi .. Giuseppe
Nardi .. Cristiano
Paoli .. Paoletta____(alla ricerca con la lettera P vorrei che si attivasse questa cella)
Paoli .. Francesco
Paoli .. Giulia
:::::::::
ecc...
:::::::::
10 righe e passa la paura (con il trucco) :)
mauimaui4
18-08-2010, 15:05
10 righe e passa la paura (con il trucco) :)
Intanto grazie, ho aperto il file e ho notato che il trucco funziona.
Appena avro' tempo implementero' la routine sul mio foglio.
Ma se ti va, e ti scappa un po di tempo, una spiegazionicina sull'astruso codice sarebbe gradita.
:cry: ;) :cry:
Vorrei domandarti un po di cose, ma non saprei da dove cominciare metto qui qualche spunto.
-Sub Punta(a$)
-If Left$(v(i, 1), 1) = a$ Then
-Ma che vuol dire = a$
+Const II = 10000 '''(Che e' sto 10000)
+v = .Range(.Cells(irow, icol), .Cells(irow + II - 1, icol))
+irow + II '''-- cosa e' come si costruisce la variabile da sto range???
(Ho Timore...... non pensavo di essere bravo in vba, Eppure fino ad oggi, non ero proprio digiuno di vba amatoriale :ciapet: )
Comunque grazie.
diciamo che è vecchia scuola :cool:
a$ è una variabile dichiarata implicitamente stringa col suffisso $ (%=integer, &=long integer, !=single precision, #=double) e contiene la lettera chiave
II=10000 è il massimo numero di righe "spazzolate", puoi estenderlo fino "alla fine dei mondi" ossia 65000 e rotti.
Il trucco è proprio in v= ecc.
Statement : in Excel-VBA per grandi quantità di dati E' VIETATO leggere o scrivere direttamente da foglio pena tempi lunghi: bisogna passare da matrici 2D variant intermedie.
Beh, allora se ti facessi vedere un po' di effetti speciali con CodeModule ... :sborone:
P.S.
Ah okkio al codice in Sheet1.ChangeValue
...
Non so se e come si puo' fare un left(range..) un left di ogni valore del range, attivando poi solo la prima cella che soddisfa la condizione.
:mc:
:help: ... Help Me Please..... :help:
...
Era la cosa più semplice del mondo, tra l'altro.
Ammesso che la colonna da controllare sia [A:A] :
Private Sub ComboBox1_Change()
Dim R As Range
For Each R In Sheets("Foglio1").Range("A:A")
If R.Text = "" Then Exit For
If R.Text Like ComboBox1.Text & "*" Then
R.Select
Exit For
End If
Next R
End Sub
Si può fare tutto con l'operatore Like, disponibile "alla Sql" nel set di comandi base di VBA per tutti i valori String e Variant. Comodo no ? ;)
Altra cosa : EVITARE le dichiarazioni implicite.
&, %, #, e compagnia sono retaggio di VB veramente antico. Inoltre rendono il codice, se complesso, davvero illeggibile. "Dim s As String" è infinitamente meglio che usare $. E vedrete che non vi consumate le dita... :p
i codici, quelli seri, deveno essere corti e girare veloci.
ed il mio è più veloce del tuo (prova su diciamo una decina di fogli di dati pieni).
le dichiarazioni implicite vanno bene ed anzi così come in Fortran (altro genere :cool: ) tutte le variabili i,j,k sono intere e TUTTE le altre double (con le dovute eccezioni).
la leggibilità può e deve andare a f.
P.S.
se non sai delle funzioni matrix like e mooolte altre cose I suppose, non devi prendere di aceto. ;)
i codici, quelli seri, deveno essere corti e girare veloci.
ed il mio è più veloce del tuo (prova su diciamo una decina di fogli di dati pieni).
Sub Punta(a$)
Const II = 10000
Dim v As Variant
With Worksheets("Sheet1")
irow = .Range("d_Pivot").Row - 1
icol = .Range("d_Pivot").Column
v = .Range(.Cells(irow, icol), .Cells(irow + II - 1, icol))
For i = 1 To II
If Left$(v(i, 1), 1) = a$ Then
.Cells(irow + i - 1, icol).Activate
Exit Sub
End If
Next i
End With
End Sub
:rotfl:
E tu questa schifezza la chiami "codice serio" ?!
Rimettici le mani - o chiedi al tuo povero "cliente" di metterci le mani - dopo un mesetto da che l'hai scritta, e poi... sparatevi ! :D
Vai nella guida VBA di Excel e lì troverai un esempio molto simile al mio, con For Each, e l'uso di Like.
le dichiarazioni implicite vanno bene ed anzi così come in Fortran (altro genere :cool: ) tutte le variabili i,j,k sono intere e TUTTE le altre double (con le dovute eccezioni).
E resta con Fortran. Sicuramente lo conosci molto meglio che VB.
Le dichiarazioni implicite sono robetta da VB4, massimo VB5. Vanno bene per codici compatti, o all'interno di Subs o Functions limitate. Una dichiarazione esplicita inoltre abitua già al passaggio a VB.NET, tanto per dire. Dichiarazioni implicite in VB.NET comportano la censura, nonchè l'amputazione delle mani, non lo sai ? :D
la leggibilità può e deve andare a f.
Significa ?
Andare a quel paese ?
La leggibilità del codice ?! Ma DOVE vivi ? :D
Ma MAI, e poi MAI. La leggibilità è garanzia di riutilizzabilità, ed è TUTTO. E soprattutto in un linguaggio come VBA, procedurale, basato e non orientato agli oggetti. E se non sai questo, torna a scuola.
se non sai delle funzioni matrix like e mooolte altre cose I suppose, non devi prendere di aceto. ;)
Non capisco l'atteggiamento vagamente "aggressivo". :p
Ho postato una soluzione alternativa, non pretendo certo sia l'unica, e ti faccio notare che chi ha aperto il thread ha parlato di ComboBox su UserForm, non di quella specie di filtro su Foglio che hai fatto tu.
Più che andare in aceto, sono abbastanza divertito. :D :p
E' da un po di tempo che mi sto cimentanto con questo problema in sostanza devo crearmi una macro (partendo da una UserForm con Combobox che visualizza le lettere dell'alfabeto) in cui solo sulla colonna A effettui una ricerca che attivi,ad esempio scegliendo da combobox la lettera B, la cella della colonna A che abbia come carattere iniziale la lettera B che magari contiene il testo Berardi.
...
Sto lavorando con l'istruzione
Alphabetic_Column.Find(What:=Find_String).Activate
:muro:
Ma chiaramente cosi' non intercetta il carattere iniziale della cella, ma il carattere comunque contenuto nel valore della cella
...
E qui invece la tecnica usando il metodo Find.
Poniamo di avere migliaia di nomi in colonna A su Foglio1.
Anzitutto, affinchè Find funzioni correttamente, è necessario selezionare la prima cella utile nel Range di ricerca, nel nostro caso A1 su colonna [A:A], perciò :
Private Sub UserForm_Initialize()
Sheets("Foglio1").Range("A1").Activate
End Sub
A questo punto il codice per la ComboBox è semplicissimo :
Private Sub ComboBox1_Change()
Dim iniziale As String
iniziale = ComboBox1.Text
On Error Resume Next
Sheets("Foglio1").Range("A:A").Find(What:=iniziale & "*", After:=ActiveCell, LookIn:=xlValues, LookAt:=xlWhole, _
SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:=False).Activate
End Sub
Facendo un rapido test su Foglio con 60'000 voci in colonna A, la ricerca con Find risulta istantanea, perciò consiglio decisamente quest'ultima. ;)
mauimaui4
23-08-2010, 19:03
E qui invece la tecnica usando il metodo Find.
Poniamo di avere migliaia di nomi in colonna A su Foglio1.
Anzitutto, affinchè Find funzioni correttamente, è necessario selezionare la prima cella utile nel Range di ricerca, nel nostro caso A1 su colonna [A:A], perciò :
Private Sub UserForm_Initialize()
Sheets("Foglio1").Range("A1").Activate
End Sub
A questo punto il codice per la ComboBox è semplicissimo :
Private Sub ComboBox1_Change()
Dim iniziale As String
iniziale = ComboBox1.Text
On Error Resume Next
Sheets("Foglio1").Range("A:A").Find(What:=iniziale & "*", After:=ActiveCell, LookIn:=xlValues, LookAt:=xlWhole, _
SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:=False).Activate
End Sub
Facendo un rapido test su Foglio con 60'000 voci in colonna A, la ricerca con Find risulta istantanea, perciò consiglio decisamente quest'ultima. ;)
Ho postato una soluzione alternativa, non pretendo certo sia l'unica, e
ti faccio notare che chi ha aperto il thread ha parlato di ComboBox su UserForm, non di quella specie di filtro su Foglio che hai fatto tu.
Sono andato via per brevi ferie.
Intanto ringrazio tutti coloro che si sono adoperati alle risposte, In effetti ho provato il codice postato come zip e funziona bene su quel foglio.
Non ho le dovute conoscenze di VBA per commentare quella routine, tuttavia ho provato ad impementarla anche con alcuni aggiustamenti ideati in varia maniera sulla mia combobox in userform, ma niente, non so come farla funzionare :muro:
(La combobox per me e' essenziale perche' il foglio e' diviso in 2 settori una prima sezione che riguarda un argomento e da una certa cella contenete la scritta V A R I O U S contenete altri elementi quindi attivere pedestremente la cella con quella parola chiave e da li farei iniziare la routine per la seconda combobox procedendo verso il basso) spero di essermi spiegato, ma questo e' un dettaglio).
Ad ogni modo provero' appena ho un po' di tempo il codice di Marco-DoubleG
Per ora ringrazio.
Commento cosi' senza aver provato il nuovo codice da voi postato, in quaunto non sono solito aprire thread e poi sparire, come avrebbe potuo fin qui sembrare.
Grazie ancora
mauimaui4
24-08-2010, 22:03
Ho completato il codice perfettamente funzionante su una userform per due combobox visto che lo stesso foglio era diviso in 2 sezioni.
Ora avrei da chiedere dei consigli:
---1---
Ho trovato pero' dei problemi:
come puoi vedere il mio modo di programamre pedestre implica l'allungamento delle routines, in particolare si nota che:
Ho eseguito un set, per cui, Nel caso di una iniziale non trovata in nessuna cella attivo la cella avente come carattere iniziale la lettera A.
quindi faccio un set di_variabile con il find
se va male attivo cella con iniziale A
:cry:
Se va bene per attivare la cella pedestremente mi tocca rieseguiire il codice di find dopo else.
DOMANDA:
Per snellire la questione, Come faccio a evitare di fare il find 2 volte sulle stesse celle
cioe' evitando quello dopo Else attivando subito la cella buona???
Set Find_Letter = Alphabetic_Classic_Title.Find(What:=Find_String & "*", After:=ActiveCell, LookIn:=xlValues, LookAt:=xlWhole, _
SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:=False)
If Find_Letter Is Nothing Then
Find_String = "A"
Alphabetic_Classic_Title.Find(What:=Find_String & "*").Activate
Exit Sub
Else
Alphabetic_Classic_Title.Find(What:=Find_String & "*", After:=ActiveCell, LookIn:=xlValues, LookAt:=xlWhole, _
SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:=False).Activate
End If
---2---
In un caso, ho alcune (poche) celle che hanno come carattere iniziale dei numeri es.
2 Brothers on the 4th Floor
49 Ers
Come faccio a dirgli alla svelta ad es. se il valore di ComboBox vale 0 attivami la prima cella il cui carattere iniziale e' un numero qualunque da 0 9. (le celle sono formato testo se puo' interessare)
Qui le espressioni regolari come si scrivono?
con unix standard Vi sarebbe come dire
^[0-9]
:mc:
---3---
Se ricordi in passato ho scritto:
Sto lavorando con l'istruzione
Alphabetic_Column.Find(What:=Find_String).Activate
Ma chiaramente cosi' non intercetta il carattere iniziale della cella, ma il carattere comunque contenuto nel valore della cella
Per curiosita' :ciapet: nella sintassi posta da te:
Alphabetic_Classic_Title.Find(What:=Find_String & "*", After:=ActiveCell, LookIn:=xlValues, LookAt:=xlWhole, _
SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:=False).Activate
Cosa e' che permette di avere la ricerca effettuata come carattere iniziale quello della variabile Find_String e non come testo ovunque contenuto in cella e' solo il fatto di aver posto una variabile come iniziale e poi "*" che impone la ricerca con l'iniziale di quel valore?
Se avessi voluto cercare un testo la cui lettera finale fosse stata quella contenuta nella variabile End_String come avrei dovuto scrivere???
Grazieeeee.
L'aiuto di queste istruzioni e' stato prezioso :sofico:
---1---
...
DOMANDA:
Per snellire la questione, Come faccio a evitare di fare il find 2 volte sulle stesse celle
cioe' evitando quello dopo Else attivando subito la cella buona???
...
Non ho capito con esattezza il problema. In generale il Find() è velocissimo, perciò non mi preoccuperei troppo di questo.
Sicuramente il tuo codice si può migliorare...
---2---
Come faccio a dirgli alla svelta ad es. se il valore di ComboBox vale 0 attivami la prima cella il cui carattere iniziale e' un numero qualunque da 0 9. (le celle sono formato testo se puo' interessare)
"Alla svelta" non penso. Stavo cercando una wildcard da passare come argomento alla Find(), ma vedo che è una cosa macchinosa.
Prova a dare un'occhiata anche alle funzioni VLookup, HLookup, Lookup, Match, e fammi sapere...
---3---
Cosa e' che permette di avere la ricerca effettuata come carattere iniziale quello della variabile Find_String e non come testo ovunque contenuto in cella e' solo il fatto di aver posto una variabile come iniziale e poi "*" che impone la ricerca con l'iniziale di quel valore?
Se avessi voluto cercare un testo la cui lettera finale fosse stata quella contenuta nella variabile End_String come avrei dovuto scrivere???
Esatto.
Se vuoi cercare tutte le stringhe che finiscono con un carattere ( o sottostringa ) "X", basterà invertire : "*" & "X".
mauimaui4
25-08-2010, 15:45
Non ho capito con esattezza il problema. In generale il Find() è velocissimo, perciò non mi preoccuperei troppo di questo.
Sicuramente il tuo codice si può migliorare...
.
Mi pare una eresia o un'offesa all'intelligenza scrivere sta cosa:
Faccio un find lo metto in una variabile Find_letter punto -1- poi gli dico se il find non va a buon fine Rifai un find per la lettera A che sicuro ci sta.
fin qui nulla di male.
Ma se invece quel find trova una lettera buona in una delle celle allora riesegiui lo stesso find che ho appena fatto e che ha dato valore alla varibile Find_letter (punto --2--) ma stavolta il find lo esegui per attivare la cella che da esito positivo a quel find
BO???? Mi suona davvero male.
Vabbeh
Io sono Vba amatoriale vado avanti carponi e via.
'--1---
Set Find_Letter = Alphabetic_Classic_Title.Find(What:=Find_String & "*", After:=ActiveCell, LookIn:=xlValues, LookAt:=xlWhole, _
SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:=False)
If Find_Letter Is Nothing Then
Find_String = "A"
Alphabetic_Classic_Title.Find(What:=Find_String & "*").Activate
Exit Sub
Else
'--2--
Alphabetic_Classic_Title.Find(What:=Find_String & "*", After:=ActiveCell, LookIn:=xlValues, LookAt:=xlWhole, _
SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:=False).Activate
End If
"Alla svelta" non penso. Stavo cercando una wildcard da passare come argomento alla Find(), ma vedo che è una cosa macchinosa.
Prova a dare un'occhiata anche alle funzioni VLookup, HLookup, Lookup, Match, e fammi sapere...
.
Cerchero' sulla base degli spunti che mi hai dato,
Mi sembrava la cosa piu' normale del mondo poter scrivere una regular expression con un linguaggio che suole chiamarsi di programmazione del resto si usano normalmente nello unix shell script in Perl in Delphi in PHP e non so se esistono anche i C (non sono un programmatore ma un sistemista) te pareva che su mafiasoft n'ce fossero? ..... Si !!!!......
Senno' non funzianvano cosi' i grandiosi tools di Mafiasoft.
Solo per polemizzare:
questo e' uno stralcio di quanto leggo in una documentazione sull'uso di un programma che tratta anche le regular expression nei find e nelle modifiche articolate di blocchi di nomifile.
----Regular expressions are a very powerful search tool. They allow to search for complex classes of words. Regular expressions are mainly meant for professionals, but can also be useful in the office for finding certain documents (see examples below).
Regular expressions consist of normal characters and special characters, so-called meta-characters. The following characters are meta-characters or initial parts of meta-characters:
. \ ( ) [ ] { } ^ $ + * ? (-----
Esatto.
Se vuoi cercare tutte le stringhe che finiscono con un carattere ( o sottostringa ) "X", basterà invertire : "*" & "X"
.
Grazie per questa delucidazione che avevo intuito ad occhio volevo solo essere sicuro di aver capito bene, prima delle tue routine non ci sarei mai arrivato che se avessi utilizzato una variabile seguita da "*" avrebbe rispettato l'ordine in sequenza del pattern.
Grazie mille davvero per tutto.
Mi pare una eresia o un'offesa all'intelligenza scrivere sta cosa:
Faccio un find lo metto in una variabile Find_letter punto -1- poi gli dico se il find non va a buon fine Rifai un find per la lettera A che sicuro ci sta.
fin qui nulla di male.
Ma se invece quel find trova una lettera buona in una delle celle allora riesegiui lo stesso find che ho appena fatto e che ha dato valore alla varibile Find_letter (punto --2--) ma stavolta il find lo esegui per attivare la cella che da esito positivo a quel find
BO???? Mi suona davvero male.
Ma infatti E' un'eresia. :p
Questo è il tuo personale modo di approcciare il problema, e non ne vedo l'utilità. Se è un problema di gestione dell'errore ( perchè è possibile che Find() vada in errore se non trova nulla ), ce la si cava semplicemente con un GoTo. Questo è il mio codice precedente, modificato :
Private Sub ComboBox1_Change()
Dim iniziale As String
iniziale = ComboBox1.Text
On Error GoTo ERRORE
Sheets("Foglio1").Range("A:A").Find(What:=iniziale & "*", After:=ActiveCell, LookIn:=xlValues, LookAt:=xlWhole, _
SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:=False).Activate
Exit Sub
ERRORE:
MsgBox ("Nessuna occorrenza trovata. La selezione torna alla prima cella nell'intervallo di ricerca.")
Sheets("Foglio1").Range("A1").Activate
End Sub
e il gioco è fatto. Il Find() viene comunque eseguito una sola volta.
Mi sembrava la cosa piu' normale del mondo poter scrivere una regular expression con un linguaggio che suole chiamarsi di programmazione del resto si usano normalmente nello unix shell script in Perl in Delphi in PHP e non so se esistono anche i C (non sono un programmatore ma un sistemista) te pareva che su mafiasoft n'ce fossero? ..... Si !!!!......
Senno' non funzianvano cosi' i grandiosi tools di Mafiasoft.
Le Regex non sono supportate in modo nativo in VBA, del resto non lo sono nemmeno nel "papà" VB6.
Non è corretto però dire che non lo siano per niente. Ad esempio dai un'occhiata a questo file di esempio :
http://www.vbaexpress.com/kb/getarticle.php?kb_id=68
VBA è un linguaggio di programmazione basato su oggetti, non è OO. E' di notevole supporto ad applicazioni Office. Non dimentichiamo che Excel è pur sempre un foglio elettronico, e cara grazia che c'è VBA.
Trovami un foglio elettronico meglio di Excel, più completo di Excel, e con migliore supporto all'automatizzazione, e ne riparliamo.
Solo per polemizzare:
...
Infatti è solo per polemizzare. :D
Ma più che altro è questione di abitudine e di aver saputo apprezzare nel tempo quanto di buono c'è in Office e in VBA. Personalmente non passerei mai a Calc di OpenOffice ( che ho provato, trovandolo abbastanza deludente sul piano dell'automatizzazione ) o ad altri fogli elettronici.
Tornando al Find() di prima, appena ho tempo vedo di studiare una soluzione, perchè non mi pare vero che non ci sia un semplice carattere wildcard da passare in argomento come "qualsiasi_cifra_numerica[0-9]"...
mauimaui4
31-08-2010, 01:04
Non conoscevo l'istruzione --on error goto--
Con questa istruzione non mi servono piu' le espressioni regolari, questo perche' i numeri compaiono prima delle lettere alfabetiche e quindi in caso di errore attivo sempre la cella iniziale che sara' quella che inizia con i numeri.
Questo e' uno stralcio della parte centrale essenziale del codice.
Un solo find e un on_error
Main_Name_Column = "A R T I S T S"
Second_Title = "C L A S S I C A L S O U N D S"
Alphabetic_Column.Find(What:=Main_Name_Column).Activate
F_Row_M = (ActiveCell.Row + 1)
F_Column_M = ActiveCell.Column
Alphabetic_Column.Find(What:=Second_Title).Activate
Last_Find_Cell = ActiveCell
Set Alphabetic_Column_Main_Title = Range(Cells(F_Row_M, F_Column_M), Cells(L_Row_M, L_Column_M))
Find_String = Alphabetic_Menu_Main__CMBox.Text
'In caso di errore prima lettera non trovata sulla colonna anche in caso di iniziale con numero
'vado al punto Letter_Not_Found che mi attiva la cella appena sotto la barra dei titoli
On Error GoTo Letter_Not_Found
Alphabetic_Column_Main_Title.Find(What:=Find_String & "*", After:=ActiveCell, LookIn:=xlValues, LookAt:=xlWhole, _
SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:=False).Activate
Exit Sub
Letter_Not_Found:
Cells(F_Row_M + 2, F_Column_M).Select
Quanto al fatto che dicevi che per buona grazia dell'esistenza di vba si puo' automatizzare un ambiente come office; mi pare tu abbia lo stesso approccio di un mio collega programmatore C ; a cui quando mi lamentavo ad es. dell'astruso modo di passare una variabile esterna a sed
a=2;sed -n -e "${a}p"
Molto diversa poi dal modo di passarla in AWK
a="Marking Mov"; ls -l|awk '{print $5,"'”$a”'"}'
Lui mi rispondeva ringrazia il cielo che esiste un tool tanto potente come sed & awk cui puoi passare una variabile esterna cosi', e questa risposta era la kostante risposta a qualunque cosa gli dicessi.
Come tool non ho mai utilizzato niente al di fuori di excel mi dicevano che openoffice era uguale ad excel; mi sono meravigliato alquanto quando ho scoperto che le macro anche le piu' semplici non funzionavano su openoffice.
Mi pare pero' non ci sia nulla da meravigliarsi visto che microsoft ha inventato il suo vba.
Personalmente su excel ci ho fatto un sacco di cose anche quelle per cui non e' stato propriamente sviluppato; sopratutto nel trattamento testuale, alcune cose le ho potute fare solo su excel e non su Access o Sql.
Anche se di media nel trattamento testuale trovo piu' immediato e anche meno macchinoso sed egrep Awk Nawk e Vi
Ho dato una occhiata al tuo lnk sulle espressioni regolari, e' molto interessante quel file, anche se per me non e' facile orientarmici. Grazie tante per tutto l'aiuto che mi hai fonito.
Come tool non ho mai utilizzato niente al di fuori di excel mi dicevano che openoffice era uguale ad excel; mi sono meravigliato alquanto quando ho scoperto che le macro anche le piu' semplici non funzionavano su openoffice.
Mi pare pero' non ci sia nulla da meravigliarsi visto che microsoft ha inventato il suo vba.
Personalmente su excel ci ho fatto un sacco di cose anche quelle per cui non e' stato propriamente sviluppato; sopratutto nel trattamento testuale, alcune cose le ho potute fare solo su excel e non su Access o Sql.
OpenOffice, che io sappia, ha 2 linguaggi di scripting : una sorta di "Basic" ( che ho provato, trovandolo appunto deludente ), e Python ( non so se sia il vero Python, o un subset che gli somiglia, perchè non ho approfondito ).
La mia preferenza su Excel ha diverse ragioni oggettive, ( al di là di un semplice "a me piace Microsoft", come potrebbe sembrare ) come la completezza dell'interfaccia utente e delle funzioni precucinate, e su VBA basti pensare alla possibilità di estendere il set di comandi base con una pletora di dll esterne, arrivando quasi a coprire tutte le possibilità offerte da VB6.
Il paragone con Access lo condivido. Ho sempre trovato il supporto VBA di Excel come il migliore dell'intero pacchetto Office. Il paragone con Sql non l'ho capito... :stordita: :D
vBulletin® v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.