Avatar billede koppelgaard Praktikant
23. november 2011 - 19:48 Der er 14 kommentarer og
1 løsning

vba kode og SOLVER

Jeg har har et regnerark  hvori jeg ønsker at køre solver.
Jeg har optager følende kode:

SolverOk SetCell:="$G$3", MaxMinVal:=3, ValueOf:="0", ByChange:="$H$3:$J$3"
SolverSolve

Imidlertid får jeg fejlen:

sub or function not defined.
Samtidig markeres 'SolverOk'

Hvad kan årsagen være?
Avatar billede koppelgaard Praktikant
23. november 2011 - 19:59 #1
fejlen kommer når jeg køre koden
Avatar billede Ialocin Novice
23. november 2011 - 21:49 #2
Hej Koppelgaard

Har du mukighed for at maile en eksempelfil til mig ?

Med venlig hilsen, Nicolai
Avatar billede koppelgaard Praktikant
23. november 2011 - 22:09 #3
Hej Nicolai.
Jeg har sendt et eksempel
/Michael
Avatar billede Ialocin Novice
23. november 2011 - 22:14 #4
Hej Michael

Super ... jeg kigger lige på om det er noget hitte ud af ?

Med venlig hilsen, Nicolai
Avatar billede Ialocin Novice
23. november 2011 - 23:22 #5
Hej Michael

Jeg kender, som såden, ikke til Solver funktionen ... men umiddelbart tyder det på, at du ikke har defineret selve funktionen ... Er funktionen ikke defineret kan du ikke kalde/refererer til den, hvorfor fejlmeldingen opstår.

I VB Editoren under ... Tools > References findes et hav af referencer til alskens funktioner m.m.
De referencer der er vinget af er til rådighed i VBA.

Kunsten er nu, at finde SolverOk referencen ??

Jeg har Googlet lidt og fundet følgende:
http://support.microsoft.com/kb/153442
http://www.egr.msu.edu/~lira/supp/macro.htm

I min egen 2003 version af Excel har jeg fundet en reference der hedder: SOLVER ... Den var ikke på reference listen, så jeg måtte browse mig vej til den via browse knappen til højre for reference listen
... Og jeg fandt den for enden af denne sti:  C/Program Files/Microsoft Office/Office11/Library/SOLVER ... SOLVER.XLA


Funktionen kan nu kaldes uden definitionsfejlen.
Til gengæld fremkommer der er en anden fejl:
"An unexpected internal error occurred, or available memory was exhausted"

Om det har noget at gøre med min Excel version vs. din version eller om selve din SolverOk funktion trækker de rigtige data i de rigtige celler ????, pas :o/

Det snuser jeg lige lidt videre i ....

Med venlig hilsen, Nicolai
Avatar billede Ialocin Novice
23. november 2011 - 23:41 #6
Hej Michael

Så har jeg måske løsningen ... det virker umiddelbart hos mig ?

Når du har fundet din SOLVER.xla reference og vinget den af i VB Editoren under ... Tools > References

Så, prøv at tilføje linien: solver.Auto_open øverst i din macro, så koden kommer til at se således ud:

Sub Macro1()
    solver.Auto_open
    SolverOk setCell:="$G$3", MaxMinVal:=3, ValueOf:="0", ByChange:="$H$3:$J$3"
    SolverSolve
End Sub


Som jeg har forstået, så skal Solver referencen være åben før funktionen kan tages i brug ??
Du kan læse lidt nærmere her - Specielt i #7: http://www.excelforum.com/excel-programming/377346-solver-error.html

Med venlig hilsen, Nicolai
Avatar billede koppelgaard Praktikant
24. november 2011 - 06:48 #7
1000 tak Nicolai.
Du har virkelig forsket i sagen.
Jeg håber det duer i min Excel 2007
Jeg kikker på det!
Avatar billede koppelgaard Praktikant
24. november 2011 - 19:02 #8
Hej Nicolai.
Jeg har sendt en mail :-)
Avatar billede Ialocin Novice
24. november 2011 - 22:33 #9
Hej Michael

Ditto :o)
Avatar billede Ialocin Novice
25. november 2011 - 10:36 #10
Hej Michael

Prøv evt. at kontakte Kabbak, en anden Eksperten.dk bruger.
Han er godt kørende i Excel :o)

Blot til info:
http://www.kabbak.dk/


Med venlig hilsen, Nicolai
Avatar billede koppelgaard Praktikant
25. november 2011 - 15:35 #11
Hej Nicolai.
Det er altså rigtig sjovt at du nævner Kabbak.
Han er min kollega :-)
Jeg har talt med ham i dag, inden jeg så dit råd.
vi kom frem til følgende:

Sub Solve(r As Integer)
        SolverReset
        SOLVER.Auto_open
        SolverOk SetCell:="$G$" & r, MaxMinVal:=3, ValueOf:="0", ByChange:="$H$" & r & ":$J$" & r
        SolverAdd CellRef:="$H$" & r, Relation:=3, FormulaText:="0.1"
        SolverSolve True
End Sub
   
   
Sub runSolver()
    Dim r As Integer
    lastRow = Range("G65000").End(xlUp).Row
    For r = 3 To lastRow
        Cells(r, 7).Select
        Call Solve(r)
    Next
End Sub

Dine råd hjalp os på vej.
Den eneste ting jeg manglede og havde misforstået var 'Relation'.
Jeg var ikke klar over at relation 1,2,3 henviste til hhv.
'<=', '=' og '>='
Løsningen ovenfor sætter kolonne G så tæt på 0 som muligt ved at ændre kolonne H, I, J, samtidigt med at kolonne H forbliver større end 0.1.
Sender du et svar?
Avatar billede Ialocin Novice
25. november 2011 - 22:56 #12
Hej Michael

Ja, verden er lille :o)
Men dog ikke helt tilfældig ...

Jeg fattede ikke en brik af, hvad og hvordan Solve funktionen skulle bearbejde de mange data i dit tilsendte ark ??, hvorfor jeg Googlede lidt rundt! ... og i min søgen faldt jeg også over dig og din arbejdsgiver, hvilket mindede mig om, at jeg havde set, at en anden bruger herinde (Kabbak) faktisk havde samme arbejdsgiver (eller noget hen i samme retning ...)

At I så faktisk er ansat samme sted og kender hinanden, ja det er rent held fra min side :o)

Anyway, godt du fik svar på dit spørgsmål.

Jeg lægger hermed mit "svar" ... og jeg deler gerne med kabbak ... men det er op til dig ;o)

Med venlig hilsen, Nicolai
Avatar billede koppelgaard Praktikant
26. november 2011 - 07:54 #13
Nå ja. Kan da godt lige prøve at skrive til Kabbak og spørge om han vil have de 100 point:-)
Avatar billede kabbak Professor
26. november 2011 - 11:54 #14
ingen point til mig, jeg løste det jo på arbejdet ;-))
Avatar billede koppelgaard Praktikant
27. november 2011 - 17:42 #15
Du hørte manden ;-)
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Excel-kurser for alle niveauer og behov – find det kursus, der passer til dig

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester