Avatar billede bpoul Nybegynder
16. januar 2013 - 11:08 Der er 10 kommentarer og
1 løsning

Run-time Error 1004: Application-defined or object-defined error

Hej.

Jeg er relativ ny bruger af Excel VBA og er løbet ind i et problem. Når jeg kører en makro får jeg fejlmeddelelse Run-time Error 1004: Application-defined or object-defined error.

Fejlen ligger i "Set searchRange"-delen forneden, lastCol og lastRow defineres fint (24 og 262754)

lastCol = Worksheets("prisDB").Cells.Find("*", searchorder:=xlByColumns, _
        LookIn:=xlValues, searchdirection:=xlPrevious).Column
lastRow = Worksheets("prisDB").Cells.Find("*", searchorder:=xlByRows, _
        LookIn:=xlValues, searchdirection:=xlPrevious).Row
Set searchRange = Worksheets("prisDB").Range(Cells(1, 1), Cells(lastRow, lastCol))

På forhånd tak!
Avatar billede supertekst Ekspert
16. januar 2013 - 12:15 #1
Der må være noget mere kode? Hvor er koden placeret?

Har prøvet din kode i ThisWorkbook - ingen fejlmelding.

og så velkommen til Eksperten..
Avatar billede bpoul Nybegynder
16. januar 2013 - 12:21 #2
Hej,
Tak for det. Jeg satte ikke resten af koden ind for at gøre fejlen mere synlig, men her er hele modulet:

Sub Søg(søgeOrd1 As String, Optional søgeOrd2 As String)
Dim tæller As Integer
Dim wsAntal As Integer
Dim firstAddress As String
Static fundne As Integer
Dim c As Range
Dim d As Range
Dim currentRow As Long
Dim searchRange As Range
Dim lastCol As Integer
Dim lastRow As Long

Application.ScreenUpdating = False
Application.DisplayAlerts = False
Application.EnableEvents = False


On Error GoTo Fejl

lastCol = Worksheets("prisDB").Cells.Find("*", searchorder:=xlByColumns, _
        LookIn:=xlValues, searchdirection:=xlPrevious).Column
lastRow = Worksheets("prisDB").Cells.Find("*", searchorder:=xlByRows, _
        LookIn:=xlValues, searchdirection:=xlPrevious).Row
Set searchRange = Workbooks("_Søg v2.xlsb").Worksheets("prisDB").Range(Cells(1, 1), Cells(lastRow, lastCol))

fundne = 2
            With searchRange
                    Set c = .Find(what:=søgeOrd1, LookIn:=xlValues, LookAt:=xlPart, searchorder:=xlByRows, _
                        searchdirection:=xlNext, MatchCase:=False, SearchFormat:=False)
                    If Not c Is Nothing Then
                        firstAddress = c.Address
                        Do
                            currentRow = Range(c.Address).Row
                            Worksheets("prisDB").Range(Cells(currentRow, 1)).EntireRow.Copy Worksheets("SøgeArk").Range("A" & fundne)
                            fundne = fundne + 1
                            Set c = .FindNext(c)
                        Loop While Not c Is Nothing And c.Address <> firstAddress
                    End If
                    '2. søgning
                    If søgeOrd2 <> "" Then
                        Set d = .Find(what:=søgeOrd2, LookIn:=xlValues, LookAt:=xlPart, searchorder:=xlByRows, _
                        searchdirection:=xlNext, MatchCase:=False, SearchFormat:=False)
                        If Not d Is Nothing Then
                            firstAddress = d.Address
                            Do
                                currentRow = Range(d.Address).Row
                            Worksheets("prisDB").Range(Cells(currentRow, 1)).EntireRow.Copy Worksheets("SøgeArk").Range("A" & fundne)
                                fundne = fundne + 1
                                Set d = .FindNext(d)
                            Loop While Not d Is Nothing And d.Address <> firstAddress
                        End If
                    End If
            End With
       
Application.EnableEvents = True
'Application.ShowWindowsInTaskbar = True
Application.DisplayAlerts = True
Application.ScreenUpdating = True
If Range("A2") = "" Then MsgBox "Ingen match på din søgning", vbOKOnly + vbCritical, "Resultat"
Fejl:
    If Err.Number <> 0 Then
        MsgBox "Der er sket en fejl i filen " & ActiveWorkbook.Name & " | Modul modFunktioner | Sub Fejlhåndtering: " & Err.Description
    End If
End Sub

Jeg får søgeOrd1 og søgeOrd2 fra en Userform - det virker tilsyneladende godt nok.

og tak for velkomsten!
Avatar billede supertekst Ekspert
16. januar 2013 - 13:32 #3
Set searchRange = Workbooks("_Søg v2.xlsb").Worksheets("prisDB").Range(Cells(1, 1), Cells(lastRow, lastCol))

Er den nævnte fil "_Søg v2.xlsb" åben i forvejen?
Avatar billede bpoul Nybegynder
16. januar 2013 - 13:52 #4
Ja, det er den fil modulet ligger i. Jeg har også prøvet med ActiveWorkbook og helt udeladt specifikation af Workbooken men med det samme resultat.
Avatar billede supertekst Ekspert
16. januar 2013 - 14:49 #5
Prøv med:
Set searchRange = ActiveWorkbook.Worksheets("prisDB").Range(Cells(1, 1), Cells(lastRow, lastCol))


PS: SVAR anvendes kun af forslagsstillere ved et løsningsforslag - altså et svar på en udfordring. Anvend i stedet KOMMENTAR...

(Mange nye har samme problem - fortvivl ej)
Avatar billede bpoul Nybegynder
16. januar 2013 - 15:51 #6
Jeg har prøvet de tre nedenstående, men alle udløser samme fejlmeddelelse

'Set searchRange = Workbooks("_Søg v2.xlsb").Worksheets("prisDB").Range(Cells(1, 1), Cells(lastRow, lastCol))
Set searchRange = ActiveWorkbook.Worksheets("prisDB").Range(Cells(1, 1), Cells(lastRow, lastCol))
'Set searchRange = Worksheets("prisDB").Range(Cells(1, 1), Cells(lastRow, lastCol))

Kan det være et problem, at der er tale om et forholdsmæssigt stort område?

Jeg håber, at det her er den rigtige metode.
Avatar billede supertekst Ekspert
16. januar 2013 - 16:32 #7
Jeg tror ikke at områdestørrelsen er problemet.

Hvis det er noget, som du kan maile - så er du velkommen til det - skal så prøve at se på det. @-adresse under min profil..
Avatar billede bpoul Nybegynder
17. januar 2013 - 08:29 #8
Jeg kan desværre ikke sende hele filen, da den indeholder en del fortrolige oplysninger.
Jeg må prøve at se om der er en anden måde at gøre det på.
Avatar billede supertekst Ekspert
17. januar 2013 - 09:17 #9
I givet fald kan det fortrolige vel slettes...
Avatar billede bpoul Nybegynder
17. januar 2013 - 10:58 #10
Det lykkedes mig at finde en vej rundt ved at bruge CurrentRegion:
Set searchRange = Worksheets("prisDB").Range("A1").CurrentRegion

Den regneark der søges på udfyldes af et andet program jeg har lavet, så jeg kan sikre mig at der ikke er "huller" i det. Ikke videre elegant - men det virker :-).

Tak for dine input!
Avatar billede supertekst Ekspert
17. januar 2013 - 11:07 #11
Fint og selv tak

Husk at lukke spørgsmålet - Accepter blot et af dine Svar og Afvis de øvrige.
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