Avatar billede folj Forsker
11. december 2014 - 12:16 Der er 8 kommentarer og
1 løsning

Indsætte formel med VBA

Indsætte formel med VBA

Efter at have kopieret en masse data med VBa, skal jerg lige sikre mig at der står den rigtige formel i celle(M6), så jeg senere kan kopiere den med "fyldhåndtaget".

men min kode fejler på "Application-defined or object-defined error"...
Sub FormulaInsertTest()

FirstDateRow = 6
LastDateRow = 16
Dim RealFormel As String
Dim NyFormel As String
RealFormel = Sheets(1).Range("M6").Formula
NyFormel = "=IF(WEEKDAY(A6;11)=1;CONCATENATE(""Uge "";ugenr(A6));"""")"
MsgBox RealFormel & Chr(10) & NyFormel ' får nu de 2 formler vist i en msgbox, så jeg kan kontrollere at den jeg selv har genereret ovenover, er identisk med den jag henter ind fra sheet(1) celle M6

  ' herunder indsætter vi en formel øverst i kolonne M
  Range("M" & FirstDateRow).Select
  Range("M" & FirstDateRow).Formula = NyFormel

End Sub


koden udløser en fejl lige efter MsgBox'en: "Application-defined or object-defined error", og debuggeren markerer at det er linien "Range("M" & FirstDateRow).Formula = NyFormel" der fejler.

Har forsøgt med .Value og .Text i stedet for .Formula, men det ændrer ikke noget

Hvad er det der udløser denne "Application-defined or object-defined error" ?
Avatar billede supertekst Ekspert
11. december 2014 - 12:43 #1
Det er tilsyneladende selve indholdet i Nyformel der giver problemet.

Har prøvet med en anden formel - så er der ikke fejl.
Avatar billede folj Forsker
11. december 2014 - 13:34 #2
@supertekst: Ja det var jeg også selv kommet frem til after at have forsøgt med en langt mere simpel formel...

Men hvordan kommer jeg videre.
Det er lidt en mararidt med alle disse dobbelte ("")dubble quotes.
Men det er jo derfor jeg andte med at opstille dem i en MsgBox, så jeg her i testfasen kan tjekke at jeg genererer en formel der er identisk med den rigtige.

Hvis du tænker (alternativt) og forslå at vi blot kopierer formlen fra Sheets(1).Range("M6").Formula, så kan det ikke bruges, da jeg ikke kan være sikker på at formlen er der. Den kunne potentielt være overskrevet med en værdi manuelt...
Avatar billede supertekst Ekspert
11. december 2014 - 14:38 #3
ugenr i formlen ??
Avatar billede store-morten Ekspert
11. december 2014 - 17:52 #4
Komma, i stedet for ;

NyFormel = "=IF(WEEKDAY(A6,11)=1,CONCATENATE(""Uge "",ugenr(A6)),"""")"

Og #3 ugenr i formlen ??
Avatar billede store-morten Ekspert
11. december 2014 - 19:33 #5
ugenr i formlen ?? oversat til:

NyFormel = "=IF(WEEKDAY(A6,11)=1,CONCATENATE(""Uge "",WEEKNUM(A6)),"""")"
Avatar billede folj Forsker
12. december 2014 - 09:28 #6
Jeg tænkte nok at nogen ville falde over at der var noget de ikke kendte...
Det er såmen bare en brugerdefineret function, som jeg selv har kopieret fra eksperten.dk i sin tid, da WEEKNUM() ikke kunne returnere korrekt dansk ugenummer.

I nyere versioner af Excel, er WEEKNUM blevet opdateret:
WEEKNUM(serial_number,[return_type])

og hvis man bruger den med return_type 21, så returnerer den korrekt dansk ugenummer uanset årstal.

Jeg håber at ovenstående påstand holder vand - alternativt har jeg blot ikke haft kendskab nok til det med, at der skal bruges option 21.

Jeg valge i hvertfald ret tidligt at overgå til en brugerdefineret function, som jeg kørte med i mange år, indtil Excel blev opdateret(eller indtil jeg blev klogere.

Men det kan vel ikke være det at det er en brugerdefineret function der fremkalder problemet...
Anyway: jeg tester om der er forskel på om jeg bruger en brugerdefineret eller en standard-function i den sammenhæng...
Avatar billede folj Forsker
12. december 2014 - 10:31 #7
jeg har lige testet, om der er forskel på om jeg bruger en brugerdefineret eller en standard-function i den sammenhæng...

Det gør ingen forskel - samme fejl "Application-defined or object-defined error"...
Avatar billede folj Forsker
12. december 2014 - 10:44 #8
@store-morten: "Super-store-morten" må du gerne kalde dig fremover...

Det gør faktisk forskellen. så når jeg i min makro skriver
NyFormel = "=IF(WEEKDAY(A6,11)=1,CONCATENATE(""Uge "",WEEKNUM(A6,21)),"""")"

så kommer formlen i cellen faktisk til at fremtræde som:
=IF(WEEKDAY(A6;11)=1;CONCATENATE("Uge ";WEEKNUM(A6;21));"")
(nu fremtræder kommaerne i makroen som semikolon)

Jeg beklager at jeg først er nået til din post nu. Det er til brug i arbejdssammenhæng, så derfor har jeg ikke været på banen i aftes og i nat.

Smid lige et svar, så er der lidt points for det rigtige og afgørende svar...

Takker fordi du lige kunne komme med de rigtige "Guldkorn".
Avatar billede store-morten Ekspert
12. december 2014 - 14:21 #9
Type 21:

Start ugen på en mandag og System 2

System 2   
Den uge, der indeholder den første torsdag i året, er den første uge i året, og den nummereres som uge 1. Dette system er den metodologi, som er angivet i ISO 8601, der er bedre kendt som det europæiske ugenummereringssystem.
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

IT-JOB

SOS International

Principal Solution Architect

SOS International

Cisco Call Manager Specialist

BEC Financial Technologies

Java software engineer (regular)

Digitaliseringsstyrelsen

Systemforvalter til borger.dk

SOS International

Cloud Native Architect