Ciao a tutti..
ho un applicazione in Excel che mi costruisce un Problema di PLI e richiama una funzione "risolvi" per risolverlo..
Bè funziona tutto perfettamente finchè non cerco di inserire un double nei vincoli (ultime righe di codice)...forse è dovuto a Chr(9)...non so controllate...vi prego...![]()
![]()
grazie...
[CODE]
' DICHIARAZIONE FUNZIONE RISOLVI : RICHIAMO LA FUNZIONE RISOLVI NELLA LIBRERIA GLPK.DLL
Private Declare Function risolvi Lib "/.../glpk-dll\Project2.dll" (ByVal p As Integer, ByVal perc As String, ByVal Max1 As Integer, ByVal NVincoli1 As Integer, ByVal NVariabili1 As Integer, ByVal NVariabili1 As Double) As Integer
Public Sub procedura() 'DEFINISCO UN METODO
Dim buffer As String
Dim cumul As String
Dim NVincoli As Integer
Dim NVariabili As Integer
NVincoli = 0
NVariabili = 0
Dim percorso As String
percorso = ThisWorkbook.Path 'restituisce la cartella di lavoro nella quale è in esecuzione il codice.
Sheets("variabili").Select 'RESTITUISCE IL FOGLIO DI LAVORO "VARIABILI"
Range("b1").Select 'SELEZIONA LA COLONNA B1 SUL FOGLIO EXCEL (DI LAVORO)
Open ThisWorkbook.Path + "\variabili.txt" For Output As #1 'APRE IL FILE IN MODALITA OUTPUT
buffer = "inizio"
' FINCHE LA STRINGA BUFFER è DIVERSA DA "" PRENDI IL VALORE DI ELLA CORRENTE.
While (buffer <> "")
buffer = ActiveCell.Value
If buffer <> "" Then
cumul = buffer ' PRENDI IL VALORE DI BUFFER E DALLO A CULUM
For i = 1 To 3
ActiveCell.Offset(1, 0).Range("A1").Select 'SELEZIONA A1 IN POSIZIONE 1,0
buffer = ActiveCell.Value 'DAI IL VALORE A BUFFER
cumul = cumul + Chr(9) + buffer 'AVANZAMENTO DI RIGA
Next
Print #1, cumul 'SCRIVE NEL FILE IL VALORE DI CULUM
ActiveCell.Offset(-3, 1).Range("A1").Select
NVariabili = NVariabili + 1
End If
Wend
Close #1 'CHIUDE IL FILE
'COME PER LE VARIBILI...
Sheets("vincoli").Select
Range("A1").Select
Open ThisWorkbook.Path + "\vincoli.txt" For Output As #1
buffer = "inizio"
While (buffer <> "")
buffer = ActiveCell.Value
If buffer <> "" Then
cumul = buffer
For i = 1 To 2
ActiveCell.Offset(0, 1).Range("A1").Select
buffer = ActiveCell.Value
cumul = cumul + Chr(9) + buffer
Next
Print #1, cumul
ActiveCell.Offset(1, -2).Range("A1").Select
NVincoli = NVincoli + 1
End If
Wend
Close #1
'DEFINISCE UNA MATRICE...E COSTRUISCE IL FILE DI TESTO
Dim NumElemMatrice As Integer
NumElemMatrice = 0
' cambia solo questa procedura se la mtrice è sparsa
Sheets("matrice").Select
Range("B2").Select
Open ThisWorkbook.Path + "\matrice.txt" For Output As #1
For j = 1 To NVincoli
For i = 1 To NVariabili
buffer = ActiveCell.Value
If buffer <> "0" And buffer <> "" Then
Print #1, CStr(j) + Chr(9) + CStr(i) + Chr(9) + buffer
NumElemMatrice = NumElemMatrice + 1
End If
ActiveCell.Offset(0, 1).Range("A1").Select
Next
ActiveCell.Offset(1, -NVariabili).Range("A1").Select
Next j
Close #1
'DEFINISCE LA FUNZIONE..E SCRIVE NEL FILE DI TESTO
Sheets("funzione").Select
Range("A1").Select
Dim max As Integer
max = ActiveCell.Value
'--------------------------------------------------------
Dim esito As Integer
'ASSEGNO AD ESITO IL VALORE DELLA FUNZIONE "RISOLVI"
esito = risolvi(NumElemMatrice, percorso, max, NVincoli, NVariabili, 60)
MsgBox ("Fatto:" + CStr(esito)) 'ASSEGNO IL VALORE ESITO CONVERTITO IN STRINGA.
'--------------------------------------------------------
Sheets("risultati").Select
Range("A1").Select 'SELEZIONA LA CELLA A1..
'SCRIVE NEL FILE LOG
Open ThisWorkbook.Path + "\log.txt" For Input As #1
Dim var As Variant
Input #1, buffer 'SCRIVE NEL FILE LOG LA VARIABILE BUFFER..
var = Split(buffer, Chr(9)) 'RESTITUISCE UNA MATRICE DI DIMENSIONE 1 E GLI ASSEGNA I VALORI DI BUFFER
ActiveCell.Value = var(0)
ActiveCell.Offset(0, 1).Range("A1").Select
ActiveCell.Value = var(1)
ActiveCell.Offset(1, -1).Range("A1").Select
Input #1, buffer
var = Split(buffer, Chr(9))
ActiveCell.Value = var(0)
ActiveCell.Offset(0, 1).Range("A1").Select
ActiveCell.Value = var(1)
ActiveCell.Offset(1, -1).Range("A1").Select
For j = 1 To NVariabili
Input #1, buffer
var = Split(buffer, Chr(9))
ActiveCell.Value = var(0)
ActiveCell.Offset(0, 1).Range("A1").Select
ActiveCell.Value = var(1)
ActiveCell.Offset(1, -1).Range("A1").Select
Next j
For j = 1 To NVincoli
Input #1, buffer
var = Split(buffer, Chr(9)) QUI DA ERRORE!!!
ActiveCell.Value = var(0)
ActiveCell.Offset(0, 1).Range("A1").Select
ActiveCell.Value = var(1)
ActiveCell.Offset(1, -1).Range("A1").Select
Next j
Close #1
End Sub


Rispondi quotando
