Avatar billede folj Forsker
09. marts 2014 - 16:53 Der er 16 kommentarer og
1 løsning

Gemme data-array i Workbook.Names, og trække data ud igen...

Nu prøver jeg at oprette et separat spm. på dette, i håb om at en ekspert kan hjælpe mig videre. Og nu passer overskriften bedre til problemet.

Jeg henter et data-array ind fra et range (ca 10 celler i samme kolonne), så nu ser arrayet sådan ud (kopieret fra Names:
="327A";"325A";"327A";"325A";"327A";"325A";"327A";"325A";"327A";#N/A;#N/A;#N/A}


Nu vil jeg gerne kunne tilgå de enkelte værdier i min For-løkke med
Jeg har lavet en lille sub-procedure, hvor jeg prøver at få den til at svare med data

Sub tstArray()
Dim FermStartData As Variant
FermStartData = ThisWorkbook.Names("FermStartDataML")

For i = 1 To 9
'For i = 1 To UBound(FermStartData)
MsgBox FermSlutRowNrML(i, 1)
MsgBox FermSlutRowNrML(i)
Next i
End Sub


men sub'en fejler på linierne MsgBox FermSlutRowNrML(i, 1), og MsgBox FermSlutRowNrML(i)
Fejlmeddelese "Sub or Function not defined"

Jeg har også forsøgt at hente data med
FermStartData = ThisWorkbook.Names("FermStartDataML").RefersToR1C1

og
FermStartData = ThisWorkbook.Names("FermStartDataML").Value

men alle forsøgene giver samme fejl

Men hvordan skal jeg så trække arrayet ud?
Håber der er en ekspert der kan hjælpe...
Avatar billede folj Forsker
09. marts 2014 - 18:47 #1
Første fejl kan jeg ligeså finde, (inden i overfalder mig med den):

Der var en fejl i arraynavnet i linierne med hvor jeg vil svare med MsgBox. Den er nu rettet til...
Men problemet er stadig næsten det samme Nu hedder fejlmeddelsen blot "Type mismatch" på alle 3 linier hvor arraynavnet indgår, først UBound(FermStartData, 1), defefter de to linier med MsgBox.
Samme fejlmedd. på alle; "Type mismatch".

min sub-procedure ser nåledes ud efter tilretning
Sub tstArray()
Dim FermStartData As Variant
FermStartData = ThisWorkbook.Names("FermStartDataML").RefersToR1C1

For i = 1 To 9
'For i = 1 To UBound(FermStartData, 1)
'MsgBox FermStartData(i, 1)
MsgBox FermStartData(i)
Next i
End Sub

Hvordan kan jeg komme ud af fejlen, og få den til at svare med data?
09. marts 2014 - 19:45 #2
Den her virker

Sub tstArray()
    Dim aFermStartData As Variant, i As Integer

    aFermStartData = Range(Replace(ActiveWorkbook.Names("FermStartData").RefersTo, "=", "")).Value
   
    For i = LBound(aFermStartData, 1) To UBound(aFermStartData, 1)
        MsgBox aFermStartData(i, 1)
    Next i
End Sub
09. marts 2014 - 19:52 #3
Og denne her
Sub tstArray()
    Dim aFermStartData As Variant, i As Integer

    aFermStartData = ThisWorkbook.Names("FermStartData").RefersToRange.Value
    For i = LBound(aFermStartData, 1) To UBound(aFermStartData, 1)
        MsgBox aFermStartData(i, 1)
    Next i
End Sub
Avatar billede excelent Ekspert
09. marts 2014 - 20:17 #4
Sub testArray()
    Dim rng As Variant
    Dim nr As Variant
    rng = ActiveWorkbook.Names("FermStartDataML").RefersToRange
    For Each nr In rng
        MsgBox nr
    Next nr
End Sub
Avatar billede folj Forsker
09. marts 2014 - 21:47 #5
Nå, det så ellers ud til at der slet ikke var nogen eksperter på i dag. Det skyldes nok det fine forårsvejr, men nu er det aften og eksperterne er tilbage online. Tak for det.

@smartoffice_dk:
Begge dine forslag fejler med Application-defined or Object-defined error.

@excelent:
Dit forslag fejler også på Application-defined or Object-defined error, og jeg kan se at det er linien:
rng = ActiveWorkbook.Names("FermStartDataML").RefersToRange
der aktiverer fejlen.

Er det fordi I har åbnet for add-ins, som jeg ikke har aktiveret, eller referencer til en eller anden object Libary

Til info, så har jeg både referencer til Microsoft Excel 14.0 Object Libary og Microsoft Office 14.0 Object Libary aktiveret.
Avatar billede folj Forsker
09. marts 2014 - 22:05 #6
Jeg har lige tjekket i min VBA-editor at man kan vælge de foreslåede object-egenskaber .RefersToRange, .Value og .RefersTo i de lister editoren kommer med når man sætter punktum efter objectet.

De vil allesammen kunne vælges på disse lister, og også i de kombinationer som i foreslår.

Så behøves i ikke at bruge kræfterne på at tjekke det.
Avatar billede excelent Ekspert
09. marts 2014 - 23:29 #7
Får samme fejl hvis det definerede navn og navn i denne linje ikke er ens

rng = ActiveWorkbook.Names("FermStartDataML").RefersToRange
Avatar billede folj Forsker
10. marts 2014 - 11:35 #8
@excelent:
det med navne - hvis ikke de er ens...

Jeg ved ikke helt om den oplysning bringer mig tættere på løsningen.
Jeg har tjekket igen at der ikke er fejl i navngivning.
Er vi ikke enige om at der ikke er fejl i navne i de løsningeforslag der er lagt frem (af dig og @smartoffice_dk) ?

Hvordan skal jeg komme videre
Hjælp mig - kære eksperter...
Avatar billede folj Forsker
10. marts 2014 - 11:37 #9
@smartoffice_dk:
Må jeg lige udfordre et at dine løsningaforslag (det hvor funktionen Replace() indgår).

Når jeg håndskriver et array, så skriver jeg som dette eksempel:
FermStartData = Array("327A","325A","327A","325A","327A","325A")

Er det det du gerne vil opnå med din replace-function?
og mangler der så ikke en startparantes?
og skal de ";" der er brugt til separator ikke erstattes med et komma.
10. marts 2014 - 17:26 #10
I min kode mangler  ML  i det navngivne område "FermStartDataML", ThisWorkbook.Names("FermStartData")
Hvis du fikser det, så burde de virke hos dig.
Avatar billede folj Forsker
11. marts 2014 - 09:41 #11
@smartoffice_dk:
Nej, nu skal vi lige passe på ikke at blande Names sammen med variablenavne...
Jeg bruger ganske vist Names("FermStartDataML"), men jeg trækker værdien ind i et array som jeg kalder FermStartData - og lad dig ikke forvirre af at 2 linier er kommenteret ud med ' foran linien

Sub tstArray()
Dim FermStartData As Variant
FermStartData = ThisWorkbook.Names("FermStartDataML").RefersToR1C1

For i = 1 To 9
' For i = 1 To UBound(FermStartData, 1)
' MsgBox FermStartData(i, 1)
MsgBox FermStartData(i)
Next i
End Sub


Men for at gå lidt systematisk til værks vil jeg først forsøge om jeg kan hente et par alm variabler ud, (altså en enkelt talværdi - ikke array) som jeg også gemte under names også.
Det prøver jeg lige først, og så kan det godt tænkes at jeg får brug for yderligere hjælp.
Avatar billede folj Forsker
11. marts 2014 - 10:11 #12
Nu har jeg forsøgt med at trække en enkelt-variabel ud, der var gemt i Names, og det lykkes uden fejl.

Sub TstEnkeltVariable()
' når jeg ser i Name Maneger, kan jeg se at navnet FermSlutRowNrIA indeholder værdien "=16". Det er dog kun talværdien jeg vil have ud, så derfor bruger jeg Replace()
MyVar = Replace(ActiveWorkbook.Names("FermSlutRowNrIA"), "=", "")
MsgBox MyVar
End Sub


Læg mærke til at det nu er direkte fra ThisWorkbook.Names uden brug af .Refers .RefersToRange eller .Value.
Jeg forestiller mig at, nu hvor jeg har noget enkelt der virker, så kan vi måske bygge ud derfra, og nå frem til at det er et array vi håndterer sådan.

Jeg har forsøgt mig frem med forskellige kombinationer med og uden brug af .Refers .RefersToRange eller .Value. Jeg har dog ikke kunne ramme noget der virker. Det fejler altid med Application-defined or Object-defined error eller med Type Mismatch, hvis det jeg trækker ud ikke kan gennemløbes som et array.

Nogen forslag ?
11. marts 2014 - 13:24 #13
Jeg er som ikke forvirret, der er blot navngivningsfejl i min kode ifht. dine navne... så her er samme kode som ovenover, blot med ML tilføjet til det navngivne range...

Denne kode er testet og virker:
Sub tstArray()
    Dim aFermStartData As Variant, i As Integer

    aFermStartData = ThisWorkbook.Names("FermStartDataML").RefersToRange.Value
    For i = LBound(aFermStartData, 1) To UBound(aFermStartData, 1)
        MsgBox aFermStartData(i, 1)
    Next i
End Sub


Hvis det giver dig problemer, så snyd ...!!!
Gå ind i NameManageren og ændre dit range... hvis "FermStartDataML" referer til A1:A10 så ændre det til en kolonne mere A1:B10 - OK og luk name manageren.
Åben den igen og ændre det tilbage... can't tell you why, but sometimes that have helped...!
16. marts 2014 - 10:08 #14
Fik du det løst?
Avatar billede folj Forsker
24. marts 2014 - 11:12 #15
eg har ikke glemt sagen.
Det er noget jeg bruger i arbejdessammenhæng.

Jeg endnu ikke har fundet den rigtige løsning, men det arbejder jeg videre på når min prioritering af arbejdsopgaver tillader det.
Avatar billede folj Forsker
28. august 2014 - 10:10 #16
Jeg har ikke fået udarbejdet en løsning endnu, men jeg må gøre noget, for at få lukket det snart gamle spørgsmål.

Jeg skal lige nævne at jeg har elimineret den fejl der var på navngivning af variabel.

Jeg er nået til erkendelse af at jeg må bruge en lidt tungere løsning.
I stedet for at hente data, og lægge dem direkte ind i ThisWorkbook.Names, så bliver løsningen at hente data ind, til at ark i min arbejdsfil. Herfra kan jeg så hente data ind på normal måde i det array, jeg gerne vil bruge i min VBA-procedure.

Jeg har også måttet erkende at man godt kan lægge enkeltdata direkte ind i ThisWorkbook.Names, men arraydata kommer til at optræde anderledes på den måde, og da der ikke er nogen der har kunnet hjælpe mig til at tilgå arrayet, har jeg måttet erkende at jeg må længere ned på jorden -  der findes åbenbart ikke nogen nemmere genvje her.

Selvom det bliver en tungere løsning, så bliver den ikke tungere at arbejde med - kun lidt tungere i programmerings-situationen.

Excelent og smartoffice smid lige at svar begget to, så scorer i lidt points for jeres engagement i mit spm.
Avatar billede folj Forsker
29. august 2014 - 09:41 #17
Jeg prøver lige igen...
@Excelent og
@smartoffice
smid lige et svar hver især, så scorer i lidt points for jeres engagement i mit spm.
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