Newsgroup: it.comp.lang.visual-basic
Titolo: [VB.NET] nomi di formule in excel

Ciao,
in un progetto in 
vb.net
 sto creando un piccolo report in excel.
In una cella del foglio vorrei usare la funzione
foglio.cells(riga, colonna).formula = "=sum(a1:a12)"
ma se scrivo sum e poi uso il mio programma in un pc con office in 
italiano non funziona.
Come si fa per scrivere una formula che vada bene in qualsiasi lingua di 
installazione di excel?
grazie, ciao
Mauro


Un casino Immane!!!.....
Allora diciamo: cazzi amari per l'utente medio di excel!
Se ha office in turco hanno tradotto le funzioni in turco....se lo hai 
in svedese...pure!
MA
hai provato con FORMULALOCAL ???
;)
-- 
-----------------------------------
Wodka40 Thunderbirizzato

"Innuendo"  ha scritto nel messaggio 
news:4d19bc97$0$10581$4faf...@reader1.news.tin.it...





grazie, ciao
Mauro
*******************************
Una soluzione:
Private Sub Button1_Click(ByVal sender As System.Object, _
ByVal e As System.EventArgs) Handles Button1.Click
    Dim objExcel = CreateObject("Excel.Application")
    Dim objWorkbook = objExcel.Workbooks.Add()
    Dim objWorksheet = objWorkbook.Worksheets(3)
    Dim thisThread As System.Threading.Thread = _
        System.Threading.Thread.CurrentThread()
    Dim originalCulture As System.Globalization.CultureInfo = _
        thisThread.CurrentCulture()
    Try
        thisThread.CurrentCulture = _
            New System.Globalization.CultureInfo("en-US")
        With objWorksheet
            .Select()
            .Range("A11").Value = "=SUM(A1:A10)"
        End With
        objExcel.Visible = True
    Catch ex As Exception
        MessageBox.Show(ex.Message)
    Finally
        thisThread.CurrentCulture = originalCulture
        originalCulture = Nothing
        thisThread = Nothing
        objWorksheet = Nothing
        objWorkbook = Nothing
        objExcel = Nothing
    End Try
End Sub
Ovviamente la adatti.
---------------------------
Mauro Gamberini
Microsoft MVP - Excel
http://www.riolab.org/
http://www.maurogsc.eu/
http://social.answers.microsoft.com/Forums/it-IT/officeexcelit/threads
 

 news:4d19bc97$0$10581$4faf...@reader1.news.tin.it...
Non sono un guru di excel e quindi
non metto in dubbio assolutamente che funzioni
ma non basterebbe per un sum un bel FormulaLocal???
http://msdn.microsoft.com/it-it/library/microsoft.office.tools.excel.namedrange.formulalocal(v=VS.80).aspx
-- 
-----------------------------------
Wodka40 Thunderbirizzato

Grazie ad entrambi per i suggerimenti !!!
ciao
Mauro

Non sono un guru di excel e quindi
non metto in dubbio assolutamente che funzioni
ma non basterebbe per un sum un bel FormulaLocal???
*******************************
Ciao Marco.
Premessa: il 
vb.net
 lo utilizzo e conosco molto poco.
Ho provato così:
Private Sub Button1_Click(ByVal sender As System.Object, _
    ByVal e As System.EventArgs) Handles Button1.Click
    Dim objExcel = CreateObject("Excel.Application")
    Dim objWorkbook = objExcel.Workbooks.Add()
    Dim objWorksheet = objWorkbook.Worksheets(3)
    Try
        With objWorksheet
            .Select()
            .Range("A11").FormulaLocal = "=SUM(A1:A10)"
        End With
        objExcel.Visible = True
    Catch ex As Exception
        MessageBox.Show(ex.Message)
    Finally
        objWorksheet = Nothing
        objWorkbook = Nothing
        objExcel = Nothing
    End Try
End Sub
restituisce #NOME?
Del resto, se hai Excel in italiano,
e in vb(a) hai questa routine:
Public Sub m()
    Dim sh As Worksheet
    Set sh = ThisWorkbook.Worksheets("Foglio1")
    With sh
        .Range("A10").FormulaLocal = "=SUM(A1:A9)"
    End With
    Set sh = Nothing
