Newsgroup: it.comp.lang.visual-basic
Titolo: [?] File excel

salve a tutti, ho la necessità di scrivere un programmino che lagga dei
dati da un file excel e dopo varie trasformazioni li metta in un file
testo....
avevo pensato di aprire il file excel con Dao come se fosse un
recordset, il problema è che a volte il valore di una cella fa riferimento
ad una cella di un altro Foglio, quindi nel recordset mi risulta vuoto.
Cosi ho pensato di dichiararmi un oggetto excel.application e di scorrere
uno a uno i fogli riga per riga,  il problema è che non riesco a stabilire
il numero di righe che hanno almeno una colonna valorizzata cosi per
leggere il foglio debbo fare un ciclo da uno a 65536 e ci mette un tempo
assurdo, come posso fare? di solito le righe sono un centinaio quindi per
stare sicuro potrei anche fare il ciclo da 1 a mille, però mi piacerebbe
usare un metodo più elegante....
spero di essere stato chiaro.
--------------------------------
Inviato via 
http://usenet.iol.it

 usare un metodo più elegante....
Fra le colonne del foglio excel, ne esiste una che e' *sempre*
valorizzata?
Lokar
P.S. Forse e' meglio se scrivi un "programma".
--
Sito Comune: 
http://www.it-lang-vb.net/
Manifesto: 
http://www.it-lang-vb.net/docs/Manifesto.txt

valorizzata?
no, possono esserci anche delle righe con tutte le celle
vuote sparse tra le altre...:(((


> "fabrizio" [...]:

    Facciamo un "esperimento"?
    Scriviamo dei valori costanti in alcune celle di in un foglio di lavoro:
    B2: 1
    C2: 2
    D2: 3
    C3: 4
    G7: 5
    H7: 6
    Come faremmo "a manina" per selezionare tutte queste celle? Cosi':
    Modifica > Vai a... > Speciale... > Seleziona: Costanti. Ok
    Ora aggiungiamo una formula:
    A10: =B2
    E riproviamo la selezione di prima. La cella A10 ne viene esclusa
(ovviamente). Ora proviamo:
    Modifica > Vai a... > Speciale... > Seleziona: Formule. Ok
e viene selezionata solo la cella A10. (Ricordiamoci di annullare la
selezione fra una prova e l'altra, per esempio con Ctrl+Home).
    Se ho capito bene, le celle che ti interessa testare sono tutte quelle
che contengono un valore costante *e* tutte quelle che contengono formule.
Dovrai quindi usare un range che sia l'unione di questi due sottoinsiemi
delle celle del foglio di lavoro. Questo potrebbe essere il codice:
Option Explicit
Public Sub TestGetAllCells()
  Dim oXLRngAllCells  As Excel.Range
  Dim oXLRng          As Excel.Range
  Set oXLRngAllCells = GetAllCells(ActiveSheet)
  If (oXLRngAllCells Is Nothing) Then
    ' Vuoto!
  Else
    For Each oXLRng In oXLRngAllCells
      Debug.Print oXLRng.Address
    Next
  End If
  Set oXLRng = Nothing
  Set oXLRngAllCells = Nothing
End Sub
Public Function GetAllCells( _
  ByVal wks As Excel.Worksheet _
) As Excel.Range
  Dim oXLRngConstants As Excel.Range
  Dim oXLRngFormulas  As Excel.Range
  On Error Resume Next
  With wks.Cells
    Set oXLRngConstants _
      = .SpecialCells( _
            xlCellTypeConstants _
          , xlErrors _
          + xlLogical _
          + xlNumbers _
          + xlTextValues)
    Set oXLRngFormulas _
      = .SpecialCells( _
            xlCellTypeFormulas _
          , xlErrors _
          + xlLogical _
          + xlNumbers _
          + xlTextValues)
  End With
  On Error GoTo 0
  If ( _
    (Not (oXLRngConstants Is Nothing)) _
    And _
    (Not (oXLRngFormulas Is Nothing)) _
  ) Then
    Set GetAllCells _
      = Union(oXLRngConstants, oXLRngFormulas)
  ElseIf Not (oXLRngConstants Is Nothing) Then
    Set GetAllCells = oXLRngConstants
  ElseIf Not (oXLRngFormulas Is Nothing) Then
    Set GetAllCells = oXLRngFormulas
  End If
  Set oXLRngFormulas = Nothing
  Set oXLRngConstants = Nothing
End Function
e l'output di debug sarebbe, nel caso delle celle dell'esempio:
    $B$2
    $D$2
    $C$2
    $C$3
    $G$7
    $H$7
    $A$10
--
Ciao.
Maurizio
--------
?SPQR(C)
 X
--------

grazie mille per l'aiuto, finalmente ho risolto!!!
