Avatar billede tvc Seniormester
02. august 2006 - 22:03 Der er 17 kommentarer og
1 løsning

Læsning af celleindhold til variabel - VBA

Hej

Jeg har et lille problem med en programlinje, som jeg håber der er en der kan hjælpe mig med.

Jeg vil have læst indholdet (som er en tekststreng) af celle 1,2 og 2,2 og 3,2 o.s.v. til min variabel VNname. Jeg får bare ikke samlet nogle data op i min variabel - hvad kan jeg have gjort forkert?

Her er min programlinje:

VNname = Workbooks("AKS opsummering 2-8-6 version 1.xls").Worksheets("Navnedatabase").Application.Cells(VN, 2).Value

Mvh. TVC
Avatar billede excelent Ekspert
02. august 2006 - 22:47 #1
Jeg udleder af din beskrivelse, at værdierne skal samles i 1 variabel
så jeg håber da det er nogle korte tekster du har

Sub Samle()
For r = 1 To 30 ' ret til aktuel antal rækker
VNname = VNname & Sheets("Navnedatabase").Cells(r, 2).Value
Next
MsgBox ("") & VNname
End Sub
Avatar billede tvc Seniormester
03. august 2006 - 13:13 #2
Nej der har jeg nok ikke forklaret mig godt nok. Værdierne skal ikke samles i 1 variabel.

Jeg har en mappe (Opsummering) hvor jeg vil have samlet nogle oplysninger fra nogle andre mapper (Afdeling 1, 2, 3 o.s.v.).

I min opsummeringsmappe har jeg et navneark, hvor jeg har indtastet alle de navne (navne på celler i mine afdelingsfiler) som jeg vil have at min opsummeringsfil skal hente fra afdelingsfilerne efterhånden som de åbnes/lukkes.

VNname skal derfor bruges til efterfølgende at kunne hente værdi fra celle
Range(VNname).value
der derefter indsættes i min opsummering.

Mit problem er, at min
VNname = Workbooks("AKS opsummering 2-8-6 version 1.xls").Worksheets("Navnedatabase").Application.Cells(VN, 2).Value
ikke returnere nogle værdi.
Avatar billede excelent Ekspert
03. august 2006 - 13:31 #3
Hej tvc, jeg skal ud at se på cykkelløb nu, men hvis ikke andre har løst
gåden, så kikker jeg på det senere.

Når du skriver mapper - mener du så Projektmapper ?
Evt navne på de projektmapper der skal hentes værdier i?
samt hvilke celler
evt. lidt mere af din kode, så vi kan gennemskue din VNname linie
Avatar billede tvc Seniormester
03. august 2006 - 18:40 #4
Hej excelent

Jeg vil lige starte med at give mine projektmapper nogle navne så det er lettere at forklare.

Den projektmappe jeg vil have opsummeret data i kan vi kalde Opsummeringsprojektmappen og de projektmapper jeg vil hente data fra kan vi kalde Afdelingsprojektmapper. Der er en Opsummerings-projektmappe og mange Afdelingsprojektmapper.


Dine spørgsmål:
"Når du skriver mapper - mener du så Projektmapper ?"
Ja

"Evt navne på de projektmapper der skal hentes værdier i?"
Projektmapperne som der skal hentes værdier i kan have mange navne, da brugeren selv vælger hvad filerne skal gemmes som (der er forskellige medarbejdere som udarbejder filerne som efterfølgende skal opsummeres i denne mappe hvor min kode er i).

"samt hvilke celler"
Cellerne i de projektmapper der åbnes har navne som:
Afdeling
bmk_60
bmk_CV
bmk_indberetning

Disse navne er indtastet i et ark i min Opsummeringsprojektmappe. Arket hedder NameBase.

Når programmet kører skal det:
1. Finde den første Afdeligsprojektmappe i den angivne windowsmappe.
2. Åbne Afdelingsprojektmappen
3. Overføre indholdet fra den første celle fra NameBase fra Afdelingsprojektmappen til Opsummeringsprojektmappen i en celle der er bestemt ved et række nummer i NameBase.
4. Overføre indholdet fra den anden celle fra NameBase fra Afdelingsprojektmappen til Opsummeringsprojektmappen i en celle der er bestemt ved et række nummer i NameBase.
5. o.s.v. for alle Afdelingsprojektmapperne i windowsmappen.


Nedenfor har jeg indsat lidt mere af min programkode:


'Import af afdelingsdata

Application.ScreenUpdating = False


N = 0

AfdelingsFiler = Dir(AfdelingsSti & "*.xls") 'finder afdelingsfiler

Do
    Workbooks.Open AfdelingsSti & AfdelingsFiler, False 'åbner afdelingsfil - false betyder, at evt. link i ark opdateres inden data hentes
   
    'Opdatering af alle beregninger og kæder i afdelingsfil
    Application.CalculateFullRebuild

    'Opsamling af Afdelingsnavn samt tildeling af nummer
    N = N + 1
    AfdelingerHentet = AfdelingerHentet & vbCrLf & N & ". " & AfdelingsFiler
    AfdelingerHentetLog = AfdelingerHentetLog & Now() & " - " & Application.UserName & " - [" & AfdelingsFiler & "]" & vbCrLf
   
    'Information om data der hentes
    frmLæserData.Caption = "Indlæser data"
    frmLæserData.lblLæserFra.Caption = "Data indlæses fra :" & vbCrLf & vbCrLf & AfdelingsFiler
    frmLæserData.Show
    frmLæserData.Repaint
    Application.Wait (Now + TimeValue("0:00:1"))

    '------------------------------------------------------------------------
    'Sammenligning af variabler og overførelse af data fra afdelingsbilag til oversigt
    VN = 2
   
    Do
        'Undersøger om der er et navn i cellen ellers stopper do
        If IsEmpty(Range("B" & VN).Value) Then
          Exit Do
   
        'Læser variabel fra opsummerins projektmappens ark Navnedatabase
        VNname = Workbooks(ConFilnavn).Application.Cells(VN, NameColumn).Value
        VNrow = Workbooks(ConFilnavn).Application.Cells(VN, NameColumn + 1).Value
   
        Workbooks("ConFilnavn").Sheets("ConArknavn").Cells(4, 4) = "VNooo"
   
        Workbooks(ConFilnavn).Sheets(ConArknavn).Cells(VNrow, N + 1) = VNname
               
               
        VN = VN + 1
   
    Debug.Print VNname
    Debug.Print VNrow
   
 
    Loop
