• Privacywetgeving
    Het is bij Helpmij.nl niet toegestaan om persoonsgegevens in een voorbeeld te plaatsen. Alle voorbeelden die persoonsgegevens bevatten zullen zonder opgaaf van reden verwijderd worden. In de vraag zal specifiek vermeld moeten worden dat het om fictieve namen gaat.

type mismatch

Status
Niet open voor verdere reacties.

nobody11

Gebruiker
Lid geworden
20 dec 2007
Berichten
552
Code:
Sub solverMacro3()
Dim i As Variant

For i = 7 To 15 Step 0.5
    OplosserOk celbepalen:="$B$18", MaxMinWaarde:=2, _
        DoorVerandering:="$B$16:$F$16"
        oplossertoevoegen celverw:="$B$18", relatie:=2, formuletekst:=i
            OplosserOplossen True
        Range("B16:F16").Copy
Range("D65536").End(xlUp).Select
Selection.Offset(1, 0).Select
ActiveSheet.Paste
Selection.Offset(0, -3).Select ' target return
ActiveCell.Value = i
Selection.Offset(0, 1).Select 'volatility
ActiveCell.Value = [$B$20]
Selection.Offset(0, 1).Select 'expected return
ActiveCell.Value = [$B$18]
Next i

End Sub

momenteel heb ik deze code.. hij loopt echter vast bij next i met type mismatch, (runtime error 13).. wat is er fout met mijn code?

kan deze code overigens korter? ik weet dat ik teveel werk met select enz, mr ik ben niet goed in VBA..

bedankt!
 
gebruik
Code:
with cells(rows.count,4).end(xlup)
  [B16:F16].copy .offset(1)
 .offset(1,-3).resize(,3)=split(i & "|" & [B20] & "|" & [B18] ,"|")
End With
als vervanging van :
Code:
Range("B16:F16").Copy
Range("D65536").End(xlUp).Select
Selection.Offset(1, 0).Select
ActiveSheet.Paste
Selection.Offset(0, -3).Select ' target return
ActiveCell.Value = i
Selection.Offset(0, 1).Select 'volatility
ActiveCell.Value = [$B$20]
Selection.Offset(0, 1).Select 'expected return
ActiveCell.Value = [$B$18]
 
gebruik
Code:
with cells(rows.count,4).end(xlup)
  [B16:F16].copy .offset(1)
 .offset(1,-3).resize(,3)=split(i & "|" & [B20] & "|" & [B18] ,"|")
End With
als vervanging van :
Code:
Range("B16:F16").Copy
Range("D65536").End(xlUp).Select
Selection.Offset(1, 0).Select
ActiveSheet.Paste
Selection.Offset(0, -3).Select ' target return
ActiveCell.Value = i
Selection.Offset(0, 1).Select 'volatility
ActiveCell.Value = [$B$20]
Selection.Offset(0, 1).Select 'expected return
ActiveCell.Value = [$B$18]


bedankt! er komt wel in cel A26 bv =i ipv i.. VBA geeft blijkbaar aan i de waarde =5 bv ipv 5.. hoe kan ik dit oplossen?
 
Laatst bewerkt:
gebruik
Code:
with cells(rows.count,4).end(xlup)
  [B16:F16].copy .offset(1)
 .offset(1,-3).resize(,3)=split(i & "|" & [B20] & "|" & [B18] ,"|")
End With
als vervanging van :
Code:
Range("B16:F16").Copy
Range("D65536").End(xlUp).Select
Selection.Offset(1, 0).Select
ActiveSheet.Paste
Selection.Offset(0, -3).Select ' target return
ActiveCell.Value = i
Selection.Offset(0, 1).Select 'volatility
ActiveCell.Value = [$B$20]
Selection.Offset(0, 1).Select 'expected return
ActiveCell.Value = [$B$18]


weet je toevallig hoe de "type mismatch" verklaard kan worden? Hij stotp de subroutine steeds bij next i...
 
weet je toevallig hoe de "type mismatch" verklaard kan worden? Hij stotp de subroutine steeds bij next i...

ik heb ondertussen ontdekt dat ik "i" moet definiëren als integer bv. mr als ik dan de procedure laat lopen, dan geeft hij aan als error:
er is een onverwachte fout opgetreden, of er is niet meer voldoende geheugen beschikbaar..


dat laatste lijkt met zeer raar aangezien ik met een 2,4 ghz en 4 gig ram hier zit.. is er een fout in mijn code?

Code:
Sub solverMacro3()
Dim i As Integer

For i = 5 To 15 Step 0.25
solverreset

    OplosserOk CelBepalen:="$B$20", MaxMinWaarde:=2, _
        DoorVerandering:="$B$16:$F$16"
        OplosserToevoegen Celverw:="$B$18", Relatie:=2, Formuletekst:=i
        OplosserToevoegen Celverw:="$F$17", Relatie:=2, Formuletekst:="1"
            OplosserToevoegen Celverw:="$B$16:$F$16", Relatie:=3, Formuletekst:="0"
            OplosserOplossen True


With Cells(Rows.Count, 4).End(xlUp)
  [B16:F16].Copy .Offset(1)
 .Offset(1, -3).Resize(, 3) = Split(i & "|" & [B20] & "|" & [B18], "|")
End With
Next i

End Sub
 
Het zal dit wel zijn:

For i = 5 To 15 Step 0,25

