sempre range su Excel



  • sempre range su Excel
    di orsomiki data: 15/01/2013 19:34:16

    eccomi di nuovo con il solito problema
    range di excel e stavolta spero di poter essere pi˘ chiaro

    nel file allegato devo ri-definire con il codice ( e non a mano)
    le righe e colonne che partono dalla cella AA12 denomiata
    inizioareats
    in sintesi mi interessa ri nominare le colonne AA AB AC
    soltanto e le relative righe sottostasnti e non le colonne Z Y X W

    se dovessi andare in AA12 e usare currentregion MI PRENEDEREBBE ANCHE QUELLE

    io ho usato un escamotage che trovi nel modulo 7 ( e anche nel codice allegato)
    volevo chiedere se c'Ë un modo pi˘ funzionale ed elegante, se vuoi, per
    fare questa operazione

    con questo sistema poi ri - definirei di volta in volta tutte le altre aree in modo automatico col solo lancio di un codice

     
    Sub rinominaareats()
    '
    
    
        Application.Goto Reference:="inizioareats"
        Range(Selection, Selection.End(xlToRight)).Select
        Range(Selection, Selection.End(xlDown)).Select
        ActiveWorkbook.Names.Add Name:="areats", RefersToR1C1:= _
            "=Sheet1!R12C27:R135C29"
        Application.Goto Reference:="inizioareats"
    End Sub



  • di HarryBosch data: 15/01/2013 20:44:14

    Qualcosa non va in questo codice:
    ti riferisci all'intervallo "inizioareats" ma poi crei un nuovo intervallo nominato "areats" assegnando un intervallo già stabilito ("=Sheet1!R12C27:R135C29") e poi torni all'intervallo di partenza... ?

    Se devi aggiungere nuovo intervallo, basta una istruzione:
    ActiveWorkbook.Names.Add Name:="Nuovo_intervallo", RefersToR1C1:=Range("aa12:ac60")

    Mentre se vuoi modificare un intervallo già esistente, puoi riferirti ad esso in questo modo (e volendo puoi cambiargli nome):
    With ActiveWorkbook.Names("inizioareats")
    '.Name = "inizioareats" 'se vuoi cambiare il nome
    .RefersToR1C1 = Range("aa12:ac" & Cells(Rows.Count, "w").End(xlUp).Row)
    End With

    In quest'ultimo modo il riferimento sarà dinamico perché l'intervallo inizierà dalla cella aa12 fino all'ultima cella occupata della colonna ac. Questa istruzione
    Cells(Rows.Count, "w").End(xlUp).Row
    determina l'ultima cella occupata della colonna w; non prendo come riferimento la colonna ac perché all'interno
    sono inserite delle formule e l'ultima cella corrisponderebbe all'ultima formula inserita, mentre la colonna w contiene soltanto i dati, in particolare dati obbligatori. In questo modo sono sicuro di conoscere l'ultima riga buona.


  • sempre range su excel
    di orsomiki data: 15/01/2013 21:52:05

    considera che io mi muovo da neofita nel VBA per excel e faccio una fatica del diavolo a fare tutto e qualche volta mi devo arrangiare...
    perchè è uscito questo codice che ho scritto?
    areats è variabile di mese in mese in num di righe e in num di colonne ( al max 6 colonne)
    allora io come procedo?
    il file p.e. di dicembre lo salvo col nome gennaio lo svuoto dei dati e ci carico i nuovi dati di gennaio (scaricati da un main frame)
    sono quelli che si vedono a partire dalla colonna A

    ebbene quando ho i dati di gennaio non so quante righe avrò e quante colonne ma collocherò sempre i dati a partire dalla cella definita "inizioareats"

    al momento ri definisco "areats" a mano con namemanager

    per automatizzare il tutto uso il codice che ho scritto io
    cioè vado alla cella "inizioareats" e da lì con
    Range(Selection, Selection.End(xlToRight)).Select
    Range(Selection, Selection.End(xlDown)).Select
    ri seleziono il nuovo "areats"
    ecco perchè ho chiesto se c'è un modo più "consono" per fare questo automatismo

    lo stesso concetto lo userò con tutte le altre arre o range

    tu giustamente mi dici
    ti riferisci all'intervallo "inizioareats" ma poi crei un nuovo intervallo nominato "areats" assegnando un intervallo già stabilito ("=Sheet1!R12C27:R135C29") e poi torni all'intervallo di partenza... ?

    in relatà che cosa è successo ?
    io per provare il codcie da me scritto l' ho fatto girare per provare ed è nato areats che prima NON esisteva
    ecco perchè spero di essere stato esauriente

    con il codice che mi hai fornito penso di aver risolto lo provo e poi ti dico
    ma lo devo provare al lavoro
    poichè a casa ho Mac e questo Excel Non gira
    grazie cmq








  • di Vecchio Frac data: 16/01/2013 14:30:12

    cit. " poichè a casa ho Mac e questo Excel Non gira "
    ---> Forse problemi di compatibilità coi i formati? o con alcune funzioni del foglio di lavoro?
    No, perchè non c'è nel codice proprio niente di particolare o legato a un sistema PC piuttosto che Mac.
    Invece il codice è eccessivamente granulato (troppi moduli), si rischia di perdere il filo (raggruppa in moduli simili il codice che fa operazioni simili).




  • sempre range su Excel
    di orsomiki data: 16/01/2013 19:26:58

    va bene provato il codice è ok ...
    domanda "avrebbe potuto essere anche la colonna z ( invece della colonna w)come riferimento per Range("aa12:ac" & Cells(Rows.Count, "w").End(xlUp).Row)

    anche essa la colonna z contiene dati obbligatori ....
    e se devo rinominare per esempio l'area nome uso lo stesso sistema
    ma con il seg codice


    With ActiveWorkbook.Names("nome")
    .Name = "nome"
    .RefersToR1C1 = Range("p12:p" & Cells(Rows.Count, "a").End(xlUp).Row)
    End With

    mettendogli come riferimento la colonna a
    oppure c'è un altro tipo di istruzione?
    Grazie!

    p.s. ho acquistato il libro
    Excel e Office VBA
    Autore: Giaccaglini
    Hoepli

    è un pò prolisso anche se è chiaro e a volte mi ci perdo hai qualcosa da consigliare di più pratico


  • sempre range su excel
    di orsomiki data: 16/01/2013 19:29:13

    dimenticavo
    non ci sono problemi di compatibilità
    ma a casa avendo Mac sono costretto ad usare LibreOffice per vedere i file Excel e
    usando questo tool NON posso vedere ( o non so come si fa) i modules con scritto il codice



  • di Vecchio Frac data: 16/01/2013 19:47:45

    Non c'è qualcosa tipo VirtualBox per Mac?
    Non credo che LibreOffice (OpenOffice) sia completamente compatibile, anche se supporta Python e questo mi riempirebbe di gioia :)




  • sempre range su Excel
    di orsomiki data: 16/01/2013 19:56:35

    confesso che non lo so ...... so che c'è un "coso" che si chiama Bootcamp che emula Windows su Mac ma non mi sono mai interessato ... non so come sia Windows 7 ma ... avendo avuto Microsoft per 20 anni
    mi sono stufato con l'era Mac ho trovato qualcosa di diverso ( studio musica e canto) per tale ragione ho un IMac desktop
    e un Mac Book pro e mi trovo soddisfatto



  • di Vecchio Frac data: 16/01/2013 21:16:27

    Fortunato te... ti invidio un pochino ^_^
    Comunque dovrebbe esserci un software di virtualizzazione anche per Mac, sul quale installare un XP Live e farci girare un Excel nudo e crudo solo per i tuoi esperimenti.
    Per il resto, +1 a tutto il tuo armamentario Mac :)




  • sempre range su Excel
    di orsomiki data: 17/01/2013 18:18:12

    mi puoi dire se il codice allegato è giusto ?
    funziona ma non sono sicuro sia corretto
    fa parte della medesima discussione
    in data
    16/01/2013 19:26:58
     
    With ActiveWorkbook.Names("nome") 
    .Name = "nome" 
    .RefersToR1C1 = Range("p12:p" & Cells(Rows.Count, "a").End(xlUp).Row) 
    End With 
    



  • di Vecchio Frac data: 17/01/2013 18:42:44

    Non lo so... se fa quello che ti aspetti vuol dire che è giusto :)
    Dovrebbe estendere il range "nome" da P12 a P(ultima cella del foglio) e poi da P12 alla prima cella non vuota.
    Mi sembra superfluo quel
    .Name = "nome"
    perchè ti riferisci a un range che ha già quel nome.