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
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
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..
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
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?
Aihe on jo aika vanha, joten et voi enää vastata siihen.