Condividi tramite

Passare intervallo a macro vba excel

Anonimo
2017-05-25T17:45:03+00:00

Ciao a tutti,

è sicuramente una sciocchezza ma non riesco a farlo.

Vorrei richiamare una Sub passandogli la variabile "intervallo" dimensionata come Range,

è possibile ? 

Ho provato con Call e senza ma da sempre errore.

Grazie in antiicipo.

Tullio

Microsoft 365 e Office | Excel | Per la casa | Windows

Domanda bloccata. Questa domanda è stata eseguita dalla community del supporto tecnico Microsoft. È possibile votare se è utile, ma non è possibile aggiungere commenti o risposte o seguire la domanda.

0 commenti Nessun commento

Risposta accettata dall'autore della domanda

Anonimo
2017-05-28T18:10:34+00:00

Ciao Tullio,

grazie della routine che funziona alla perfezione come sempre,e l'errore dipendeva  fatto che non avevo dichiarato Pubblica la routine.

Poi però il mio Range è variabile ad eccezione della prima cella che è sempre "A4", al momento "A4":"J7"

Ho provato a sostituire il tuo "A1":"D10" con Range("A4").CurrentRegion però da errore  e mi chiede la costante.

Passando col cursore su Const sIntervallo As string,  lo scrive così : "A4J7" anziché "A4":"J7"

Questa è la sub che legge l'intervallo 

______________________________________ 

Public Sub LeggeTabella()

Dim intervallo As Range

Sheets("Scadenze").Select

RimuoviProtezioneFoglioScadenze

Set intervallo = Range("A4").CurrentRegion

intervallo.CurrentRegion.Select                  'mi serviva solo per accertarmi che                                                                     la tabella sia tutta selezionata

 Call Macro2(intervallo)                             ' qui richiamo la tua Demo

 ProteggiFoglioScadenze

 End Sub

_____________________________________

Devo lavorare sul trasformare l'intervallo in stringa ?

Prova la seguente modifica della mia routine Demo:

'=========>>

Option Explicit

'--------->>

Public Sub Demo()

    Dim WB As Workbook

    Dim SH As Worksheet

    Dim Rng As Range

    Const sFoglio As String = "Scadenze"                         '<<=== Modifica

    Const sIntervallo As String = "A4"                               '<<=== Modifica

    Set WB = ThisWorkbook

    Set SH = WB.Sheets(sFoglio)

    Set Rng = SH.Range(sIntervallo).CurrentRegion

    Call AddBorders(Rng)

End Sub

'--------->>

Public Sub AddBorders(aRng As Range)

    Dim ArrBorders As Variant

    Dim i As Long

    With aRng

        ArrBorders = Array(.Borders(xlEdgeLeft), _

                           .Borders(xlEdgeTop), _

                           .Borders(xlEdgeBottom), _

                           .Borders(xlEdgeRight), _

                           .Borders(xlInsideVertical), _

                           .Borders(xlInsideHorizontal))

        For i = LBound(ArrBorders) To UBound(ArrBorders)

            With ArrBorders(i)

                .LineStyle = xlContinuous

                .Weight = xlMedium

                .ColorIndex = xlAutomatic

            End With

        Next i

    End With

End Sub

'<<=========

Potresti scaricare il mio file di prova Tullio20170528.xlsm

===

Regards,

Norman

La risposta è stata utile?

1 persona ha trovato utile questa risposta.
0 commenti Nessun commento

5 risposte aggiuntive