End Sub
ottieni sempre #NOME?
FormulaLocal ti permette di utilizzare la sintassi
della formula nella lingua della localizzazione:
Public Sub m()
    Dim sh As Worksheet
    Set sh = ThisWorkbook.Worksheets("Foglio1")
    With sh
        .Range("A10").FormulaLocal = "=SOMMA(A1:A9)"
    End With
    Set sh = Nothing
End Sub
cosa questa di norma sconsigliata.
Se(se) il problema dell'OP è quello di mettere
SUM e che valga per tutti, FormulaLocal
sembra non funzionare in 
vb.net
.
Poi mi fermo qui, perchè sto pestando
un orticello che non mi appartiene.
Forse Mauro, quello bravo, ci può
illuminare.


Poi mi fermo qui, perchè sto pestando
un orticello che non mi appartiene.
Forse Mauro, quello bravo, ci può
illuminare.
<cut>
Aggiungo. La mia soluzione, utilizza
Excel senza riferimenti(quindi va bene
per qualsiasi versione), quella al link
che hai postato tu sembra richiedere invece
che siano impostati i riferimenti ad
Excel, con i soliti problemi di versione.
<es>
Microsoft.Office.Tools.Excel.NamedRange
</es>


 sembra non funzionare in 
vb.net
.
Il mio problema ï¿œ calcolare una la somma di un certo numero di celle in 
modo che funzioni correttamente su "qualsiasi" installazione di excel, 
sia essa in italiano o in inglese o in altra lingua.
grazie, ciao
Mauro

 sembra non funzionare in 
vb.net
.
Il mio problema è calcolare una la somma di un certo numero di celle in
modo che funzioni correttamente su "qualsiasi" installazione di excel,
sia essa in italiano o in inglese o in altra lingua.
grazie, ciao
Mauro
********************************
Hai avuto due soluzioni.
Se vuoi che funzioni su tutte le versioni di Excel,
quella che ho postato io.
Se invece nel tuo contesto puoi
referenziare una determinata versione di Excel,
il link che ti ha dato Marco ti fa vedere come fare.



Abbiate pazienza tutti e due...se una cosa non mi torna...
Non mi è mai capitato di dover avere il problema di Innuendo...e mi 
sembrava strano che Microsoft avesse fatto una stronzata del genere.
Porei capirlo in un sw OpenSource ma in uno commerciale significava 
"uccidersi" commercialmente!
Ho preso il mio Office Xp
e letto un po di help
Il mio office è localizzato in ITALIANO
in foglio1 B3:B9 ci sono dei valori
Prendete un button piazzatelo sul folio e scrivete
Private Sub CommandButton1_Click()
Range("B10").Activate
Range("B10").Formula = "=Sum(B3:B9)"
End Sub
...a me trasforma la formula da inglese in italiano...ed esegue la somma 
(che poi sarebbe quello che deve fare)!
Quindi basta prendere la consuetudine di scrivere le formule in inglese 
dentro Formula e poi ci pensa excel a localizzarlo... dal turkmeno al 
thai delle molucche!!!
Ora mi torna!
A parte che è una cosa Imho un po stupida localizzare il nome delle 
funzioni:
abbiamo la dicotomia VBA in inglese e formule in italiano. Ma pensando 
che Excel lo usa un commercialista e non un programmatore...allora 
acquista un senso!
Saluti
-- 
-----------------------------------
Wodka40 Thunderbirizzato

 Il 29/12/2010 9.01, Innuendo ha scritto:
Traduco:
della serie...il tuo codice DEVE funzionare....
MA
le hai attivate le celle prima di rimpiazzare la formula???
-----------------------------------
Wodka40 Thunderbirizzato

