|
Rank: AiutAmico
Iscritto dal : 9/20/2004 Posts: 1,597
|
Ciao, ho fatto una macroche per funzionare necessita che l'utente abbia prima fatto una selezione. Per evitare errori a runtime ho messo un controllo per vedere se la selezione è stata fatta (in pratica sto scrivendo il VBA come se fosse il python che conosco meglio ): Code:If Not Selection Then a = MsgBox("you have to select the area to format", vbInformation, "Attention!") Exit Sub End If il problema è che alla prima linea mi da errore di runtime '13': Tipo non corrispondente. cosa devo mettere di preciso? Grazie. Sono cosi avanti che quando guardo indietro vedo il futuro.
|
|
|
|
|
Rank: AiutAmico
Iscritto dal : 5/29/2003 Posts: 1,694
|
salve stiamo parlando di excel?? una cella selezionata ci sarà sempre nel foglio. Se la tua intenzione è quella che sia selezionato un determinato range, prova con queste istruzioni: Miaselezione = "$A$1:$C$10" If Selection.Address <> Miaselezione Then a = MsgBox("you have to select the area to format", vbInformation, "Attention!") Exit Sub End If il codice sopra controlla che sia selezionata l'area A1:C10 saluti Giap
|
|
Rank: AiutAmico
Iscritto dal : 9/20/2004 Posts: 1,597
|
Purtroppo la selezione non è sempre la stessa, però una condizione sufficiente sarebbe già quella di lanciare la macro se ci sono almeno 2 o più celle selezionate (significa che l'utente ha fatto una selezione volontaria). Qualcosa del tipo (sto inventando, non conosco gli attributi di Selection): If Selection.size > 1 then mia_subroutine_di_formattazione() end if Sono cosi avanti che quando guardo indietro vedo il futuro.
|
|
Rank: AiutAmico
Iscritto dal : 5/10/2010 Posts: 723
|
Ciao, chiedo scusa se m'intrometto, ma la mia curiosità in questa affascinante materia è tale che non riesco a starne fuori :)).....quel codice dove va inserito, nel modulo " ThisWorkbook" già visto? Grazie e Buona giornata, eZio
|
|
Rank: AiutAmico
Iscritto dal : 9/20/2004 Posts: 1,597
|
Normalmente il codice sta in un modulo a parte, così è più gestibile e riutilizzabile. Almeno, io faccio così. Sono cosi avanti che quando guardo indietro vedo il futuro.
|
|
Rank: AiutAmico
Iscritto dal : 5/29/2003 Posts: 1,694
|
dead ha scritto:Purtroppo la selezione non è sempre la stessa, però una condizione sufficiente sarebbe già quella di lanciare la macro se ci sono almeno 2 o più celle selezionate (significa che l'utente ha fatto una selezione volontaria). Qualcosa del tipo (sto inventando, non conosco gli attributi di Selection):
If Selection.size > 1 then mia_subroutine_di_formattazione() end if
salve la sintassi è questa: If Selection.Cells.Count>1 then saluti Giap
|
|
Rank: AiutAmico
Iscritto dal : 9/20/2004 Posts: 1,597
|
grazie Giap! P.S. ma perchè se in VBA scrivo Selection. dopo il punto non appare la finestra a cascata delle proprietà? Per alcuni oggetti appare, per altri no. Non ho capito bene il perchè... Sono cosi avanti che quando guardo indietro vedo il futuro.
|
|
Rank: AiutAmico
Iscritto dal : 5/29/2003 Posts: 1,694
|
dead ha scritto:grazie Giap!
P.S. ma perchè se in VBA scrivo Selection. dopo il punto non appare la finestra a cascata delle proprietà? Per alcuni oggetti appare, per altri no. Non ho capito bene il perchè... salve la differenza sta nel fatto che "Selection" è una proprietà le proprietà che vedi elencate come suggerimento, fanno riferimento agli oggetti. es. se digiti Range(x). dopo il punto ti vengono elencate tutte le proprietà dell'oggetto Range saluti Giap
|
|
Rank: AiutAmico
Iscritto dal : 9/20/2004 Posts: 1,597
|
a10n11 ha scritto: la differenza sta nel fatto che "Selection" è una proprietà
Selection .Cells.Countuna proprietà che ha a sua volta delle proprietà e dei metodi? Mah, le regole del buon Bill sono sempre misteriose... Sono cosi avanti che quando guardo indietro vedo il futuro.
|
|
Rank: AiutAmico
Iscritto dal : 5/29/2003 Posts: 1,694
|
dead ha scritto:a10n11 ha scritto: la differenza sta nel fatto che "Selection" è una proprietà
Selection .Cells.Countuna proprietà che ha a sua volta delle proprietà e dei metodi? Mah, le regole del buon Bill sono sempre misteriose... salve dead la tua perplessità mi ha incuriosito e indagando mi sono accorto di aver dato una risposta senza senso. andando a curiosare nel visualizzatore oggetti, la proprietà Selection è definita come "As Object" cioè come oggetto non definito, potrebbe essere di tipo Range, come di tipo Chart oppure di qualsiasi oggetto selezionato nel foglio. Non sapendo a che tipo di oggetto riferirsi non può mostrarti nè i metodi nè le proprietà. se avessimo scritto: Sub dd() Dim area As Range Set area = Selection area.Cells.Count Set area = Nothing End Sub il punto dopo area ti avrebbe mostrato metodi e proprietà perchè la selection è stata definita di tipo range. spero di non avre fatto ulteriore confusione. saluti Giap
|
|
Rank: AiutAmico
Iscritto dal : 9/20/2004 Posts: 1,597
|
hmm ecco dov'era l'inghippo! Beh allora c'è ancora speranza anche per lo zio Bill :D perfetto e preciso come sempre. Grazie Sono cosi avanti che quando guardo indietro vedo il futuro.
|
|
Guest |