Just nu i M3-nätverket
Jump to content

Excel VBA vilkor i If-sats


Tommy H
 Share

Recommended Posts

Hej!

Varför kan jag inte lägga in ett vilkor för att kolla om en del av innehållet i min cell innehåller nämnd text?

I koden nedan så skulle jag vilja ha ett antal förutsättningar (fler än dom som jag har med här) och även då ha med det sista att om cellen innehåller något som börjar på "IN" och innehåller mer (typ en siffra är det) så gör då det och det...

 

  If Application.WorksheetFunction.CountBlank(rng3upp) = 3 _
        And .Offset(0, -8) <> ""  And .Offset(2, 0)= ("IN" & & "*") Then

 

Vad gör jag för fel då koden ej köper vilkoret!

(allt köps utom sista vilkoret)

/Tommy

 

Link to comment
Share on other sites

Ove Söderlund

Det känns lite spontant som att du inte har ett objekt knutet till Offset, jag tror du behöver jobba lite med något i stil med:

Du får förstås anpassa din Range utifrån dina förutsättningar.

 

Dim rng3upp As Excel.Range
Set rng3upp = Range("A1:C5")

If Application.WorksheetFunction.CountBlank(rng3upp) = 3 _
        And rng3upp.Offset(0, -8) <> ""  And rng3upp.Offset(2, 0)= ("IN" & & "*") Then


.
.
.
.

End If

 

Lite läsvärt om Cells och Ranges på följande länk:

The Complete Guide to Ranges and Cells in Excel VBA / Excel Macro Mastery.com

 

 

Link to comment
Share on other sites

Mja, jag har kanske varit lite otydlig.

Kodraderna är ju utplockade från sin helhet, då det jag går bet på är just det sista villkoret.

Jag vill kolla om ett antal celler runt min "offset" är tomma eller innehåller något.

Det är den sista kod-radens sista And som jag inte får att fungera.

Jag vill ju att oavsett om det står "IN2" eller "IN5" på .offset (2,0) så ska det tas med i If-satsen.

Har jag koden enligt nedan, så accepteras inte villkoret även om allt uppfylls på Excelbladet.

Jag misstänker att jag inte kan ha med en "text kontroll" i If-stasen men jag vet som sagt inte....

 

    Sub IN_Reserver()

Dim C As Range
Dim d As Range
Dim antal As Integer
antal = 0
Dim firstAddress As String
With Worksheets("Prenad").Range("K:K")
Set C = .Find("IN" & "*", LookIn:=xlValues, LookAt:=xlWhole)
If Not C Is Nothing Then
firstAddress = C.Address

Do
On Error GoTo 90
With C
 Dim rng3upp As Range
 Set rng3upp = C.Offset(-3, -8).Resize(3, 1) '3 rader upp
 Dim rng3ner As Range
 Set rng3ner = C.Offset(1, -8).Resize(3, 1) '3 rader ner

    'Kollar om det finns 3st tomma rader ovanför.
    If Application.WorksheetFunction.CountBlank(rng3upp) = 3 _
        And .Offset(0, -8) <> "" And .Offset(0, 2) = "" And .Offset(1, 1) = "" And .Offset(0, 6) = "" And .Offset(2, 0) = "IN" & "*" Then

bla, bla, bla

Link to comment
Share on other sites

Ove Söderlund

Prova att använda LIKE-operator;

 

    If Application.WorksheetFunction.CountBlank(rng3upp) = 3 _
        And .Offset(0, -8) <> "" And .Offset(0, 2) = "" And .Offset(1, 1) = "" _
        And .Offset(0, 6) = "" And .Offset(2, 0) Like "IN*" Then

 

 

Link to comment
Share on other sites

 Share



×
×
  • Create New...