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

Behöver hjälp med variabler!


Shape_sthlm

Rekommendera Poster

Vill hämta upp text från en cell, och provade helt enkelt med en String-variabel och en formel, men det gick inte som jag tänkt.

 

Koden ser ut som följer

 

Sub MerInfo()
Dim Kommentar As String

ActiveCell.FormulaR1C1 = "=VLOOKUP(R21C1+IF(R21C1<18,0,1),Bas,COLUMN(Tabell1[[#Headers],[Comments 2]]),FALSE)"
Kommentar = ActiveCell.Value
MsgBox Kommentar

End Sub

Nu får jag upp infon som jag vill men inte klockrent.

 

Vet inte hur jag ska få fram infon i msgbox direkt, så jag provade med att gå via en cell först, vilket syns ovan. Givetvis kan jag inte ha det så, inga cellvärden ska skrivas någonstans, vill ju bara ha upp infon i en box.

 

Behöver jag ha andra variabler?

 

/ed av moderator - kod tag /

 

[inlägget ändrat 2008-10-09 22:49:11 av Monshi]

Länk till kommentar
Dela på andra webbplatser

Visserligen kan det fungera att mellanlagra i en cell men om du inte på annat sätt än i koden ska använda värdet kan du anropa formeln helt VBA:

Application.WorksheetFunction.VLookup(...)

Eller använd vanliga Find-funktionen...

Eller skriv in formeln förhand och låt den stå i cellen...

 

 

Men notera att orsaken till att det du testar inte fungerar, och även den ovan, är om VLOOKUP inte hittar det du söker så returneras ett felvärde som inte går att spara i en sträng. Inkompatibla typer borde du få som felmeddelande.

Du kan lösa det genom att omsluta det hela med någon felhanterare. Inte alls svårt så det får du läsa på om själv... On Error....

 

/T

 

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

 

 

[inlägget ändrat 2008-10-09 22:55:37 av Monshi]

Länk till kommentar
Dela på andra webbplatser

ok, jag provar detta, men får inte riktigt kläm på det.

 

se bifogad bild.

 

 

 

[bild bifogad 2008-10-10 10:42:14 av Shape_sthlm]

1088730_thumb.jpg

Länk till kommentar
Dela på andra webbplatser

IF är likt VLOOKUP en arbetsplatsfunktion, ivartfall i formatet du skriver den.

 

Tipset är enkelt, skapa sökutrycket, alla termer som du mata Vlookup med, innan du anropar Vlookup. Skapa variabler i vilka du spar vad du ska söka efter, var du ska söka.

 

 

/T

 

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

 

Länk till kommentar
Dela på andra webbplatser

Trodde ju jag kunna hålla mig på en rad kod, men tydligen inte :-)

 

Det känns bara så onödigt att behöva "söka" upp och identifiera alla variablerna som behövs, när uppgifterna redan finns. Det känns ju som det blir massa kod bara för sakens skull.

 

i så fall måste jag söka efter

 

- en viss kolumn i en tabell1 (som ju redan är känd)

- definiera sökområdet (finns redan som namngivet område)

- en viss rad (denna är oxå känd, men villkorad [iF] )

 

det enda jag inte vet, och som jag måste söka efter, är ju just interceptet (rad/kolumn) där mitt önskade textvärde finns att hämta.

 

Det är klart att man kan skapa sökuttryck för allt detta, antar jag, men borde man inte kunna utnyttja den information som redan finns? Det är ju det jag vill använda VLOOKUP till i detta fallet.

 

 

Länk till kommentar
Dela på andra webbplatser

       Dim rnSearch As Range
   Dim searchKey As Variant
   Dim c As Range
   With ActiveSheet
       Set rnSearch = Range("Bas")
       searchKey = .Cells(21, 1) + .Cells(21, 1) < 18
       Set c = rnSearch.Find(what:=searchKey, lookat:=xlWhole)
       If Not c Is Nothing Then
           ' gör vad du önskar med träffen
       End If
   End With

kanske?

Icke testkört den dock men tror det ska vara rätt. Adresseringen av sökområdet...den får du klura ut/anpassa.

 

 

/T

 

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

 

Länk till kommentar
Dela på andra webbplatser

den koden kan lika väl ersättas med

 

 

If .cells(21,1).value < 18 then

 

c = .cells(21,1).value

else:

c = .cells(21,1).value + 1

 

End if

 

vad jag vill göra med "c" är ju VLOOKUP.

vilket jag i en kalkylbladet lätt kan få fram i genom följande.

 

=letaupp(c;Bas;Kolumn(?);falskt)

 

men jag kan inte förstöra kalkylbladet med att börja skriva i en cell. eller rättare sagt, onödigt om jag måste. klart att jag kan skriva ut det och sedan visa det i en msgbox och sedan radera cellinnehållet efteråt, men det är ju detta jag vill slippa.

 

Om jag då antar att kolumnvärdet är okänt, hur kan jag identifiera det?

 

 

 

 

Länk till kommentar
Dela på andra webbplatser

Nu har jag löst det! Blev många variabler, men läste på om Find-metoden och det här blev hur bra som helst. Går fort oxå

 

Kommer säkert behöver finjustera den med tiden, men det verkar vara precis som jag tänkte mig.

 

Tack för hjälpen här som fick in mig på rätt spår!

 

tips på en bra sida om Find-metoden.

http://www.thecodenet.com/articles.php?id=18

 

 

Sub MerInfo()
Dim inExtra As Integer
Dim wsSheet As Worksheet
Dim wbBok As Workbook
Dim inValue As Integer
Dim inRad As Integer
Dim rnData As Range
Dim R As Range
Dim C As Range
Dim colHead As String

colHead = "Comments 2"
Set wbBok = ThisWorkbook
Set wsSheet = wbBok.Worksheets("MENY")
Set rnData = Range("Bas")
With wsSheet
   inValue = .Cells(17, 1).Value
       If inValue < 18 Then
           inExtra = 0
           Else:
           inExtra = 1
       End If
   inRad = inValue + inExtra
End With
Set C = rnData.Find(colHead)
If Not C Is Nothing Then MsgBox C.Offset(inRad - 1, 0).Value
Set C = Nothing
End Sub

 

Länk till kommentar
Dela på andra webbplatser

...annars är den hjälp som finns i Excel inte så dåligt. Faktiskt ganska bra... men aldrig fel att använda Google får att hitta vad man behöver.

 

 

/T

 

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

 

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