Just nu i M3-nätverket
Gå till innehåll

Körfel '1004' i Excel VBA


Tommy H

Rekommendera Poster

Hej!

Jag får felmeddelande 4enligt bifogad fil då jag försöker att anropa en modul ifrån ett Userform.

Både modulen och Userformen ligger i samma arbetsbok.

Makrona ärr aktiuverade, och finns ju i arbetsboken!

Det fungerar på andra liknande anrop i samma arbetsbok....

 

Vad är det som blir fel?

/TH

Länk till kommentar
Dela på andra webbplatser

Ingen fil bifogad, för att kunna bifoga VBA-aktiverade filer måste dessa först zippas.

 

Men kolla referenserna i projektet, någon essentiell som fallit bort?

Länk till kommentar
Dela på andra webbplatser

"någon essentiell som fallit bort?"

 

Hmmm...

Vad skulle det kunna innebära i makrovärlden?

 

Försöker att bifoga skärmdumpen igen, zippad...

 

/TH
 

Länk till kommentar
Dela på andra webbplatser

I mitt Userform:

Private Sub CommandButton24_Click()
Run "Bladhantering"
End Sub

I "Bladhanteringsmodulen":

Sub Bladhantering()
Range("O3:O5000").Select
Selection.ClearContents
Range("O2").Select
Dim AntalRader As Integer
Dim i As Integer
Dim counter As Variant 'räkning av rader
Dim counter2 As Variant 'bladnumreringen
Set counter2 = Sheets("RULES").Range("E2")
'Sätter in första bladnumret i cell "O2"
    counter2 = counter2 + 1
    ActiveCell = Sheets("RULES").Range("D2") & "___" & "0" & counter2 - 1
'Antal rader för X1 innan sidbrytning
    AntalRader = 65
10  ActiveCell.Offset(0, 0).Select
    Do Until counter = AntalRader
       counter = counter + 1
       ActiveCell.Offset(1, 0).Select
            If ActiveCell.Offset(0, -13).Value = "-X3" Then
            Exit Sub
            End If
    Loop
       
        counter = 0
30  If ActiveCell.Offset(0, -13).Value = "-X1" And ActiveCell.Offset(-1, -13) = "" Then
        counter2 = counter2 + 1
        ActiveCell = Sheets("RULES").Range("D2") & "___" & "0" & counter2 - 1
        Else: ActiveCell.Offset(-1, 0).Select
            GoTo 30
    End If
GoTo 10
End Sub

Ja, jag vet att jag inte får ha mina "GoTo" men jag klarar mig inte utan dem :-)

 

/TH

Länk till kommentar
Dela på andra webbplatser

1: Vilket blad adresserar du i

Range("O3:O5000")

 

2: Select-satser är av nästan lika mycket ondo som GoTo, helt onödiga i normal kod

 

 

3: goto... no comment

 

Städat din kod, vette tusan om den gör det du önskar men tror det.

Sub Bladhantering()
    Dim rnTarget As Range
   
    Dim AntalRader As Integer
    Dim i As Integer
    Dim counter2 As Integer 'bladnumreringen
    With Sheets("RULES")
        .Range("O3:O5000").ClearContents
        Set rnTarget = .Range("O2")
    
    
        counter2 = .Range("E2")
    'Sätter in första bladnumret i cell "O2"
        counter2 = counter2 + 1
        rnTarget = .Range("D2") & "___" & "0" & counter2 - 1
    'Antal rader för X1 innan sidbrytning
        AntalRader = 65
    
        Do While True 'något mer villkor rekommenderas!
            For i = 0 To i = AntalRader
                Set rnTarget = rnTarget.Offset(1, 0)
                If rnTarget.Offset(0, -13).Value = "-X3" Then
                    Exit Sub
                 End If
            Next i
         
            Do While Not (rnTarget.Offset(0, -13).Value = "-X1" And rnTarget.Offset(-1, -13) = "")
                If rnTarget.Row = 1 Then Exit Sub 'annars felvärde
                Set rnTarget = rnTarget.Offset(-1, 0)
            Loop
            
            If rnTarget.Offset(0, -13).Value = "-X1" And rnTarget.Offset(-1, -13) = "" Then 'torde alltid vara uppfyllt men..
                counter2 = counter2 + 1
                rnTarget = Sheets("RULES").Range("D2") & "___" & "0" & counter2 - 1
            End If
        Loop
    End With
End Sub
Länk till kommentar
Dela på andra webbplatser

Så då fick jag en läxa...

Intressant att se hur du löser mina GoTo-satser!

Det ska jag verkligen ta till mig...

 

Range("O3:O5000") refererar till Ws "Prenad"...

Menar du att det är där jag har mitt problem?

 

Gjorde några snabba testkörningar och nu är det i koden jag fastnar!

Det innebär att det var lösningen..

 

Stort tack för det!!!!

 

/TH

Länk till kommentar
Dela på andra webbplatser

Du ska ALLTID se till att unikt adressera det blad du vill arbeta med. Arbeta ALDRIG med Activesheet i en bok om nu det inte är direkt motiverat.

 

Se

//eforum.idg.se/topic/220943-riktlinjer-f%C3%B6r-bra-vba-kod/

 

Du har uppdaterat referenserna i koden ovan? Alla, i min version, refererar till samma blad i boken.

 

och notera att du har en Do While True-sats, denna bör ha ett villkor för att brytas. Nu har du iofs en Exit sub i koden men det gäller då att koden når dit.

Denna sats skulle kunna läggas som villkor i loopen eventuellt.

Länk till kommentar
Dela på andra webbplatser

Arkiverat

Det här ämnet är nu arkiverat och är stängt för ytterligare svar.

×
×
  • Skapa nytt...