Avatar billede Sidsel Seniormester
18. juli 2019 - 12:14 Der er 7 kommentarer og
1 løsning

vba .Find i flere ark i en anden workbook.

Jeg vil gerne bruge funktionen .Find til at søge efter en værdi (rngcelle.offset(0,-8)) i et andet regneark, og derefter indsætte værdien til højre for i rngcelle.

her er min kode:
rngcelle.Value= _
Workbooks(2).Sheets("Kapslinger").Range("c10:c18").Find(rngcelle.Offset(0, -8).Value).Offset(0, 1).Value * 100

Dette fungerer, men jeg vil gerne lede i flere ark i Workbooks(2), men der er et ark, som der ikke må ledes i, og det kan jeg ikke få til at fungere, for jeg kan ikke finde ud af hvordan jeg kan lave et array som er specifikt helt ned til cellerne i det enkelte ark, og .Find virker ikke hvis ikke den for en cellerange at lede i.

Er der mon nogen som kan hjælpe?
Avatar billede kim1a Ekspert
18. juli 2019 - 12:53 #1
Er det vigtigt med et array? Du kunne bruge en do while <> arket der ikke må bruges? Eller køre en simpel r = 1 to sheets.count og så lave en if der hopper over den hvor navnet fremgår?
Avatar billede Sidsel Seniormester
18. juli 2019 - 13:03 #2
Det forstår jeg desværre ikke, det er ikke vigtigt for mig at det skal være et array. Kan du give et eksempel måske?
Avatar billede Dan Elgaard Ekspert
18. juli 2019 - 13:34 #3
Dim WS As Excel.Worksheet
For Each WS In Workbooks(2).Worksheets
    If WS.Name <> "Navn på ark, der ikke må ledes i" Then
        ' Gør noget
    End If
Next
Avatar billede Dan Elgaard Ekspert
18. juli 2019 - 13:38 #4
Hvis du ligger din .Find kommando ind, bliver det til:

Dim WS As Excel.Worksheet
For Each WS In Workbooks(2).Worksheets
    If WS.Name <> "Navn på ark, der ikke må ledes i" Then
        rngcelle.Value = WS.Range("c10:c18").Find(rngcelle.Offset(0, -8).Value).Offset(0, 1).Value * 100
    End If
Next
Avatar billede Sidsel Seniormester
18. juli 2019 - 14:03 #5
Den fejler hvis så snart den søger i et ark hvor værdien ikke er.
Jeg har så forsøgt at fejlhåndtere således, men det virker ikke..

Min kode ser nu sådan ud:
For Each WS In Workbooks(2).Worksheets
                  If WS.Name <> "MPG Alfabetisk" Then
            rngcelle.Value = WS.Range("c8:g81").Find(rngcelle.Offset(0, -8).Value).Offset(0, 1).Value * 100
            On Error Resume Next
                  End If
              Next

Nu leder den dog, så den bruger funktionen, men fejler hvis den ikke kan finde den i det første ark, den leder i.
Avatar billede Dan Elgaard Ekspert
18. juli 2019 - 14:43 #6
On Error Resume Next

...skal være den allerførste linje i din kode.
Avatar billede Sidsel Seniormester
18. juli 2019 - 17:05 #7
Det virker, og du har fået løsning @Dan Elgaard.
Men kan du fortælle mig hvorfor der, når den starter med at søge i det korrekte ark, skriver 0 som værdi til at starte med?
Avatar billede Dan Elgaard Ekspert
18. juli 2019 - 18:19 #8
Narj, det bli'r nok lidt svært, da jeg jo ikke kender dine ark/system, men jeg gætter på, at det har noget, at gøre med, at, hvis der ikke er et match i første ark, så kan der heller ikke tildeles nogen værdi, og så er default værdien nul.
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

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