Ordina per: Più utili
  1. Anonimo
    2017-05-29T16:11:18+00:00

    Ciao Tullio,

    Grazie Norman, ho scaricato il file dal DBox e lo utilizzo.

    Le costanti sono indispensabili oppure potrebbe essere una variabile anche l'inizio del range ?

    Le costanti non sono indispensabili ma, credo che il loro uso rappresenti buona pratica e sia altamente consigliabile.

    Comunque, per eliminare le costanti, prova la seguente versione del codice:

    '=========>>

    Option Explicit

    '--------->>

    Public Sub Demo()

        Dim WB As Workbook

        Dim SH As Worksheet

        Dim Rng As Range

        Set WB = ThisWorkbook

        Set SH = WB.Sheets("Scadenze")

        Set Rng = SH.Range("A4").CurrentRegion

        Call AddBorders(Rng)

    End Sub

    '--------->>

    Public Sub AddBorders(aRng As Range)

        Dim ArrBorders As Variant

        Dim i As Long

        With aRng

            ArrBorders = Array(.Borders(xlEdgeLeft), _

                               .Borders(xlEdgeTop), _

                               .Borders(xlEdgeBottom), _

                               .Borders(xlEdgeRight), _

                               .Borders(xlInsideVertical), _

                               .Borders(xlInsideHorizontal))

            For i = LBound(ArrBorders) To UBound(ArrBorders)

                With ArrBorders(i)

                    .LineStyle = xlContinuous

                    .Weight = xlMedium

                    .ColorIndex = xlAutomatic

                End With

            Next i

        End With

    End Sub

    '<<=========

    ===

    Regards,

    Norman

    La risposta è stata utile?

    1 persona ha trovato utile questa risposta.
    0 commenti Nessun commento
  2. Anonimo
    2017-05-29T14:14:29+00:00

    Grazie Norman, ho scaricato il file dal DBox e lo utilizzo.

    Le costanti sono indispensabili oppure potrebbe essere una variabile anche l'inizio del range ?

    Tullio.

    La risposta è stata utile?

    0 commenti Nessun commento
  3. Anonimo
    2017-05-28T17:40:57+00:00

    Ciao Norman,

    grazie della routine che funziona alla perfezione come sempre,e l'errore dipendeva  fatto che non avevo dichiarato Pubblica la routine.

    Poi però il mio Range è variabile ad eccezione della prima cella che è sempre "A4", al momento "A4":"J7"

    Ho provato a sostituire il tuo "A1":"D10" con Range("A4").CurrentRegion però da errore  e mi chiede la costante.

    Passando col cursore su Const sIntervallo As string,  lo scrive così : "A4J7" anziché "A4":"J7"

    Questa è la sub che legge l'intervallo 

    ______________________________________ 

    Public Sub LeggeTabella()

    Dim intervallo As Range

    Sheets("Scadenze").Select

    RimuoviProtezioneFoglioScadenze

    Set intervallo = Range("A4").CurrentRegion

    intervallo.CurrentRegion.Select                  'mi serviva solo per accertarmi che                                                                     la tabella sia tutta selezionata

     Call Macro2(intervallo)                             ' qui richiamo la tua Demo

     ProteggiFoglioScadenze

     End Sub

    _____________________________________

    Devo lavorare sul trasformare l'intervallo in stringa ?

    Grazie.

    Tullio

    La risposta è stata utile?

    0 commenti Nessun commento
  4. Anonimo
    2017-05-25T18:01:47+00:00

    Ciao Tullio,

    Ciao a tutti,

    è sicuramente una sciocchezza ma non riesco a farlo.

    Vorrei richiamare una Sub passandogli la variabile "intervallo" dimensionata come Range,

    è possibile ? 

    Ho provato con Call e senza ma da sempre errore.

    Prova qualcosa del genere:

    '=========>>

    Option Explicit

    '--------->>

    Public Sub Demo()

        Dim WB As Workbook

        Dim SH As Worksheet

        Dim Rng As Range

        Const sFoglio As String = "Foglio1"                               '<<=== Modifica

        Const sIntervallo As String = "A1:D10"                         '<<=== Modifica

        Set WB = ThisWorkbook

        Set SH = WB.Sheets(sFoglio)

        Set Rng = SH.Range(sIntervallo)

        Call AddBorders(Rng)

    End Sub

    '--------->>

    Public Sub AddBorders(aRng As Range)

        Dim ArrBorders As Variant

        Dim i As Long

        With aRng

            ArrBorders = Array(.Borders(xlEdgeLeft), _

                               .Borders(xlEdgeTop), _

                               .Borders(xlEdgeBottom), _

                               .Borders(xlEdgeRight), _

                               .Borders(xlInsideVertical), _

                               .Borders(xlInsideHorizontal))

            For i = LBound(ArrBorders) To UBound(ArrBorders)

                With ArrBorders(i)

                    .LineStyle = xlContinuous

                    .Weight = xlMedium

                    .ColorIndex = xlAutomatic

                End With

            Next i

        End With

    End Sub

    '<<=========

    ===

    Regards,

    Norman

    La risposta è stata utile?

    0 commenti Nessun commento