Ordinamento automatico VBA

Anonimo
2011-11-06T17:14:49+00:00

Ho costruito due database su excel (range), il primo va da BB3 a BB200 (voci di spesa) il secondo da AE4 a AI300 (elenco spese).

In pratica immettendo dei dati in questi range l'ordinamento è automatico.

Per fare questo ho avviato per la prima la seguente funzione ( (per avere la prima lettera maiuscola):

Private Sub Worksheet_Change(ByVal Target As Range)

    If Not Application.Intersect(Target, Range("BB3:BB200")) Is Nothing Then

        Target(1).Value = UCase(Left(Target(1), 1)) & LCase(Mid(Target(1), 2))

    End If

End Sub

per la seconda(per avere l'ordinamento della prima colonna AE4):

Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)

Worksheets("Voci di Spesa").Range("AE4:AI300").Sort Key1:=Range("AE4"), Order1:=xlAscending, Header:=xlGuess, _

        OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, _

        DataOption1:=xlSortNormal

End Sub

(VBA ricavate da alcune ricerche su internet)

Il problema è che ogni volta che immetto un dato sia nel primo range (BB3:BB200) che nel secondo, il tempo di attesa è lungo ed in basso mi appare

ordina..calcola.. oltre che una rotellina al centro dello schermo che gira per circa 40 secondi.

Come posso risolvere questo incoveniente ed avere una risposta del dato immesso immediata ?

Ci sono degli errori nel VBA ?

Grazie

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
2011-11-07T15:26:57+00:00

Il link dovrebbe essere questo...per sicurezza ho inviato anche l' email.

https://skydrive.live.com/#cid=CB752B99B6066538&id=CB752B99B6066538!104

Se posso essere franco, e lo sarò, quello che vedo è un po' un pasticcio....

Se seleziono una cella in AF, ne ho un tot bianche che non servono a nulla...

E neppure quei numeri a fianco delle voci spesa.

Proviamo a rendere espandibile il riferimento alla colonna BB senza dover indicare n righe in eccesso e a riordinarla quando immetti un nuovo valore. Questo nel modulo di codice del foglio:

Private bln As Boolean

Private Sub Worksheet_Change(ByVal Target As Range)

    If bln = False Then

        Dim lRiga As Long

        lRiga = Me.Range("BB" & Me.Rows.Count).End(xlUp).Row

        If Target.Column = 54 Then

            If Target.Cells.Count = 1 Then

                Me.Names.Add Name:="Elencospese", _

                    RefersTo:="=" & _

                    Range("BB4:BB" & lRiga).Address

            End If

        End If

        Call mOrdinaElencoSpese

    End If

End Sub

Private Sub mOrdinaElencoSpese()

On Error GoTo RigaErrore

        bln = True

        Me.Range("Elencospese").Sort Key1:=Range("BB4"), _

            Order1:=xlAscending, _

            Header:=xlGuess, _

            OrderCustom:=1, _

            MatchCase:=False, _

            Orientation:=xlTopToBottom, _

            DataOption1:=xlSortNormal

        bln = False

        Exit Sub

RigaErrore:

    bln = False

End Sub

Elimina eventuali altri eventi Change del foglio. Per il resto non ho capito nulla, hai eventi in ThisWorkbook... mah.

La risposta è stata utile?

0 commenti Nessun commento

11 risposte aggiuntive

Ordina per: Più utili
  1. Anonimo
    2011-11-07T06:52:22+00:00

    Sono due range diversi che vengono compilati autonomamente al bisogno. in effetti i problemi sono due, ma identici.

    Quando devo immette i dati nel range BB3:BB200, il problema è quello descritto idem per l'altro range, ripeto la compilazione è per ognuno autonoma.

    Forse devo mettere le istruzioni sul foglio ThisworkBook o Sulla cartella di lavoro?

    Se non mi sono spiegato fammi sapere.

    Grazie

    Non riesco a riprodurre il tuo problema. Puoi, per favore, spiegare *cosa* c'è nelle due colonne(il tipo di valori). Grazie.

    La risposta è stata utile?

    0 commenti Nessun commento
  2. Anonimo
    2011-11-06T23:29:51+00:00

    Sono due range diversi che vengono compilati autonomamente al bisogno. in effetti i problemi sono due, ma identici.

    Quando devo immette i dati nel range BB3:BB200, il problema è quello descritto idem per l'altro range, ripeto la compilazione è per ognuno autonoma.

    Forse devo mettere le istruzioni sul foglio ThisworkBook o Sulla cartella di lavoro?

    Se non mi sono spiegato fammi sapere.

    Grazie

    Sia il range AE4:AI300 che il range BB3:BB200 devono essere ordinati ?

    Come è composto il dettaglio spesa nel range AE4 : AI4  ?

    La chiave di ordinamento è la cella AE4 ?  Si tratta di una data ? 

    Grazie

    Eliano

    La risposta è stata utile?

    0 commenti Nessun commento
  3. Anonimo
    2011-11-06T20:19:57+00:00

    Sono due range diversi che vengono compilati autonomamente al bisogno. in effetti i problemi sono due, ma identici.

    Quando devo immette i dati nel range BB3:BB200, il problema è quello descritto idem per l'altro range, ripeto la compilazione è per ognuno autonoma.

    Forse devo mettere le istruzioni sul foglio ThisworkBook o Sulla cartella di lavoro?

    Se non mi sono spiegato fammi sapere.

    Grazie

    La risposta è stata utile?

    0 commenti Nessun commento
  4. Anonimo
    2011-11-06T18:37:36+00:00

    Ho costruito due database su excel (range), il primo va da BB3 a BB200 (voci di spesa) il secondo da AE4 a AI300 (elenco spese).

    In pratica immettendo dei dati in questi range l'ordinamento è automatico.

    Per fare questo ho avviato per la prima la seguente funzione ( (per avere la prima lettera maiuscola):

    Private Sub Worksheet_Change(ByVal Target As Range)

        If Not Application.Intersect(Target, Range("BB3:BB200")) Is Nothing Then

            Target(1).Value = UCase(Left(Target(1), 1)) & LCase(Mid(Target(1), 2))

        End If

    End Sub

    per la seconda(per avere l'ordinamento della prima colonna AE4):

    Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)

    Worksheets("Voci di Spesa").Range("AE4:AI300").Sort Key1:=Range("AE4"), Order1:=xlAscending, Header:=xlGuess, _

            OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, _

            DataOption1:=xlSortNormal

    End Sub

    (VBA ricavate da alcune ricerche su internet)

    Il problema è che ogni volta che immetto un dato sia nel primo range (BB3:BB200) che nel secondo, il tempo di attesa è lungo ed in basso mi appare

    ordina..calcola.. oltre che una rotellina al centro dello schermo che gira per circa 40 secondi.

    Come posso risolvere questo incoveniente ed avere una risposta del dato immesso immediata ?

    Ci sono degli errori nel VBA ?

    Grazie

    Mi sfugge perchè inserendo i dati in BB tu debba riordinare AE. In Ae cosa c'è? Perchè no fai tutto dal Change:

    Private Sub Worksheet_Change(ByVal Target As Range)

        If Target.Cells.Count = 1 Then

            Dim rng As Range

            Set rng = Me.Range("BB3:BB200")

            If Not Intersect(Target, rng) Is Nothing Then

                Target.Value = StrConv(Target.Value, vbProperCase)

            End If

            Set rng = Nothing

            Set rng = Me.Range("AE4:AE200")

            rng.Sort Key1:=Me.Range("AE4"), _

                OrderCustom:=xlAscending, _

                Header:=xlGuess, _

                OrderCustom:=1, _

                MatchCase:=False, _

                Orientation:=xlTopToBottom, _

                DataOption1:=xlSortNormal

        End If

     End Sub

    La risposta è stata utile?

    0 commenti Nessun commento