PDA

View Full Version : [Excel vba] problema comm32


Scalor
19-02-2010, 08:52
in excel2007 vado in macro, metto il nome macro e poi crea, mi si apre il visual basic, vado in inserisci useform, mi appare la schermata a questo punto prendo dai controlli il mscomm l'icona del telefono e la porto nella useform, e mi appar eil messaggio di errore, il soggetto non è autorizzato a eseguire l'operazione specificata. perchè ?:muro:

MarcoGG
19-02-2010, 10:05
Strano, ho provato proprio ora con una UserForm di Excel 2003 senza alcun problema. Il controllo che ho usato è un "Microsoft Communication Control version 6.0", ossia :
C:\WINDOWS\system32\MSCOMM32.OCX
Vedi di trovare l'esatto nome del componente che crea problemi...

Scalor
19-02-2010, 10:13
proprio quello !
ho provato a fare un foglio nuovo di excel e poi creare la macro e ottengo lo stesso risultato non mi permette di usare il mscomm32

ho anche provato a registrarlo con regsvr32 c:\windows\system32\mscomm32.ocx
mi dice che è registrato correttamente ma poi non funziona.

non è che c'è una incompatibilità tra excel 2007 e visual basic 6 ?

MarcoGG
19-02-2010, 11:37
non è che c'è una incompatibilità tra excel 2007 e visual basic 6 ?

Excel 2007 non l'ho mai usato seriamente. Al 90% ho sempre usato Excel 2003, che per varie ragioni ritengo ancora oggi il migliore di tutti.
Mi sembra si possano escludere incompatibilità con le DLL installate dall'environment di VB6, se è ciò che intendi. Ho usato spesso DLL e OCX di VB6 in Excel senza problemi.
Forse hai fatto di recente qualche bel Windows Live Update che può aver sballato o sovrascritto diverse DLL in giro per il sistema... Mi rimane questa, come ultima ipotesi.

Scalor
19-02-2010, 12:26
maledetto visual basic !
è tutta la mattina che provo .
adesso provo a installare tutto in un altro pc e vediamo come va...

se uso visual basic direttamente tutto funziona, mentre se uso excel non va ! non vorrei che in excel 2007 non sia possibile usare mscomm nelle macro.

è possibile fare in visual basic e poi importare la macro in excel ? cioè senza da excel passare in visual basic ?
e in visual studio express edition sapete se è possibile farlo ?

MarcoGG
19-02-2010, 12:43
maledetto visual basic !
è tutta la mattina che provo .
adesso provo a installare tutto in un altro pc e vediamo come va...

se uso visual basic direttamente tutto funziona, mentre se uso excel non va ! non vorrei che in excel 2007 non sia possibile usare mscomm nelle macro.

è possibile fare in visual basic e poi importare la macro in excel ? cioè senza da excel passare in visual basic ?
e in visual studio express edition sapete se è possibile farlo ?

Momento. VS Express è .NET. Non confondiamo le cose.
Codice gestito VB-Express non funzionerà MAI in Excel.
MSCOMM32.OCX è un componente COM, non .NET, quindi suppongo che, quando dici che il componente non da problemi in VB, tu stia parlando di utilizzo di MSCOMM32.OCX in applicazione VB6.
Se invece usi MSCOMM32.OCX in un'applicazione VB.NET si può sempre fare, ma poi non aspettarti di fare un semplice copia-incolla del codice VB.NET in una macro VBA !
Se hai a portata di mano un Excel 2003, prova. Forse la colpa è proprio di Excel 2007...

Scalor
19-02-2010, 12:53
Momento. VS Express è .NET. Non confondiamo le cose.
Codice gestito VB-Express non funzionerà MAI in Excel.
MSCOMM32.OCX è un componente COM, non .NET, quindi suppongo che,
quando dici che il componente non da problemi in VB, tu stia parlando di utilizzo di MSCOMM32.OCX in applicazione VB6.

esatto con visual basic 6 mscomm32 funziona.
però come faccio da vb6 a importare la macro in excel cioè il codice e i form ? :confused:

Se invece usi MSCOMM32.OCX in un'applicazione VB.NET si può sempre fare, ma poi non aspettarti di fare un semplice copia-incolla del codice VB.NET in una macro VBA !
Se hai a portata di mano un Excel 2003, prova. Forse la colpa è proprio di Excel 2007...

il problema è che non ho il 2003 ! devo procurarmelo .
e l'altro problema è che vb.net lo so usare ancora meno di vb6 !
:muro: :muro: :muro: :muro: :muro: :muro:

MarcoGG
19-02-2010, 17:50
esatto con visual basic 6 mscomm32 funziona.
però come faccio da vb6 a importare la macro in excel cioè il codice e i form ? :confused:


Devo verificare, ma direi già al 90% che :
- Non puoi importare in VBA una Form VB6
- Puoi importare in VB6 una UserForm VBA
In pratica devi ricostruirti la/le Form VB6 replicandole in VBA, e poi fare copia/incolla del codice...


