Kirjautuminen

Haku

Tehtävät

Keskustelu: Ohjelmointikysymykset: If then VBA excelissä

ak77116 [25.05.2010 10:24:36]

#

Hojo taas,

Perskule kun en taaskaan saa toimimaan sellaista makroa jota haluaisin.

Mulla on sellainen ErrorMsg, jonka makro tuo ruutuun jos jotain hämminkiä tulee (On Error Goto ErrorMsg). Se toimii hyvin, mutta haluaisin myös toisenlaisen virhetarkastelun jonka voisi lisätä koodiin. Sen pitäisi toimia näin:

- Tarkastele Sheettiä "Allocation"
- tarkastele aluetta "S6:S66"
- Jos sarakkeella S on merkki "!!!", mene kohtaan ErrorMsg
- muussa tapauksessa (ei mitään merkkiä) seuraavaan riviin
- jos missään solussa ei ole merkkiä "!!!", jatka makroa eteenpäin

Saako tähän toimimaan If Then funktiolla? Oma kyhäelmä päätyi jumittamaan makron, joten pikku jeesi olisi paikallaan. Soluissa on IF-funktiolla toteutettu rivitarkatelu, joka tuo tiettyjen ehtojen toteutuessa soluun merkin "!!!". En tiedä onko tällä merkitystä, mutta Excelin mukaanhan solu ei ole tyhjä (""), jos siinä on kaava, vaikka se näyttäisi tyhjältä(Esim IF-funktion palauta "")

Voipi olla typeriä kysymyksiä, mutta olen joka tapauksessa pulassa tämän kanssa.

Terveisin,

AK

Temme [25.05.2010 13:51:16]

#

ak77116 kirjoitti:

- Jos sarakkeella S on merkki "!!!", mene kohtaan ErrorMsg

If ehto Then Goto ErrorMsg

En muista tarviiko tuo enaa tuota Then sanaa.

ak77116 [25.05.2010 17:34:44]

#

Pystyisitkö lisäämään sen tähän koodiin? Mulla on sellainen ongelma että kyhäämäni If Then funktio jää "kiertämään" eikä lähde eteenpäin. En osaa siis kirjoittaa sellaista koodia että se pääsisi ulos "kierteestä" ja jatkaisi makron muita tehtäviä. Se koodi voisi olla heti alussa jos mahdollista.

Sub HideRows()

BeginRow = 16
EndRow = 138
ChkCol = 13

Application.Calculation = xlManual
Application.ScreenUpdating = True
Sheets("PROFITABILITY").Select
Range("A1:A139").EntireRow.Hidden = False


For RowCnt = BeginRow To EndRow

        On Error GoTo ErrorMsg

    If Cells(RowCnt, ChkCol).Value = 0 Then
        Cells(RowCnt, ChkCol).EntireRow.Hidden = True
        End If
        Next RowCnt

        Application.Calculation = xlAutomatic
        Application.ScreenUpdating = True
        Exit Sub

ErrorMsg:
        Application.ScreenUpdating = True
        MsgBox ("Automatic macro can not run properly. Please make sure that you have entered all the figures in required fields in previous tables." & vbNewLine & vbNewLine & "You can find all incorrectly filled rows by searching ""!!!"" symbol on the right side of the table. When using ""Own method (%)"" the row sum must be equal to 100 %.")
        Sheets("ACTIVITY DRIVERS AND ALLOCATION").Select
        Range("G6").Select
        Application.Calculation = xlAutomatic
        End Sub

Mod. lisäsi kooditagit

neau33 [25.05.2010 21:03:44]

#

Moro ak77116!

testaa toimisiko näin...

Sub HideRows()

   BeginRow = 16: EndRow = 138: ChkCol = 13

   DisplayAlerts = False
   Calculation = xlManual
   ScreenUpdating = False
   Sheets("PROFITABILITY").Select
   Range("A1:A139").EntireRow.Hidden = False

   For RowCnt = BeginRow To EndRow

      On Error ResumeNext

      If Cells(RowCnt, ChkCol).Value = 0 Then
        Cells(RowCnt, ChkCol).EntireRow.Hidden = True
      End If

      If Err <> 0 Then
        Err.Clear
        On Error Goto 0
        MsgBox ("Automatic macro can not run properly. " & _
        "Please make sure that you have entered all the " & _
        "figures in required fields in previous tables." _
        & vbNewLine & vbNewLine & _
        "You can find all incorrectly filled rows by searching " & _
        Chr(34) & "!!!" & Chr(34) & "symbol on the right side " & _
        "of the table. When using " & Chr(34) & "Own method (%)" & _
        & Chr(34) & " the row sum must be equal to 100 %.")
        Sheets("ACTIVITY DRIVERS AND ALLOCATION").Select
        Range("G6").Select
      End If

   Next RowCnt

   Calculation = xlAutomatic
   ScreenUpdating = True
   DisplayAlerts = True

End Sub

ak77116 [26.05.2010 10:38:56]

#

Hei Nea!

Kiitos vastauksestasi! Koodisi toimii varmasti hienosti, mutta taisin ilmaista asiani hiukan epäselvästi. Anteeksi siitä, koetan uudelleen:

Eli tuo alkuperäinen makro toimii ihan kuin pitääkin, mutta haluaisin siihen vielä lisäyksen, joka tarkistaisi "!!!" merkinnät S-sarakkeesta toiselta sheetiltä "Allocation". Eli jotakin tällaista pitäisi lisätä:

- Tarkastele Sheettiä "Allocation" ja aluetta S6;S66
- Jos alueella on merkki "!!!", mene kohtaan ErrorMsg
- jos missään solussa ei ole merkkiä "!!!", jatka makroa eteenpäin

Yritin lisätä tällaista itse tuohon koodiin, mutta luovuin ajatuksesta kun se jäi pyörimään paikallaan eikä lukenut makroa eteenpäin. Kyse lienee tavallisesta IF Then funktion käyttämisestä.

EDIT: Nythän mä tajusin missä on vika! Mulla on automaattinen makro joka käynnistyy joka kerta kun "Profitability" sivun aktivoi. Makro jumittaa siksi että käsken sitä käymään ensin toisella sheetillä ja tulemaan takaisin. Eli makro jää sahaamaan khden sivun väliä. Hmm, täytyypä miettiä jokin toisenlainen ratkaisu...

Vastaus

Aihe on jo aika vanha, joten et voi enää vastata siihen.

Tietoa sivustosta