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

Spill? VBA-hjälp....


Shape_sthlm

Rekommendera Poster

Shape_sthlm

Vad betyder spill? Får felet enligt bifogad bild

Varför?

 

[bild bifogad 2008-06-30 13:28:45 av Shape_sthlm]

1061959_thumb.jpg

Länk till kommentar
Dela på andra webbplatser

att något går galet... Vanligen kan man, i andra programspråk, tolka det som att stacken är full. Slut på resurser,

 

Jag tror nog vi behöver lite på benen för att kunna säga mer om ditt problem, lite mer kod. Itererar du möjligen?

Edit:

Flyttar tråden till VBA (från Kalkylprogram)

/T

 

Even when we know we´ll never find the answers, we have to keep on asking questions.

 

 

[inlägget ändrat 2008-06-30 14:53:25 av Monshi]

Länk till kommentar
Dela på andra webbplatser

Shape_sthlm

Felet får jag alltså på tredje raden

 

Sub Välj_Klicka()
Dim Välj As Integer
Välj = Range("F4").Value


If Välj = 0 Then
MsgBox "text..."
Else
ActiveSheet.Range("$A$6:$CB$117").AutoFilter Field:=6, Criteria1:=Välj
End If



End Sub

 

[inlägget ändrat 2008-07-01 14:53:46 av Shape_sthlm]

Länk till kommentar
Dela på andra webbplatser

Shape_sthlm

ahh - hjärnsläpp

 

fel variabel. deklarerar som Long istället så fungerar det givetvis...

 

Länk till kommentar
Dela på andra webbplatser

Hi, hi. Klassiska hjärnsläpp suger. Särskilt när man lyckas stå för dom själv..

 

Lite sommarkul. Kolla konverterarna. Typ:

Cint, cLng och allt vad de heter

Val() kan vara användbart det också. I alla fall om du vill gardera dig mot skräptecken.

 

Sen kan du alltid kontrollera indata på olika sätt. Typ:

IsNumeric()

VarType()

TypeName()

 

MsgBox ("F4 går att räkna med: " & IsNumeric(Val(Range("F4").Value)))

MsgBox ("F4 är av typen: " & VarType(Range("F4").Value))

MsgBox ("F4 är av klartexttypen: " & TypeName(Range("F4").Value))

 

Osv Osv

 

Länk till kommentar
Dela på andra webbplatser

Shape_sthlm

Tack för sommartipsen, högst användbart.

 

ytterligare ett sidospår kommer här...

 

kan man aktivera scriptet när man trycker enter?

alltså, efter att jag skrivit in ett värde i F4, kan jag starta makrot genom att då bara trycka Enter?

 

Länk till kommentar
Dela på andra webbplatser

Tja, det går men jag brukar inte rekommendera det då det involverar en av de känsligaste funktionerna i Excel nämligen den händelserutin som bevakar om någon ändras på bladet. Dvs den koden körs så fort någon cell ändrats och man måste då ge akt på att

1: Se till att så lite kod som möjligt körs när den inte ska göra något.

2: Om man har annan kod i boken som skriver till celler i boken bör man se till att händelserutinerna är avstängda annars tar det evinnerligt mycket längre tid att köra kod som skriver till bokens celler.

 

Nog sagt med varningar, koden i sig är inte så avancerad

 

Kod som reagera på ändringen, en rutin som finns på ditt arbetsblad:

 

Private Sub Worksheet_Change(ByVal Target As Range)
   If Target.Cells.Count > 1 Then Exit Sub
   If Not Intersect(Target, Me.Range("f4")) Is Nothing Then
       Välj_Klicka
   End If    
End Sub

 

Samt din Välj_Klicka bör uppdateras till:

Sub Välj_Klicka()
Dim Välj As Integer
With Blad1 ' bladet cellen samt ditt autofilter finns på
Välj = .Range("F4").Value


If Välj = 0 Then
 ' gör inget eller?
Else
  On Error Resume Next ' OM autofiltret går fel kommer återställning ändå ske. Viktigt!
  Application.EnableEvents = False
 .Range("$A$6:$CB$117").AutoFilter Field:=6, Criteria1:=Välj
 Application.EnableEvents = True
 On Error Goto 0
End If

End Sun

 

Länk till kommentar
Dela på andra webbplatser

Det enklaste är att koppla ett snabbkommando till ditt makro ([ALT]+[F8], markera ditt makro, tryck på alternativ).

 

Annars får du ge dig in i de mörkare sidorna av VBA, händelsehantering. Då fångar du en händelse (t.ex att värdet i F4 är ändrat) och startar ditt makro när det sker.

Ställ dig i bladet det gäller och högerklicka på fliknamnet (längst ner, typ "blad 1").

Välj "visa kod"

Nu får du upp en tom "VBA-sida". Högst upp på VBA-sidan har du två rullgardinsmenyer. I den vänstra väljer du "worksheet" och i den högra väljer du "change".

 

Nu skall du få en tom kodsnutt i stil med:

Private Sub Worksheet_Change(ByVal Target As Range)

End Sub

(om det råkade bli en annan händelse ovanför kan du ta bort den)

 

Problemet är att den här händelsen är "för stor". Den reagerar på alla förändringar på sidan. Den måste smalnas av. Det gör man med hjälp av "Intersect"

 

Private Sub Worksheet_Change(ByVal Target As Range)
If Intersect(Target, Range("F4")) Is Nothing Then Exit Sub
' Koden som du vill köra, typ:
MsgBox ("jajjamensan det är F4 som är ändrad")
' eller länk till ditt färdiga makro
End Sub

 

Det kan även vara smidigt att stänga av händelsehanteringen så att du intee råkar triggas igång andra händelser.

dvs i början av koden:

Application.EnableEvents = False

 

Och slutet av koden:

Application.EnableEvents = True

 

********************************************

Ursäkta, missade att Monshi redan svarat. Dessutom skrev jag fel händelse...

********************************************

Men, vad tusan. Tror du inte att jag lämnade kvar fel händelse...

[inlägget ändrat 2008-07-02 11:20:43 av MH2]

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...