il problema è che non ho il 2003 ! devo procurarmelo .
e l'altro problema è che vb.net lo so usare ancora meno di vb6 !
:muro: :muro: :muro: :muro: :muro: :muro:


VB.NET non c'entra nulla con MSCOMM32.OCX e con quello che devi farci al momento, perciò tranquillo.
Trova un modo di provare prima con Excel 2003.
Ho usato parecchie DLL e controlli OCX esterni in Excel 2003, ma non ricordo davvero di aver mai ricevuto un errore del tipo "il soggetto non è autorizzato a eseguire l'operazione specificata".

Scalor
20-02-2010, 12:28
problema risolto si deve installare il service pack e il fix della licenza per adesso funziona.

http://support.microsoft.com/kb/194751/it

http://www.microsoft.com/downloads/details.aspx?FamilyId=CB824E35-0403-45C4-9E41-459F0EB89E36&displaylang=en&displaylang=en

Scalor
20-02-2010, 20:24
altro problema, se io ho il file di visual basic con il programmino che funziona, come faccio a passarlo nella macro di excel senza stare li a ricopiare tutto ?
c'è la possibilità di farlo.

MarcoGG
21-02-2010, 08:59
altro problema, se io ho il file di visual basic con il programmino che funziona, come faccio a passarlo nella macro di excel senza stare li a ricopiare tutto ?
c'è la possibilità di farlo.

Come già detto, NO.
Non puoi importare i file sorgenti direttamente da VB6 a VBA.
Per quanto riguarda il codice, un copia/incolla non mi sembra poi questo gran incubo...

Scalor
21-02-2010, 09:33
Come già detto, NO.
Non puoi importare i file sorgenti direttamente da VB6 a VBA.
Per quanto riguarda il codice, un copia/incolla non mi sembra poi questo gran incubo...

:cry: :cry: devo ricopiare tutti i menu dell'oggetto e il corrispondente codice da visual basic 6 a excel è un incubo ! :cry:

MarcoGG
21-02-2010, 10:55
:cry: :cry: devo ricopiare tutti i menu dell'oggetto e il corrispondente codice da visual basic 6 a excel è un incubo ! :cry:

Devi solo ricostruire le Form VB6 in VBA. Del codice puro fai solo copia/incolla.
Se in VB6 hai fatto le cose come si deve, ossia hai cercato di astrarre il più possibile la logica dall'interfaccia grafica, creando Function e Sub riutilizzabili, il procedimento sarà abbastanza indolore. Se invece non l'hai fatto, beh, sarà tutto più difficile.

Scalor
21-02-2010, 11:16
Devi solo ricostruire le Form VB6 in VBA. Del codice puro fai solo copia/incolla.
Se in VB6 hai fatto le cose come si deve, ossia hai cercato di astrarre il più possibile la logica dall'interfaccia grafica, creando Function e Sub riutilizzabili, il procedimento sarà abbastanza indolore. Se invece non l'hai fatto, beh, sarà tutto più difficile.

però i pulsanti in vb6 devo riscriversli tutti perchè sono numerati in nodo diverso !
meglio che mi prepari una decina di litri di camomilla !

Scalor
21-02-2010, 19:56
ma se io faccio un combobox, in visual basic faccio la lista delle opzioni

Private Sub Combo1_Change()

End Sub

Private Sub Form_Load()
Combo1.AddItem " opzione 1 "
Combo1.AddItem "opzione 2"
Combo1.AddItem "opzione 3"
Combo1.AddItem "opzione 4"

'Seleziona il primo elemento.
Combo1.ListIndex = 0
end sub

nel vb di excel posiziono il combobox nel userform, ci clikko sopra per visualizzare il codice e scrivere le opzioni, ma in excel dov'è il Form_load ? :confused:

MarcoGG
22-02-2010, 09:08
ma se io faccio un combobox, in visual basic faccio la lista delle opzioni
...
nel vb di excel posiziono il combobox nel userform, ci clikko sopra per visualizzare il codice e scrivere le opzioni, ma in excel dov'è il Form_load ? :confused:

Per le Combo l'evento è il Change() sia in VB6 che in VBA.
In VBA il Load() delle Form non c'è, in quanto non si tratta di Form "indipendenti" come in VB6. Le UserForm di Excel sono Dialog Forms dell'applicazione-Excel, e hanno chiaramente meno autonomia e flessibilità rispetto alle Forms di VB6. Solitamente si usa UserForm_Initialize() al posto del Load().

Scalor
22-02-2010, 11:19
ok incomincio a capirci qualcosa,

e per mostarre in una textbox un valore proveniente dalla seriale alla pressioned i un pulsante ?
Private Sub commandButton1_Click()

MSComm1.CommPort = 1 ' Seleziono la COM1
MSComm1.Settings = "9600,n,8,1" ' Le impostazioni della seriale
MSComm1.RThreshold = 1
MSComm1.PortOpen = True ' Apriamo la porta.
End Sub

Private Sub TextBox1_Change()

Dim Rx$
Rx$ = MSComm1.Input ' Leggo il contenuto del buffer di ricezione

Text1.Value = Rx$

End Sub