Quindi basta prendere la consuetudine di scrivere le formule in inglese
dentro Formula e poi ci pensa excel a localizzarlo... dal turkmeno al
thai delle molucche!!!
Ora mi torna!
A parte che è una cosa Imho un po stupida localizzare il nome delle
funzioni:
abbiamo la dicotomia VBA in inglese e formule in italiano. Ma pensando
che Excel lo usa un commercialista e non un programmatore...allora
acquista un senso!
*******************************************
Oh yes, come si fa normalmente
in vb(a).
Questa sembra funzionare
anche in 
vb.net
:
Private Sub Button1_Click(ByVal sender As System.Object, _
        ByVal e As System.EventArgs) Handles Button1.Click
        Dim objExcel = CreateObject("Excel.Application")
        Dim objWorkbook = objExcel.Workbooks.Add()
        Dim objWorksheet = objWorkbook.Worksheets(3)
        Try
            With objWorksheet
                .Select()
                .Range("A11").Formula = "=SUM(A1:A10)"
            End With
            objExcel.Visible = True
        Catch ex As Exception
            MessageBox.Show(ex.Message)
        Finally
            objWorksheet = Nothing
            objWorkbook = Nothing
            objExcel = Nothing
        End Try
    End Sub


 somma (che poi sarebbe quello che deve fare)!
E' stata la prima cosa che ho provato a fare, anche io ho office in 
italiano ma mi ricordavo di questa cosa delle formule in inglese e ho 
provato subito a scriverla in inglese.
L'unica cosa che ho fatto di diverso da te è stata quella di scrivere la 
formula nella cella senza passare attraverso un bottone.
Se in office in italiano nella cella B10 ci scrivi =SUM(B3:B9) ottieni 
#NOME?
La stessa cosa la fa se via visual basic scrivi
foglio.cells(10,2).formula = "=sum(B3:B9)"
ciao
Mauro

"Innuendo"  ha scritto nel messaggio 
news:4d1b0437$0$1353$4faf...@reader2.news.tin.it...





foglio.cells(10,2).formula = "=sum(B3:B9)"
ciao
Mauro
***************************************
Stop.
Questo:
Private Sub Button1_Click(ByVal sender As System.Object, _
      ByVal e As System.EventArgs) Handles Button1.Click
    Dim objExcel = CreateObject("Excel.Application")
    Dim objWorkbook = objExcel.Workbooks.Add()
    Dim objWorksheet = objWorkbook.Worksheets(1)
    Try
        With objWorksheet
            .Select()
            .Range("A11").Formula = "=SUM(A1:A10)"
        End With
        objExcel.Visible = True
    Catch ex As Exception
        MessageBox.Show(ex.Message)
    Finally
        objWorksheet = Nothing
        objWorkbook = Nothing
        objExcel = Nothing
    End Try
End Sub
Scrive =SOMMA(A1:A10) nella cella A11 del Foglio1.
Hai provato? Se sì, qual'è l'eventuale problema?
Poi se vuoi scrivere =SUM(A1:A10) direttamente da tastiera nella cella
di un Excel localizzato in italiano, questo no, no lo puoi fare.
Ciascun utente inserirà da tastiera la funzione SOMMA() nella propria 
lingua,
o meglio, nella lingua di localizzazione di Excel.
Ovviamente puoi utilizzare Cells al posto di Range:
With objWorksheet
     .Select()
     .Cells(11, 1).Formula = "=SUM(A1:A10)"
End With
Cosa non sto capendo? Grazie.


 Hai provato? Se sì, qual'è l'eventuale problema?
Si, ho provato, ma a me scrive =SUM(A1:A10) nella cella A11 e di 
conseguenza mi compare #NOME? nella stessa cella
Se invece scrivo
.Range("A11").Formula = "=SOMMA(A1:A10)"
funziona perfettamente, ma immagino che non funzionerà se do il 
programma a uno che usa excel in inglese (purtroppo non ho modo di provare).
ciao
Mauro

Si, ho provato, ma a me scrive =SUM(A1:A10) nella cella A11 e di
conseguenza mi compare #NOME? nella stessa cella
Se invece scrivo
.Range("A11").Formula = "=SOMMA(A1:A10)"
funziona perfettamente, ma immagino che non funzionerà se do il
programma a uno che usa excel in inglese (purtroppo non ho modo di provare).
ciao
Mauro
****************************************
Ho provato con 
vb.net
 in vs2010 pro eng ed Excel in ita.
Ho provato con 
vb.net
 expr ita ed Excel ita
(sulle macchine ho più versioni di Excel).
Ottengo quanto mi aspetto: =SOMMA(A1:A10) in cella A11.
Puoi postare *buona parte* del codice?
Come apri il file di Excel da 
vb.net
?
Grazie per la pazienza.


 Grazie per la pazienza.
Ma scherzi, grazie a te per la pazienza !!!
Ho fatto copia incolla del codice che mi hai scritto tu poco fa, non una 
riga in più o in meno, esattamente come te l'ho quotato nel messaggio 
precedente.
Adesso ho anche riprovato il codice che mi avevi postato ieri, quello 
con System.Globalization.CultureInfo e con quella aggiunta funziona 
tutto come deve. Ieri non mi andava, forse avevo fatto qualche pasticcio 
io nelle varie prove.
In definitiva la soluzione è usare System.Globalization.CultureInfo e 
scrivere le formule in inglese.
grazie ancora, ciao
Mauro

 Il 29/12/2010 11:31, Mauro Gamberini ha scritto:
zac
Abbiate ancora pazienza ...a me l'UCAS non è mai piaciuto e cerco sempre 
di trovare strade semplici (ho una certa età non son pù flessibile come 
un tempo!)
Mi hai obiettato del bottone? ok lo tolgo!
Intercetto il ricalcolo globale del foglio ok?
io ho scritto suppergiù come te
Private Sub Worksheet_Calculate()
Foglio1.Activate
Foglio1.Cells.Item(10, 2).Activate
Foglio1.Cells.Item(10, 2).Formula = "=Sum(A1:C5)"
End Sub
....e funziona! Perbacco (se vuoi anche Perdiana) se funziona!
A questo punto sospetto un tuo bug!
Ad esempio...è normale che foglio ti rimanga minuscolo? a me lo 
trasforma in maiuscolo!
foglio.cells(10,2) mi dà errore di oggetto
Foglio1.Cells.Item(10, 2) invece no
Inoltre...io sospetto anche che tu NON attivi le celle...è un bastardo 
sto coso (anche se usi net è sempre un oggetto COM).
Io il cultureinfo lo lascerei stare.....se imposti US sei sicuro che poi 
le date e le valute le mantenga "all'italiana"??? mah!...fai tu !(anche 
come si dice in toscana "fà u'n po' te!"
Saluti!
-- 
------------------------------
Wodka40 Thunderbirizzato
Wodka si è pure facebookkizzato
http://www.facebook.com/Wodka40
In omaggio ai primi 10 amici un pullover di
lana ombellicale di "Giggi er sozzo"

 thai delle molucche!!!
In vb6 č cosě infatti...

 Foglio1.Cells.Item(10, 2) invece no
Provo a fare un po' di chiarezza sperando di non aggiungere ulteriore 
casino.
Io ho provato con il codice di Mauro, questo:
Private Sub Button1_Click(ByVal sender As System.Object, _
      ByVal e As System.EventArgs) Handles Button1.Click
    Dim objExcel = CreateObject("Excel.Application")
    Dim objWorkbook = objExcel.Workbooks.Add()
    Dim objWorksheet = objWorkbook.Worksheets(1)
    Try
        With objWorksheet
            .Select()
            .Range("A11").Formula = "=SUM(A1:A10)"
        End With
        objExcel.Visible = True
    Catch ex As Exception
        MessageBox.Show(ex.Message)
    Finally
        objWorksheet = Nothing
        objWorkbook = Nothing
        objExcel = Nothing
    End Try
End Sub
Incollato pari pari in una nuova soluzione di 
VB.NET
 2008 express e 
confermo che con office 2007 in italiano NON funziona, =SUM non viene 
riconosciuta.
Se cambio la riga
.Range("A11").Formula = "=SUM(A1:A10)"
in
.Range("A11").Formula = "=SOMMA(A1:A10)"
invece funziona correttamente ma solo sul mio pc che ha office in ita 
immagino.
Per questo HO DOVUTO usare cultureinfo
ciao
Mauro