Avatar billede eenie Nybegynder
04. oktober 2010 - 17:03 Der er 11 kommentarer og
1 løsning

Dette er sikkert nemt for jer

men jeg har godt nok problemer med at få nedenstående kode til at virke.

Jeg har to åbne excelark. Det er meningen at når VBA udfører denne kode, så skal den for nogle givne celler i kolonne b i excelark1 lave et vlookup/lopslag hvor det den skal søge efter er i cellen til venstre, men den "range" som der skal gennemsøges er i excelark2.

VBA popper op med en fejl hver gang som siger:

Run-time error '1044'
Application-defined or object-defined error


Når jeg derefter trykker på "debug" markeres følgende med gult.

Set res = Application.WorksheetFunction.VLookup(Cells(row, 2), w.Range("a1:d100"), 2, False)

Min kode er her (bær over med mig.. Jeg er i gang med at lærer :)

Option Explicit

Sub DetteErEnTest()

Dim row As Integer
Dim res As WorksheetFunction
Dim w As Worksheet
Dim ws As Worksheet

Set w = Workbooks("Test1").Worksheets("ark1")
Set res = Application.WorksheetFunction.VLookup(Cells(row, 2), w.Range("a1:d100"), 2, False)
Set ws = ActiveWorkbook.Sheets("ark1")

For row = 1 To 5

    ws.Cells(row, 2).Value = res
Next row

End Sub
Avatar billede supertekst Ekspert
04. oktober 2010 - 17:22 #1
row = 0
Avatar billede supertekst Ekspert
04. oktober 2010 - 17:24 #2
Altså row har værdien nul - er ikke tilskrevet valid værdi..
Avatar billede tjacob Juniormester
04. oktober 2010 - 17:41 #3
Der er flere problemer med din sub:

Du kan ikke behandle res som et objekt og sætte det til din Worksheetfunction.

Res er værdien der returneres fra worksheetfunktionen.

Derudover er der row uden værdi som supertekst nævnte.

Derudover ser det ud som om du vil skrive den fundne værdi i det samme felt som du får opslagsværdien fra (row, 2)?

Jeg tror du er ude efter noget i denne stil (Bemærk at jeg tilskriver den fundne værdi i kolonne 3 -det kan du ændre):


Sub DetteErEnTest()

Dim row As Integer
Dim w As Worksheet
Dim ws As Worksheet

Set w = Workbooks("Test1").Worksheets("ark1")
Set ws = ThisWorkbook.Sheets("ark1")

For row = 1 To 5
    ws.Cells(row, 3).Value = Application.WorksheetFunction.VLookup(ws.Cells(row, 2).Value, _
        w.Range("a1:d100"), 2, False)
Next row

End Sub
Avatar billede eenie Nybegynder
04. oktober 2010 - 17:43 #4
Nåh ja.. så jeg skal skrive min vlookup funktion ind i LOOP'et hvis jeg forstår dig korrekt?
Avatar billede eenie Nybegynder
04. oktober 2010 - 17:47 #5
Hov.. Der kom et svar i mellemtiden, som jeg ikke nåede at se :)

1000 tak for hjælpen.. jeg prøver at lege lidt med det.. Point?
Avatar billede tjacob Juniormester
04. oktober 2010 - 17:57 #6
Prøv nu at se om du kan bruge det ;)

Min kommentar er skrevet i 'blinde', da jeg ikke lige kan teste, så jeg er ikke sikker på at det virker........
Avatar billede eenie Nybegynder
04. oktober 2010 - 21:33 #7
Jeg håber at det er OK jeg lige spørger igen.

Jeg får en run-time error 1004 og jeg tror der skal gøres et eller andet hvis den får en fejl.

Jeg har forsøgt at finde lidt inspiration ( on error resume next ) på nedenstående side, men jeg kan desværre ikke få det til at fungere.

http://www.cpearson.com/excel/CallingWorksheetFunctionsInVBA.aspx
Avatar billede supertekst Ekspert
04. oktober 2010 - 22:51 #8
Hvordan ser din kode ud nu?
Avatar billede eenie Nybegynder
05. oktober 2010 - 08:19 #9
Af en eller anden årsag giver den fejlværdien = "0" i alle de celler den skal søge for.



Sub DetteErEnTest()

Dim row As Integer
Dim w As Worksheet
Dim ws As Worksheet

Set w = Workbooks("balance excel").Worksheets("ark1")
Set ws = ThisWorkbook.Sheets("ark1")

For row = 2 To 4
    On Error Resume Next
    ws.Cells(row, 2).Value = Application.WorksheetFunction.VLookup(ws.Cells(row, 2).Value, _
        w.Range("b1:d100"), 3, False)
    If Err.Number <> 0 Then
   
    ws.Cells(row, 2).Value = "0"
   
    End If
             
Next row

End Sub
Avatar billede eenie Nybegynder
05. oktober 2010 - 08:24 #10
Hov.. nu fandt jeg fejlen... koden skal bare se sådan her ud :) Tak for hjælpen begge to.. point tjacob?



Sub DetteErEnTest()

Dim row As Integer
Dim w As Worksheet
Dim ws As Worksheet

Set w = Workbooks("balance excel").Worksheets("ark1")
Set ws = ThisWorkbook.Sheets("ark1")

For row = 2 To 4
    On Error Resume Next
    ws.Cells(row, 2).Value = Application.WorksheetFunction.VLookup(ws.Cells(row, 1).Value, _
        w.Range("b1:d100"), 3, False)
    If Err.Number <> 0 Then
   
    ws.Cells(row, 2).Value = "0"
   
    End If
         
   
Next row

End Sub
Avatar billede eenie Nybegynder
05. oktober 2010 - 08:25 #11
Jeg henviste til nogle forkerte celler. Man skal godt nok holde tungen lige i munden når man laver scripts!
Avatar billede tjacob Juniormester
05. oktober 2010 - 12:46 #12
OK, -svar.
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
Kurser inden for grundlæggende programmering

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