Newsgroup: it.comp.lang.visual-basic
Titolo: Vb & Excel

Ciao e buon anno,
Utilizzo VB 2008 Express edition con il quale ho creato una form; tale
form è composta da 5 caselle ed un pulsante:
1° casella : inserisco il valore della media
2° casella : inserisco la dev standard
3° casella : accettabilità controllo
4° casella : accettabilità specifica
5° casella : risultato
compilate le 4 caselle, la 5° mi deve rendere il risultato del
seguente calcolo :
=Inv.Norm(4°Casella, 1°Casella, 2°Casella) dove Inv.Norm è una formula
presa da excel.
In pratica ora eseguo questi calcoli in excel ma vorrei eseguirli con
una form VB.
Come posso procedere?
Grazie
Marco

una form VB.
filePath = "c:\Test.xls"
Set oExcel = CreateObject("Excel.Application")
oExcel.Workbooks.Open(filepath)
oExcel.cells(1,1)= text1.value ' cella a1
oExcel.cells(1,2)=text2.value  'cella b1
text3.value=oExcel.cells(1,3)  ' c3, dove c'è la formula
oExcel.Quit
-- 
Giovanni Cenati (Bergamo, Italy)
Write to "Reventlov" at katamail com
http://digilander.libero.it/Cenati
 (Esempi e programmi in VbScript)
-- 

 - Mostra testo citato -
Ciao,
ho provato ma non funziona nel senso che mi sottolinea tuttle le righe
di codice e non mi "prende" il Set, forse manca qualche libreria?
Come posso risolvere la cosa?
grazie ancora
Marco

 Marco
In VB6 funziona perfettamente,
modificando leggermente il codice.
Apri Visual Basic 6.
Crea un progetto nuovo.
Nel Form1 metti 1 CommandButton e 3 TextBox.
Inserisci il seguente codice in Form1:
Private Sub Command1_Click()
    filepath = "c:\Test.xls"
    Set oExcel = CreateObject("Excel.Application")
    oExcel.Workbooks.Open (filepath)
    oExcel.Cells(1, 1) = Val(Text1.Text)
    oExcel.Cells(1, 2) = Val(Text2.Text)
    Text3.Text = oExcel.Cells(1, 3)
    oExcel.Quit
End Sub
Crea un nuovo documento con Excel e salvalo come C:\Test.xls.
Inserisci in C1 la seguente formula:
=SOMMA(A1:B1)
Salva ed esci.
Manda in avvio l'applicazione creata con Visual Basic 6.
-- 
Ciao Fede
By Chicco Production
http://bcp.freetools.it


Con VB 2008 express edition non si può fare nulla? io uso sempre
quello...
Marco

Con VB 2008 express edition non si può fare nulla? io uso sempre
quello...
************************************************
Prova(io ho la versione inglese).
Project(immagino: Progetto)
Add Reference(Aggiungi referenza)
Linguetta: COM
Cerca e seleziona: Microsoft Scripting Runtime
Option Strict Off
Imports Scripting
Public Class Form1
    Dim objExcel As Object
    Dim objWorkbook As Object
    Dim objWorksheet As Object
    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As 
System.EventArgs) Handles MyBase.Load
        objExcel = CreateObject("Excel.Application")
        objWorkbook = objExcel.Workbooks.Open("C:\tuoFile.xls")
        objWorksheet = objWorkbook.worksheets("Foglio2")
        objExcel.Visible = True
        With objWorksheet
            .Select()
            .Cells(1, 1).Value = "Pippo"
            .Cells(1, 2).Value = "Pluto"
        End With
        'Codice di chiusura Excel, rilascio memoria
    End Sub
End Class
-- 
---------------------------
Mauro Gamberini
http://www.riolab.org/
http://blog.maurogsc.eu/

On 12 Gen, 15:42, "Mauro Gamberini"

Ciao,
Il tuo codice funziona ma vorrei modificare un paio di cose..
.Cells(1, 1).Value = "Pippo" è un numero percentuale per cui dovrei
prima impostarlo? pensavo di fare così:
.Cells(1, 1).format o qualcosa di simile...(come lo imposto in formato
%?)
.Cells(1, 1).Value = Val(Numero1.Text) dove Numero1 è il campo che
compilo nella form VB
dopo che excel ha effettuato il calcolo Inv.Norm dovrei riportare il
risultato in un' altra casella della form VB e chiudere excel, basta
fare l' inverso?
Val(Numero6.Text) = .Cells(1,3)?
Chiudi excel (Excel.quit)?
grazie

Il tuo codice funziona ma vorrei modificare un paio di cose..
.Cells(1, 1).Value = "Pippo" è un numero percentuale per cui dovrei
prima impostarlo? pensavo di fare così:
.Cells(1, 1).format o qualcosa di simile...(come lo imposto in formato
%?)
.Cells(1, 1).Value = Val(Numero1.Text) dove Numero1 è il campo che
compilo nella form VB
***************************************************
Se nella TextBox scrivi 100%, 23,45%, ecc., Excel la interpreterà
correttamente senza dover forzare la formattazione della cella.
dopo che excel ha effettuato il calcolo Inv.Norm dovrei riportare il
risultato in un' altra casella della form VB e chiudere excel, basta
fare l' inverso?
Val(Numero6.Text) = .Cells(1,3)?
Chiudi excel (Excel.quit)?
********************************************************
Prova:
Option Strict Off
Imports Scripting
Public Class Form1
    Dim objExcel As Object
    Dim objWorkbook As Object
    Dim objWorksheet As Object
    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As 