En Next is voldoende, die i achter next is overbodig.
 
Het zal dit wel zijn:

For i = 5 To 15 Step 0,25

En Next is voldoende, die i achter next is overbodig.

nee, de 0.25 is correct, als ik het verander in 0,25 dan geeft hij een error..


nu lukt het ondertussen, maar hij geeft een error ivm te weinig geheugen.. ik kan me dit moeilijk inbeelden; ik zie toch nergens een fout in mijn code.. :(
 
Variant

en als je i definieert als variant ipv integer?
 
nee, heb al alles geprobeerd.. ik ben er ondertussen wel al uit dat bij mijn vba precies 0.25 als 2500 wordt aanzien.. dus ik moet dit zien aan te passen in step 0,25 (maar gewoon 0,25 typen gaat niet.. "0,25" dan ziet hij het als tekst string dacht ik.. ik probeer eens 0.00025

of is er een manier dat hij 0.25 ziet als bij ons 0,25?

het lukt nog steeds niet, maar ben al iets verder (hij ziet 0,25 al correct)..

het probleem situeert hem nu dat in mijn code
de i niet als een waarde wordt aanzien.. maar als tekst denk ik, aangezien ik een type mismatch krijg..

het probleem zit hem volgens mij in dit stuk code.. als ik de i vastzet op een waarde bv 7 dan leest hij het goed.. maar als ik de 7 verhoog met bv 0,25, dan gaat het mis..

Code:
      OplosserToevoegen Celverw:="$B$18", Relatie:=2, Formuletekst:=i
 
Laatst bewerkt:
bij wijze vn illustraite, als ik deze code neem, dan ziet hij 7,5 als 75.. met 7.5 idem..

Code:
Sub solverMacro3()
Dim i As Variant

[COLOR="Red"]i = "7,5"[/COLOR]
solverreset
    OplosserOk CelBepalen:="$B$20", MaxMinWaarde:=2, _
        DoorVerandering:="$B$16:$F$16"
        OplosserToevoegen Celverw:="$B$18", Relatie:=2, Formuletekst:=i
        OplosserToevoegen Celverw:="$F$17", Relatie:=2, Formuletekst:=1
        OplosserToevoegen Celverw:="$B$16:$F$16", Relatie:=3, Formuletekst:=0
            OplosserOplossen True


With Cells(Rows.Count, 4).End(xlUp)
 [B16:F16].Copy .Offset(1)
.Offset(1, -3).Resize(, 3) = Split(i & "|" & [B20] & "|" & [B18], "|")
End With


End Sub
 
Vertel eens....

waar komen solverreset, OplosserOk en OplosserToevoegen vandaan.
Zijn dat UDF's; plaats ze dan hier.

Code:
    OplosserOk "$B$20", 2,"$B$16:$F$16"
    OplosserToevoegen "$B$18", 2, i
    OplosserToevoegen "$F$17", 2, 1
    OplosserToevoegen "$B$16:$F$16", 3, 0
    OplosserOplossen True
En vermijd de herhaling van de namen van argumenten.

Verwijder de declaratie van de variabele i (en zonodig Option Explicit)
VBA doet dat beter voor jou dan je zelf kunt.
 
Laatst bewerkt:
Vertel eens....

waar komen solverreset, OplosserOk en OplosserToevoegen vandaan.
Zijn dat UDF's; plaats ze dan hier.

Code:
    OplosserOk "$B$20", 2,"$B$16:$F$16"
    OplosserToevoegen "$B$18", 2, i
    OplosserToevoegen "$F$17", 2, 1
    OplosserToevoegen "$B$16:$F$16", 3, 0
    OplosserOplossen True
En vermijd de herhaling van de namen van argumenten.

die oplosser codes, dat is omdat mjn library i h nederlands is.. ik zou dit graag i h engels hebben.. mijn add in van solver is in het nederlands, ik zou die graag i h engels hebben...iemand suggestie hoe dit kan?
 
die oplosser codes, dat is omdat mjn library i h nederlands is.. ik zou dit graag i h engels hebben.. mijn add in van solver is in het nederlands, ik zou die graag i h engels hebben...iemand suggestie hoe dit kan?

het probleem zit hem blijkbaar in de solver functie zelf.. die kan geen decimalen als constraint zien.. wel 55/10 mr nt 5,5.. andere oplossing zoeken dus :)

toch bedankt vr al de moeite hier!!

ps: kan iemand mij zeggen hoe ik die add-in in het engels kan zetten ipv nederlands? mijn excel is volledig engels,behalve de add-ins..
 
snb, weet je toevallig hoe ik in jou code de pastespecial (only values) kan invoegen?
Code:
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone

gebruik
Code:
with cells(rows.count,4).end(xlup)
  [B16:F16].copy .offset(1)
 .offset(1,-3).resize(,3)=split(i & "|" & [B20] & "|" & [B18] ,"|")
End With
als vervanging van :
Code:
Range("B16:F16").Copy
Range("D65536").End(xlUp).Select
Selection.Offset(1, 0).Select
ActiveSheet.Paste
Selection.Offset(0, -3).Select ' target return
ActiveCell.Value = i
Selection.Offset(0, 1).Select 'volatility
ActiveCell.Value = [$B$20]
Selection.Offset(0, 1).Select 'expected return
ActiveCell.Value = [$B$18]
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan