Kirjautuminen

Haku

Tehtävät

Keskustelu: Ohjelmointikysymykset: VBA: VB:n avulla exceliin vertailu kahden tiedoston välillä

Nikkis [06.02.2004 15:59:36]

#

Tervehdys! Osaiskohan joku auttaa VB ongelman kanssa? Olen tekemässä ohjelmanpätkää, joka ajetaan tiedostosta "hakee_raportista2.xls". Tarkoituksena on etsiä tiedostosta raportti2.xls Sellaisia VL-alkuisia rivejä, joita ei löydy tiedostosta hakee_raportista2.xls. Alla oleva koodin pätkä etsii ensin raportti2.xls:stä vl-alkuisen solun, avaa sen jälkeen hakee_raportista2.xls tiedoston ja käy kaikki VL alkuiset solut läpi. Ongelmana on vain vertailu, sitä en ole onnistunut tekemään. Jos laitan tohon jälkimmäiseen if lauseeseen If d = c Then... se ei toimi, eikä toimi myöskään jos laitan Set d = .Find(c, LookIn:=xlValues), koska tällöin se kyllä löytää alkuperäisen VL:n, mutta se ei jatka etsimistä seuraavilla VL:llä.

Tarkoituksena on lopulta saada ohjelmanpätkä, joka etsii tiedostosta raportti2.xls kaikki ne rivit joita ei ole tiedostossa hakee_raportista2.xls ja lisää ne uusina riveinä.

Static Sub etsi_vastaavuus()

Windows("raportti2.xls").Activate

With Worksheets(1).Range("A1:O50")
    Set c = .Find("VL???", LookIn:=xlValues)
        If Not c Is Nothing Then
            firstAddress = c.Address
        Do
            c.Interior.Pattern = xlPatternGray50
            Call Makro9(c)
            Set c = .FindNext(c)
            Loop Until Not c Is Nothing And c.Address = firstAddress

    End If
End With
   Windows("hakee_raportista2.xls").Activate
End Sub

Static Sub Makro9(c)


   Windows("hakee_raportista2.xls").Activate
    With Worksheets(1).Range("A1:O50")

        Set d = .Find("VL???", LookIn:=xlValues)
         If Not d Is Nothing Then
            fAddress = d.Address
        Do
            Range("S12").Select
                ActiveCell = c

            Range("U12").Select
            ActiveCell = d
           d.Interior.Pattern = xlPatternGray50
           Set d = .FindNext(d)
           Loop Until Not d Is Nothing And d.Address = fAddress
        End If
    End With
    Windows("raportti2.xls").Activate
End Sub

tnb [06.02.2004 16:54:38]

#

if c=d then... katsoo osoittavatko objektit samaan muistipaikkaan.

if c.value=d.value then ... vertailee objektien arvoja

eli siis näin

If c.Value = d.Value Then
    d.Interior.Pattern = xlPatternGray50
End If

Nikkis [06.02.2004 17:06:41]

#

Kiitos vinkistä! Hmm.. kokeilin laittaa tuon lauseen jälkimmäiseen If lauseeseen, mutta se jumittaa koko Excelin. Osaisitko kertoa missä vika? Alkaa tulla sokeaksi omalle koodilleen..

tnb [06.02.2004 18:58:09]

#

Itse tein niin että avasin samalla Excelillä molemmat työkirjat ja käytin Workbooks("nnn").activate käskyä.

Samoin poistin turhat
Range("S12").Select
ActiveCell = c

Range("U12").Select
ActiveCell = d

Nikkis [06.02.2004 22:42:03]

#

Ahaa.. hmm.. pystytkö tarkemmin valottamaan miten toi käsky toimii? Oon tässä ensimmäistä VB ohjelmaa vääntämässä, ja aika kummalliselta kieleltä vaikuttaa. Aaltosulkeita kaipailisin.. Onko sulla siis olemassa valmis pätkä, joka tekee ton?

Vastaus

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

Tietoa sivustosta