Newsgroup: it.comp.lang.visual-basic
Titolo: [VBA - Excel]

Ho una piccola tabella; vorrei creare una procedura automatizzata
che legga la tabella ed a seconda del contenuto delle righe le
copia in un foglio piuttosto che in un altro. Dovrei ottenere
alla fine una serie di fogli che contengono le mie righe suddivise
per tipo.
Come posso fare??
LuKe
lu...@gmx.de

> LuKe:

Puoi fare cosi`: tirati su le maniche e comincia. :-)) Comincia con la
lettura della tabella. A proposito, parliamo di una procedura tutta in Excel
o di un progetto vb? Ipotizzo si tratti di un progetto Excel. Parlare di
lettura di una "tabella" implica definire prima come e` fatta tale tabella.
L'ideale sarebbe che si trattasse di un cd "Elenco", costruito seguendo
quanto indicato nella guida in linea alla pagina:
    Istruzioni per la creazione di un elenco su un foglio di lavoro
Per esempio, un elenco del tipo:
    Id  Nome     Importo
     1  Pippo        100
     2  Pluto        200
     3  Paperino     300
che, poniamo, inizia dalla cella C6. E sperimentiamo col codice seguente,
scritto nel modulo "Modulo1" che provvederemo a rinominare "MProve",
appartenente al progetto "VBAProject", rinominato "PProveElenchi", della
cartella di lavoro "Leggi Elenco.xls", registrata nella cartella
"Progetti\xl" del disco fisso "C:"... Ok?
C:\Progetti\xl\Leggi Elenco.xls
PProveElenchi
MProve
Option Explicit
Public Sub GetCurrentRegion_Test( _
)
  MsgBox _
      GetCurrentRegion.Address _
    , vbInformation + vbOKOnly _
    , "GetCurrentRegion_Test"
End Sub
Private Function GetCurrentRegion( _
) As Excel.Range
  Dim objSelection As Excel.Range
  Set objSelection = Selection
    With objSelection
      Set GetCurrentRegion = .CurrentRegion
    End With
  Set objSelection = Nothing
End Function
Esegui piu` volte la macro "GetCurrentRegion_Test" cambiando la cella attiva
e l'intervallo selezionato e analizzane le "reazioni". Per esempio, se fosse
selezionato l'intervallo "B5:D7" con cella attiva "C6" il messaggio che
otterremmo sarebbe:
    $B$5:$E$9
quindi della selezione viene presa in considerazione la prima cella, B5, e
come "regione" corrente viene considerato l'intervallo rettangolare formato
da tutte le celle adiacenti a questa.
Ora scriviamo:
Public Sub GetC6CurrentRegion( _
)
  Dim objWorksheet As Excel.Worksheet
  Set objWorksheet = ActiveSheet
  MsgBox _
      objWorksheet.Range("C6").CurrentRegion.Address _
    , vbInformation + vbOKOnly _
    , "GetC6CurrentRegion"
  Set objWorksheet = Nothing
End Sub
Siamo ora in possesso degli strumenti per "leggere" il nostro elenco. Per
esempio cosi`:
Public Sub LeggiElenco1( _
)
  Dim objXLRange As Excel.Range
  With Workbooks("Leggi Elenco.xls")
    With .Worksheets("Foglio1")
      With .Range("C6")
        For Each objXLRange In .CurrentRegion
          With objXLRange
            Debug.Print .Address
          End With
          Set objXLRange = Nothing
        Next
      End With
    End With
  End With
End Sub
oppure:
Public Sub LeggiElenco2( _
)
  Dim objXLRange As Excel.Range
  With Workbooks("Leggi Elenco.xls").Worksheets
    With .Item("Foglio1").Range("C6").CurrentRegion
      For Each objXLRange In .Cells
        With objXLRange
          Debug.Print .Address
        End With
        Set objXLRange = Nothing
      Next
    End With
  End With
End Sub
o in svariati altri modi...
--
Ciao.
Maurizio
--------
?SPQR(C)
 X
--------