Newsgroup: it.comp.lang.visual-basic
Titolo: Problemi nell'inserimento di formule in un foglio di Excel

Tramite M$ Excel Object library 8.0 vorei creare un documento di Excel
ed inserire delle formule nelle celle. Utilizzo un codice di questo
tipo:
Dim xlapp As Excel.Application
Set xlapp = New Excel.Application
xlapp.Visible = False
Application.SheetsInNewWorkbook = 1
xlapp.Workbooks.Add
xlapp.ActiveWorkbook.Activesheet.Cells(x,y).Formula = "=SOMMA(A1:E5)" 
xlapp.Visible = True
Quando mi compare il foglio di Excel, nella cella (x,y) che dovrebbe
mostrare il risultato della formula compare la scritta:
#NOME?
Facendo doppio click sulla cella, la formula viene valutata ed appare
il risultato corretto. Probabilmente dovrei richiamare qualche metodo
'Evaluate' da codice per visualizzare il risultato all'apertura del
foglio...ma non so come fare.
Qualcuno sa aiutarmi?
E gią che ci sono, un'altra domanda: Come si puņ copiare il contenuto
di un foglio di un documento di Excel dentro ad un altro foglio
(sempre tramite Visual Basic)?
Grazie in anticipo per le eventuali risposte!
Alessio.

Non è che il risultato non ti esce perchè la colonna è troppo piccola?
Hai provato a non mettere .Formula?
Io non l'ho mai usato execl da vb, ma in excel già mettendo ='...........'
la interpretava come
funzione!!!!!
Fammi sapere
Ciao
Wein

 E già che ci sono, un'altra domanda: Come si può copiare il
contenuto di un foglio di un documento di Excel dentro ad un
altro foglio (sempre tramite Visual Basic)?
Il contenuto? Tutto o una parte? E il foglio di destinazione
dovra` essere ricoperto? E l'eventuale avanzo? Cancellato? O
vuoi copiare un foglio in un'altra cartella di lavoro?
O nella stessa cartella avere la copia di un foglio? Cioe`,
copia di Fogli o copia di Range?
Per esempio, cosi` ottieni una copia di "Foglio1" come ultimo
foglio della cartella attiva:
    With Application.ActiveWorkbook
        Call .Sheets("Foglio1") _
            .Copy(After:=.Sheets(.Sheets.Count))
    End With
Mentre cosi` viene eseguito un copia/incolla di
"Foglio1!A1:A3" su "Foglio2!C10:12", e pazienza se in
"Foglio2!C10:12" c'era qualcosa di utile...
    With Application.ActiveWorkbook
        Call .Sheets("Foglio1").Range("A1:A3") _
          .Copy(.Sheets("Foglio2").Range("C10"))
    End With
--
Ciao.
Maurizio

 "Foglio2!C10:12"
Leggi, ovviamente: "Foglio2!C10:C12"
--
Ciao.
Maurizio

Non č che il risultato non ti esce perchč la colonna č troppo piccola?
[cut]
Ho risolto il problema utilizzando:
cells(x,y).formula="=SUM(A1:E5)"
Grazie per la risposta!
Ciao, Alessio.

copia di Fogli o copia di Range?
Vorrei che il foglio "Foglio1" della cartella "Cartel1" andasse a
sovrascrivere  completamente il foglio "Foglio1" della cartella
"Cartel2". Qualunque siano i contenuti dei due fogli e trascurando
avanzi vari ed eventuali.
Ciao, Alessio.

 Vorrei che il foglio "Foglio1" della cartella "Cartel1"
