Avatar billede folj Forsker
28. februar 2014 - 15:40 Der er 9 kommentarer og
1 løsning

Begrænsninger i egne funktioner...

Mit spørgsmål går mest på om der er nogle begrænsninger på hvad man kan udføre med egne functions.

Jeg har en function, skal åbne en anden fil (ReadOnly), og hente nogle data, fom functionen skal bruge til sit svar.

Min funktion:

Function IsFermenting(Tank As String, TimeStamp As Date)
Dim StartTime As Date, EndTime As Date, StartUpTime As Date, SlowDownTime As Date
Dim StartUpHours As Integer, SlowDownHours As Integer
Dim StartUpOutput As Integer, RunningOutput As Integer, SlowDownOutput As Integer

Dim FermStartData As Variant
Dim FermSlutData As Variant
Dim OpenFilePath As String, OpenWb As String, ShName As String
Dim FermSlutRowNr As Integer

OpenFilePath = "G:\Dokumentation\IM1Fermentation_Recovery\Fermentation\Alle planer oversigter Lister tegninger skilte\Gæringsplaner\"
OpenWb = "FermentingPlan.xls"
ShName = "FermentingPlan A"
    Application.ScreenUpdating = False
    If Not IsOpened(OpenWb) Then    ' tjekker om filen er åben
        Workbooks.Open Filename:=OpenFilePath & OpenWb, ReadOnly:=True ' åbner filen
MsgBox "File opened as ReadOnly"
    Else
        Windows(OpenFilePath).Activate
    End If
  FermSlutRowNr = Workbooks(OpenWb).Sheets(ShName).Range("SlutRow").Row
MsgBox FermSlutRowNr
    FermStartData = Workbooks(OpenWb).Sheets(ShName).Range("F5:F" & FermSlutRowNr)    ' Finder FermStartData og læser dem ind i et Array
    FermSlutData = Workbooks(OpenWb).Sheets(ShName).Range("J5:J" & FermSlutRowNr)    ' Finder FermSlutData og læser dem ind i et Array
    ActiveWorkbook.Close False    ' lukker Produktionsplan.xls igen
    Application.ScreenUpdating = True

For i = 1 To UBound(FermStartData, 1)
MsgBox FermStartData(i, 1)
Next i

og så kommer der noget mere kode, som jeg ikke skla trætte Jer med...

End Function


Som det ses har jeg som test indbygget et par MsgBoxes, men det er kun den første der svarer, og når jeg har funktionskaldet i 2 celler, og starter beregning, så svares der altså 2 gange.

Er der nogle begrænsninger eller hvad er årsagen til at jeg kun får svar fra den første msgbox, der svarer på i hvilken række celles som jeg har navngivet "SlutRow" findes...
Avatar billede claes57 Ekspert
28. februar 2014 - 15:50 #1
Den kan måske ikke mgsbox når anden workbook er åben. Drop den, og se om ikke den når ned til tredie mgsbox.
Avatar billede MadsHaupt Juniormester
28. februar 2014 - 16:49 #2
Får du nogen fejlmeddelse?.
Avatar billede folj Forsker
01. marts 2014 - 09:49 #3
@MandHaupt:
Nej ingen fejlmeddelelse...

@claes57:
Husk nu at den svarer jo fra den første msgbox (2 gange, fordi jeg har 2 celler med hver et funktionskald)

Jeg kunne selvfølgelig prøve at fjerne den første og se om den næste så svarer, men jeg har problemet på arbejde og kan først teste igen mandag.
men det med  at mgsbox måske ikke svarer når anden workbook er åben har jeg svært ved at tro på.

Andre bud er velkomne...
Avatar billede RogerWilco Seniormester
01. marts 2014 - 17:58 #4
Skal
Windows(OpenFilePath).Activate

ikke være
Windows(OpenFilePath & OpenWb).Activate
Avatar billede kabbak Professor
02. marts 2014 - 07:16 #5
Windows(OpenFilePath).Activate
skal være
Windows(OpenWb).Activate
Avatar billede MadsHaupt Juniormester
02. marts 2014 - 10:47 #6
Windows(OpenFilePath).Activate
skal være
Windows(OpenFilePath & OpenWb).Activate
Avatar billede folj Forsker
03. marts 2014 - 13:13 #7
Nu har jeg udeladt den første MsgBox, som foreslået af claes57, så der kun er de to sidste MsgBoxe tilbage, der skal svare med nogle af de data der er hentet ind.

Og der kom også det ønskede svar.

Og til I andre der har svaret at der skal stå
Windows(OpenWb).Activate, hvis vi kommer i den situation at filen allerede er åben.
Det er rigtigt nok, men i mine tests har vi ikke været i den situation, fordi den henter sine svar i en fil der ikke er åben.

Det er altså claes57, der er kommet med det der hjalp mig videre, selvom jeg ikke blev klogee på evt. begrænsninger i de functions man selv tamper sammen.

@claes57: smid lige et svar.
Avatar billede folj Forsker
05. marts 2014 - 16:08 #8
Til spørgsmålet om begrænsninger i egne functioner fandt jeg noget på nettet. Her kaldes egne for UDF (User Defined Functions):

Limitations of UDF's
• Cannot "record" an Excel UDF like you can an Excel macro.
• More limited than regular VBA macros. UDF's cannot alter the structure or format of a worksheet or cell.
• If you call another function or macro from a UDF, the other macro is under the same limitations as the UDF.
• Cannot place a value in a cell other than the cell (or range) containing the formula. In other words, UDF's are meant to be used as "formulas", not necessarily "macros".
• Excel user defined functions in VBA are usually much slower than functions compiled in C++ or FORTRAN.
• Often difficult to track errors.
• If you create an add-in containing your UDF's, you may forget that you have used a custom function, making the file less sharable.
• Adding user defined functions to your workbook will trigger the "macro" flag (a security issue: Tools > Macros > Security...).

Læs evt selv aartiklen på:
http://www.vertex42.com/ExcelArticles/user-defined-functions.html
Avatar billede folj Forsker
06. marts 2014 - 10:08 #9
@claes57: Kommer der ikke et svar fra dig også
Avatar billede folj Forsker
31. marts 2014 - 09:39 #10
Der kommer åbenbart tikke svar fra flere bidragydere, og nu er det lukketid...

Tak for jeres indsats.
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