Avatar billede folj Forsker
06. november 2014 - 10:38 Der er 9 kommentarer og
1 løsning

VBA - sammensætte variabel

Prøver lige at omformulere mit tidligere spørgsmål - mere konkret og ikke flere spørgsmål i ét...

Jeg har et ugenummer der ligger gemt i variablen UgeNr.

Jeg vil lave en anden variabel, der eksempelvis skal hedde WeekData_46.

Hvordan skriver jeg lige den linie hvor jeg vil lave variablen
Har selv forsøgt med nedenstående, men allerede i VBA-editoren meldes der fejl:

"WeekData_" & UgeNr = Range(Cells(22, 9), Cells(28, 9))
Avatar billede folj Forsker
06. november 2014 - 11:12 #1
@michael_stim:
nej det virker ihvertfald ikke. Det lyder måske hårdt men oplysninger "Kan intet om VBA" var egentlig overflødig. Men bare hæng på og eksperimenter for dig selv. Det er skide spændende at automatisere sine mest brugte excel-rutiner med VBA.

Havde håbet på hjælp fra en erfaren VBA-programmør.
Simple gæt - det har jeg allerede prøvet.


@VBA-eksperter:
Hvordan skriver jeg det første af linien, når hverken "WeekData_" & UgeNr eller michael_stims forslag virker.

mvh Folmer
Avatar billede michael_stim Ekspert
06. november 2014 - 10:53 #2
var WeekDataUgeNr = "WeekData_" & UgeNr

WeekDataUgeNr = Range...

Kan intet om VBA, bare en tanke.
Avatar billede KurtOA Praktikant
07. november 2014 - 08:56 #3
Hej Folmer - jeg er ikke helt sikker på at jeg forstår dit spørgsmål... men jeg prøver ;-)

SOm jeg forstår det vil du simpelthen inde i koden oprette en helt ny variabel - og så tildele den en værdi.
Jeg gætter på at du har brug for at kunne oprette mange variabler i din kode der bare er forskellige på ugenummeret.... fx Weekdata_46, Weekdata_47, Weekdata_48 osv...
Jeg er desværre overbevist om at det ikke kan lade sig gøre vha vba at oprette nye variabler ;-(

Men - jeg tror istedet din løsning findes i arrays - Arrays er ikke i vbaforstand variable - men alligevel kan du betragte dem som en måde at oprette variable på der indeholder mange værdier....
Prøv at søge her i grupperne på Array - der ligge flere guides der beskriver hvordan man bruger dem.
Ellers prøv at læse på denne side:
http://www.sitestory.dk/excel_vba/arrays.htm

der er grundprincipperne forklaret ;-)
Avatar billede folj Forsker
07. november 2014 - 09:11 #4
@KurtOA:

Du har ret i at jeg inde i koden, vil oprette en helt ny variabel - og så tildele den en værdi.

Da jeg ikke kunne sove i nat, kom jeg faktisk også frem til at det må være i et array jeg skal gemme disse ugedata.

Jeg må kunne oprette et array med 53 pladser, der kan indeholde data for alle årets uger. Derefter kan jeg gemme min små uge-arrays inde i det overordnede array.

Jeg har tidligere arbejdet en del med arrays, selvom det ofte er en udfordring, og kræver et stort overblik.
Avatar billede KurtOA Praktikant
07. november 2014 - 09:37 #5
Hvis du kun har brug for at gemme én værdi for hver uge kan du evt istedet for et array bruge en collection.  Det er en simplere måde at få sammen funktion - og collections giver nogle andre (og lettere) muligheder end arrays. Du kan finde en god beskrivelse her: http://sitestory.dk/excel_vba/collections.htm

mvh Kurt
Avatar billede bvirk Guru
07. november 2014 - 10:05 #6
Sådan anvendes Collections

    Dim WeekData As Collection
    WeekData.Add Range(Cells(22, 9), Cells(28, 9)), UgeNr

Collections har lidt begrænsede muligeder - hvis man har brug for at spørge til om items med en given key eksisterer er det værd at kigge på Collection's mere moderne afløser: Dictionaries - kræver reference til Microsoft scripting runtime 

    Dim WeekData As Dictionary
    WeekData.Add Range(Cells(22, 9), Cells(28, 9)), UgeNr

    If WeekData.Exists(ugeNr) Then 'true
        ...
Avatar billede bvirk Guru
07. november 2014 - 10:16 #7
Beklagelse manglede instantiering i #6:
  Dim WeekData As New Collection
  WeekData.Add Range(Cells(22, 9), Cells(28, 9)), UgeNr

...

  Dim WeekData As new Dictionary
  WeekData.Add Range(Cells(22, 9), Cells(28, 9)), UgeNr

...
Avatar billede bvirk Guru
07. november 2014 - 10:38 #8
mere sludder begået i #7
I dictionaries er key og value som parametre ombyttet - så det sidste i #7 skulle  have været:
  Dim WeekData As new Dictionary
  WeekData.Add UgeNr,Range(Cells(22, 9), Cells(28, 9))

-- illustret med et andet eksempel:

Function testItemArray()
    Set testItemArray = New Dictionary
    testItemArray.Add 1, "value of 1."
End Function


I brugerudtryk vinduet

?testItemArray().items()(0)
value of 1.
Avatar billede folj Forsker
05. januar 2015 - 10:27 #9
Vi skal lige have ryddet op og lukke spørgsmålet...

Det var KurtOA der kom med det afgørende argument med at det skal gemmes i et array...

@KurtOA:
smider du lige et svar, så kan jeg få lukket spm.
Avatar billede KurtOA Praktikant
05. januar 2015 - 11:09 #10
Håber du fik løst dit problem ;-)

mvh Kurt
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