System.EventArgs) Handles MyBase.Load
        Try
            objExcel = CreateObject("Excel.Application")
            objWorkbook = objExcel.Workbooks.Open("C:\tuoFile.xls")
            objWorksheet = objWorkbook.worksheets("Foglio2")
            objExcel.Visible = True
            With objWorksheet
                .Select()
                .Cells(1, 1).Value = Me.TextBox1.Text
                Me.TextBox2.Text = .cells(3, 1).value
            End With
        Catch ex As Exception
            MessageBox.Show(ex.Message)
        Finally
            objExcel.quit()
            objWorksheet = Nothing
            objWorkbook = Nothing
            objExcel = Nothing
        End Try
    End Sub
End Class
-- 
---------------------------


On 13 Gen, 10:50, "Mauro Gamberini"

Funziona tutto tranne il formato %
Nella form ho una casella combinata compilata tramite Editor insieme
string; qui ho scritto
99%
98%
97%
....
In excel mi scrive solo 99 e non in percentuale per cui la formula non
rende il risultato voluto...
Inoltre volevo gestire la digitazione dei valori sia con . che con ,
ed ho provato così:
Dim Sep As String =
Globalization.CultureInfo.CurrentCulture.NumberFormat.PercentDecimalSeparator
Me.Numero4.ValueMember = (CDbl(Numero4.Text.Replace(".", Sep).Replace
(",", Sep)))
Try
objExcel = CreateObject("Excel.Application")
...
...
...
ma mi da un altro errore (Cast non valido dalla stringa 99% al tipo
'Double')
Spero di non doverti disturbare più!
grazie

Per favore, quota. Grazie.
Funziona tutto tranne il formato %
Nella form ho una casella combinata compilata tramite Editor insieme
string; qui ho scritto
99%
98%
97%
....
In excel mi scrive solo 99 e non in percentuale per cui la formula non
rende il risultato voluto...
****************************************************
Io non riscontro questa cosa.
Ho modificato la mia Form.
Ho una ComboBox alla quale
metto come scelte:
99%
98%
97%
Ho un pulsante che fa partire il giochino.
Quando clicco sul pulsante, apro Excel, gli passo
il valore selezionato sulla ComboBox e lo ritrovo come
mi aspetto(e. 98%), senza dover fare nessuna ulteriore
formattazione.
Option Strict Off
Imports Scripting
Public Class Form1
    Dim objExcel As Object
    Dim objWorkbook As Object
    Dim objWorksheet As Object
    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As 
System.EventArgs) Handles MyBase.Load
    End Sub
    Private Sub TextBox1_TextChanged(ByVal sender As System.Object, ByVal e 
As System.EventArgs)
    End Sub
    Private Sub ComboBox1_SelectedIndexChanged(ByVal sender As 
System.Object, ByVal e As System.EventArgs) Handles 
ComboBox1.SelectedIndexChanged
    End Sub
    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As 
System.EventArgs) Handles Button1.Click
        Try
            objExcel = CreateObject("Excel.Application")
            objWorkbook = objExcel.Workbooks.Open("C:\tuoFile.xls")
            objWorksheet = objWorkbook.worksheets("Foglio2")
            objExcel.Visible = True
            With objWorksheet
                .Select()
                .Cells(1, 5).Value = Me.ComboBox1.Text
                Me.TextBox2.Text = .cells(3, 1).value
            End With
        Catch ex As Exception
            MessageBox.Show(ex.Message)
        Finally
            objExcel.quit()
            objWorksheet = Nothing
            objWorkbook = Nothing
            objExcel = Nothing
        End Try
    End Sub
End Class
Inoltre volevo gestire la digitazione dei valori sia con . che con ,
ed ho provato cosě:
<cut>
ma mi da un altro errore (Cast non valido dalla stringa 99% al tipo
'Double')
***************************************************
Passo. Non capisco cosa vuoi fare.


 Per favore, quota. Grazie.
Scusa ma non mi ricordo più... Quota?
Ho risolto, porto su excel il 99% della casella combinata e lo divido
per 100 così il calcolo mi funziona, almeno sembra
La questione del punto e della virgola riguarda il fatto di scrivere i
numeri nelle celle con uno o l' altro per cui volevo gestire eventuali
errori...
all' inizio, il risultato era una somma che compariva in msgbox ed il
codice era :
MessageBox.Show("Limite di controllo : " & (CDbl(Numero1.Text.Replace
(".", Sep).Replace(",", Sep)) + CDbl(Numero2.Text.Replace(".",
Sep).Replace(",", Sep))), "Calcolo limiti")
Credo comunque che non sia necessario quanto scritto sopra, farò delle
prove...
Ancora una mancanza se possibile:
con il codice così si presume che il file Test.xls sia presente in C:\
Vorrei eliminarlo dopo l' uso e questo l' ho fatto ma manca il codice
per crearlo ogni volta che clicco sul pulsante così lo creo, uso la
formula, prendo i risultati e lo elimino.
Grazie

con il codice così si presume che il file Test.xls sia presente in C:\
Vorrei eliminarlo dopo l' uso e questo l' ho fatto ma manca il codice
per crearlo ogni volta che clicco sul pulsante così lo creo, uso la
formula, prendo i risultati e lo elimino.
******************************************************
objWorkbook = objExcel.Workbooks.Add
al posto di:
objWorkbook = objExcel.Workbooks.Open("C:\tuoFile.xls")
Ehmmm... ma non è che fai prima a scrivere una funzione
analoga in 
vb.net
 senza aprire tutte le volte Excel?


 analoga in 
vb.net
 senza aprire tutte le volte Excel?
Era la mia prima idea ma ho usato excel per utilizzare la formula
Inv.Norm che in VB non sono riuscito a ricreare...
Così comunque funziona anche se ci mette qualche secondo, se riesco
metto un avviso tipo "Attendere sto elaborando..."
Grazie del prezioso aiuto comunque
Marco