Avatar billede excelent Ekspert
03. august 2006 - 19:27 #5
ConFilnavn er i anførselstegn, det skal det kun være hvis det rent faktisk
er navnet på projektmapen, jeg gætter nu på det er en variabel

celle D4 får tekstværdien "VNooo" er det ok?

Workbooks("ConFilnavn").Sheets("ConArknavn").Cells(4, 4) = "VNooo"
Avatar billede tvc Seniormester
04. august 2006 - 01:08 #6
Undskyld!

Workbooks("ConFilnavn").Sheets("ConArknavn").Cells(4, 4) = "VNooo"

Var en test linje som skulle være slettet.
Avatar billede tvc Seniormester
04. august 2006 - 01:13 #7
Jeg tror faktisk at

Workbooks(ConFilnavn).Sheets(ConArknavn).Cells(VNrow, N + 1) = VNname

skal være

Workbooks(ConFilnavn).Sheets(ConArknavn).Cells(VNrow, N + 1) = Range(VNname).value

For at indsætte indholdet af cellen i Afdelingsprojektmappen.

Jeg sætter gerne flere point på spørgsmålet hvis du kan hjælpe mig med en løsning der kan hente data fra en anden fil ved brug af nogle definerede cellenavne.

Hilsen

TVC
Avatar billede excelent Ekspert
04. august 2006 - 11:31 #8
Jeg går ud fra at ConFilnavn er = med Opsumeringsprojektmappenavnet

Jeg tror du skal have Arknavnet med i følgende 2 linier
derimod mener jeg ikke det er nødvendigt med Application så det har jeg slettet

VNname = Workbooks(ConFilnavn).Sheets("NameBase").Cells(VN, NameColumn).Value
VNrow = Workbooks(ConFilnavn).Sheets("NameBase").Cells(VN, NameColumn + 1).Value

prøv lige om det hjælper
Avatar billede tvc Seniormester
04. august 2006 - 11:35 #9
Nu er jeg kommet frem til at denne linje virker når jeg har aktiveret Navnedatabase arket men ikke hvis jeg har aktiveret et andet ark i Opsummeringsprojektmappen.

Hvad har jeg skrevet forkert?

VNname = Workbooks("AKS opsummering 2-8-6 version 1.xls").Worksheets("Navnedatabase").Application.Cells(VN, NameColumn).Value
Avatar billede tvc Seniormester
04. august 2006 - 11:44 #10
Jeg får den ikke til at virke uden Application og den vil ikke hente data fra Navnedatabasearket hvis dette ikke er aktiveret. Den henter data fra cellen i det aktive ark.

I VBA projektvinduet hedder arkene NameBase (Navnedatabase) - Hvornår bruger man det ene og hvornår det andet?

I
VNname = Workbooks("AKS opsummering 2-8-6 version 1.xls").Worksheets("Navnedatabase").Application.Cells(VN, NameColumn).Value

må der være noget der mangler før at der kan hentes data fra Navnedatabasearket uden  at dette er aktiveret.
Avatar billede excelent Ekspert
04. august 2006 - 11:51 #11
I min test går det fint uden Application
og din burde også virke, kan ike umiddelbart se fejl i linien,
men du kan evt. prøve at aktivere arket inden der hentes data:

Workbooks("AKS opsummering 2-8-6 version 1.xls").Sheets("Navnedatabase").Activate
Avatar billede tvc Seniormester
04. august 2006 - 11:56 #12
Jeg har fået den til at virke ved:

-------------

BackSheet = ActiveSheet.Name
Sheets("Navnedatabase").Select


VNname = Workbooks(ConFilnavn).Sheets("Navnedatabase").Application.Cells(VN, NameColumn).Value

Sheets(BackSheet).Select

--------------

Men der må være en mere korrekt løsning ;-)
Avatar billede tvc Seniormester
04. august 2006 - 11:59 #13
Ja nu virker den også uden application, men hvorfor er Sheets("Navnedatabase") ikke nok til at fortælle programmet at der skal hentes data fra Navnedatabasearket?
Avatar billede excelent Ekspert
04. august 2006 - 12:00 #14
ja det undrer også mig, det gør den fint med min version Excel 2003 DK
Avatar billede tvc Seniormester
04. august 2006 - 12:14 #15
Det er samme version af Excel jeg har.
Avatar billede excelent Ekspert
04. august 2006 - 12:25 #16
jeg kan ikke fremprovokere samme fejl/problem i mine test
virker det ellers nu som det skal ?
Avatar billede tvc Seniormester
04. august 2006 - 12:25 #17
Meget underligt nu virker den uden at Navnedatabasearket skal aktiveres først.

Tak for hjælpen - smider du et svar?
Avatar billede excelent Ekspert
04. august 2006 - 12:27 #18
ok velbekom
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