andasse a sovrascrivere completamente il foglio "Foglio1"
della cartella "Cartel2". Qualunque siano i contenuti dei due
fogli e trascurando avanzi vari ed eventuali.
Una sana regola dice che quando il codice per fare una
puttanata supera un certo numero di righe probabilmente la
stessa cosa si puo` fare con un minor numero di righe,
generalmente una sola.
Mi sa che questo e` proprio uno di quei casi!... :-(((
Option Explicit
Private Function SostituisciFoglio( _
  ByVal FoglioDaCopiare As Excel.Worksheet _
, ByVal CartellaDiDestinazione As Excel.Workbook _
) As Boolean
  Dim blnCurAlerts  As Boolean
  Dim lngErr        As Long
  Dim wks           As Excel.Worksheet
  Let SostituisciFoglio = True
  With Application
    Let blnCurAlerts = .DisplayAlerts
    Let .DisplayAlerts = False
  End With
  With CartellaDiDestinazione.Worksheets
    On Local Error Resume Next
    Set wks = .Item(FoglioDaCopiare.Name)
    Let lngErr = Err.Number
    On Local Error GoTo 0
  End With
  Select Case lngErr
  Case 0:
    With wks
      Let .Name = .Name & "(" & CSng(Now) & ")"
      Call FoglioDaCopiare.Copy(After:=wks)
      Call .Delete
    End With: Set wks = Nothing
  Case 9:
    With CartellaDiDestinazione.Sheets
      Call FoglioDaCopiare _
        .Copy(After:=.Item(Index:=.Count))
    End With
  Case Else:
    Let SostituisciFoglio = False
  End Select
  Let Application.DisplayAlerts = blnCurAlerts
End Function
Public Sub SostituisciFoglio_Test( _
)
  If ActiveWorkbook Is ThisWorkbook Then
    Call MsgBox("Errata destinazione.")
  Else
    If SostituisciFoglio( _
        FoglioDaCopiare _
          :=ThisWorkbook.ActiveSheet _
      , CartellaDiDestinazione _
          :=ActiveWorkbook) _
    Then
      Call MsgBox("Ok")
    Else
      Call MsgBox("Ko")
    End If
  End If
End Sub
Fammi sapere se trovi un modo piu` spiccio!
--
Ciao.
Maurizio

 wrote:
Ho risolto il problema più o meno in questo modo:
Dim xlapp(0 to 1) as Excel.Application
Set xlapp(0) = New Excel.Application
Set xlapp(1) = New Excel.Application
 
xlapp(0).Visible = False
xlapp(1).Visible = False
 
xlapp(0).Workbooks.Open nomefile(0)
xlapp(1).Workbooks.Open nomefile(1)
 
' Copio negli appunti tutto il contenuto del foglio di origine
contenuto nella cartella di origine....
xlapp(0).ActiveWorkbook.Sheets(nomefoglio(0)).UsedRange.Copy
'Imposto la cella A1 come cella attiva del foglio di destinzaione
della cartella di destibazione...
xlapp(1).ActiveWorkbook.Sheets(nomefoglio(1)).Range("A1").Activate
'Incollo il contenuto degli appunti nel foglio di destinazione...
xlapp(1).ActiveWorkbook.Sheets(nomefoglio(1)).Paste
 
'Copio il contenuto della sola cella A1 negli appunti: questo solo
'perchè il contenuto del mio foglio di origine era _enorme_ (più di
'15000 righe!!) ed excel alla chiusura delle applicazioni xlapp(0) ed
'xlapp(1) mi chiedeva se volevo tenere il contenuto degli apppunti...
xlapp(0).ActiveWorkbook.Sheets(nomefoglio(0)).Range("A1").Copy
 
xlapp(0).ActiveWorkbook.Close
xalpp(0).Visible=true
La scelta di usare un array di due oggetti Excel.Application (xlapp(0)
ed xlapp(1)) invece di una sola applicazione con due workbook non ha
alcuna spiegazione....mi andava di farlo :-))
Ciao e grazie ancora!
 

 La scelta di usare un array di due oggetti Excel.Application
(xlapp(0) ed xlapp(1)) invece di una sola applicazione con due
workbook non ha alcuna spiegazione....mi andava di farlo :-))
:)
--
Ciao.
Maurizio