Vba probleema

Vien excelin kautta tietoja toiminnanohj.järjestelmäämme.

Nyt mulla on seuraava koodi:

Set xclapp = GetObject("Excel.Application")
Set xclwbk = xclapp.Workbooks.Open("c:\documents and settings\kukkuu.xls")
Set xclsht = xclwbk.Sheets("Sheet1")

For i = 2 To xclapp.ActiveCell.SpecialCells(11).Row
For j = 1 To xclapp.ActiveCell.SpecialCells(11).Column
If j = 1 Then infot = xclsht.Cells(i, j).Value
Next

Kun aloitan tämän makron, avaa excel tämän saman tiedoston kahteen kertaan? Miten tuota exceliä pitäisi kutsua, että se tajuisi ottaa tiedot kyseisestä työkirjasta? Miten siis määritetään avoinna oleva työkirja objectiksi?
10585
Äänestä

Muut lukivat myös

Vastaukset 10

Vanhimmat

Ja missäköhän tämä koodi on?

Jos koodi on jo samassa työkirjassa niin silloin muutetaan viittaus (Set xclsht = xclwbk.Sheets("Sheet1")) avoinna olevaan työkirjaan. Tupla-avautumista ei pitäisi tapahtua jos koodi on jossain toisessa työkirjassa.

Kunde osannee auttaa tuossa ensimmäisessä kohdassa.

Äänestä
  • viittaus referensseissä Excel kirjastoon!

    Sub SiirräExceliin()
    Dim Excel As Object
    Dim ExcelSheet As Object

    On Error Resume Next
    Set Excel = GetObject(, "Excel.Application")
    If Err 0 Then
    Err.Clear
    Set Excel = CreateObject("Excel.Application")
    If Err 0 Then
    MsgBox "Exceliä ei voitu aukaista ", vbExclamation
    End
    End If
    End If
    On Error GoTo 0
    Excel.Visible = True
    Excel.Workbooks.Open ("c:\documents and settings\kukkuu.xls")
    ' oma koodi alkaa...
    Sheets(1).Activate
    infot = Range("J9")
    MsgBox infot
    ' oma koodi loppuu...
    Excel.Quit
    Set Excel = Nothing
    End Sub

    Äänestä

  • kunde kirjoitti:

    viittaus referensseissä Excel kirjastoon!

    Sub SiirräExceliin()
    Dim Excel As Object
    Dim ExcelSheet As Object

    On Error Resume Next
    Set Excel = GetObject(, "Excel.Application")
    If Err 0 Then
    Err.Clear
    Set Excel = CreateObject("Excel.Application")
    If Err 0 Then
    MsgBox "Exceliä ei voitu aukaista ", vbExclamation
    End
    End If
    End If
    On Error GoTo 0
    Excel.Visible = True
    Excel.Workbooks.Open ("c:\documents and settings\kukkuu.xls")
    ' oma koodi alkaa...
    Sheets(1).Activate
    infot = Range("J9")
    MsgBox infot
    ' oma koodi loppuu...
    Excel.Quit
    Set Excel = Nothing
    End Sub

    Sorry, oon selittänyt taas huonosti. Tuo koodi on siis samaisessa excelissä moduuli1:ssä.

    Eli olen tehnyt makron kyseiseen exceliin, joka poimii tiedot sheetiltä1 ja vie ne järjestelmään. koodi toimii muuten, mutta tällä koodilla tiedosto "kukkuu" aukeaa uudestaan, vaikka se on jo auki.
    Jos vaihdan tuon CreateObjectin GetObjectiksi, saan virheilmoituksen automation error, invalid syntax.
    Tässä koko koodi, lukuunottamatta kirjautumista järjestelmään. Miten tuohon alkuun määritellään, että kyse on juurikin tästä työkirjasta?:

    Set xclapp = CreateObject("Excel.Application")
    Set xclwbk = xclapp.Workbooks.Open("c:\documents and settings\kukkuu.xls")
    Set xclsht = xclwbk.Sheets("Sheet1")
    For i = 2 To xclapp.ActiveCell.SpecialCells(11).Row
    For j = 1 To xclapp.ActiveCell.SpecialCells(11).Column
    If j = 1 Then infot = xclsht.Cells(i, j).Value
    Next
    session.findById("wnd[0]").maximize
    session.findById("wnd[0]/mbar/menu[1]/menu[3]").Select
    session.findById("wnd[0]/usr/ctxt[0]").Text = excel.Cells(1, 10).Value
    session.findById("wnd[0]/usr/ctxt[4]").Text = infot
    session.findById("wnd[0]/usr/ctxt[4]").SetFocus
    session.findById("wnd[0]/usr/ctxt[4]").caretPosition = 7
    session.findById("wnd[0]").sendVKey 0
    Next
    MsgBox "ALL" & CStr(xclapp.ActiveCell.SpecialCells(11).Row - 1) & "Excel rows processed"

    End Sub

    Äänestä

  • kääpiöäly kirjoitti:

    Sorry, oon selittänyt taas huonosti. Tuo koodi on siis samaisessa excelissä moduuli1:ssä.

    Eli olen tehnyt makron kyseiseen exceliin, joka poimii tiedot sheetiltä1 ja vie ne järjestelmään. koodi toimii muuten, mutta tällä koodilla tiedosto "kukkuu" aukeaa uudestaan, vaikka se on jo auki.
    Jos vaihdan tuon CreateObjectin GetObjectiksi, saan virheilmoituksen automation error, invalid syntax.
    Tässä koko koodi, lukuunottamatta kirjautumista järjestelmään. Miten tuohon alkuun määritellään, että kyse on juurikin tästä työkirjasta?:

    Set xclapp = CreateObject("Excel.Application")
    Set xclwbk = xclapp.Workbooks.Open("c:\documents and settings\kukkuu.xls")
    Set xclsht = xclwbk.Sheets("Sheet1")
    For i = 2 To xclapp.ActiveCell.SpecialCells(11).Row
    For j = 1 To xclapp.ActiveCell.SpecialCells(11).Column
    If j = 1 Then infot = xclsht.Cells(i, j).Value
    Next
    session.findById("wnd[0]").maximize
    session.findById("wnd[0]/mbar/menu[1]/menu[3]").Select
    session.findById("wnd[0]/usr/ctxt[0]").Text = excel.Cells(1, 10).Value
    session.findById("wnd[0]/usr/ctxt[4]").Text = infot
    session.findById("wnd[0]/usr/ctxt[4]").SetFocus
    session.findById("wnd[0]/usr/ctxt[4]").caretPosition = 7
    session.findById("wnd[0]").sendVKey 0
    Next
    MsgBox "ALL" & CStr(xclapp.ActiveCell.SpecialCells(11).Row - 1) & "Excel rows processed"

    End Sub

    Siis kukkuu on avoinna ja haluat siitä siirtää Sheet1 A sarakkeen tiedot alueelta A2:Axx vai?
    Jos näin on niin excelin objekti on turha

    parempi toteuttaa näin

    Sub Siirrä()
    Dim vika As Long
    vika = Range("A65536").End(xlUp).Row
    Sheets("Sheet1").Activate
    For Each solu In Range("A2:A" & vika)
    session.findById("wnd[0]").maximize
    session.findById("wnd[0]/mbar/menu[1]/menu[3]").Select
    session.findById("wnd[0]/usr/ctxt[0]").Text = Cells(1, 10).Value
    session.findById("wnd[0]/usr/ctxt[4]").Text = infot
    session.findById("wnd[0]/usr/ctxt[4]").SetFocus
    session.findById("wnd[0]/usr/ctxt[4]").caretPosition = 7
    session.findById("wnd[0]").sendVKey 0
    Next
    End Sub

    Äänestä

  • kunde kirjoitti:

    Siis kukkuu on avoinna ja haluat siitä siirtää Sheet1 A sarakkeen tiedot alueelta A2:Axx vai?
    Jos näin on niin excelin objekti on turha

    parempi toteuttaa näin

    Sub Siirrä()
    Dim vika As Long
    vika = Range("A65536").End(xlUp).Row
    Sheets("Sheet1").Activate
    For Each solu In Range("A2:A" & vika)
    session.findById("wnd[0]").maximize
    session.findById("wnd[0]/mbar/menu[1]/menu[3]").Select
    session.findById("wnd[0]/usr/ctxt[0]").Text = Cells(1, 10).Value
    session.findById("wnd[0]/usr/ctxt[4]").Text = infot
    session.findById("wnd[0]/usr/ctxt[4]").SetFocus
    session.findById("wnd[0]/usr/ctxt[4]").caretPosition = 7
    session.findById("wnd[0]").sendVKey 0
    Next
    End Sub

    Joo siis tämän tiedoston nimi on kukkuu, eli yhdestä tiedostosta kyse. Tuo on muuten hyvä, mutta nyt siirtyy kaikki sarakkeen A rivit yhtenä könttänä, kun mulla tuossa koodissa oli tarkoitus siirtää rivi kerrallaan.

    Eli mulla on kaksi paikkaa toim.ohj.järjestelmässä, johon dataa siirrän. Toinen on tuo session.findById("wnd[0]/usr/ctxt[0]").Text = Cells(1, 10).Value, jossa tuo Cells(1, 10) on aina vakio.
    ja toinen:
    session.findById("wnd[0]/usr/ctxt[4]").Text = infot, johon pitäisi siis tulla aina arvo A-sarakkeesta. Ensin A1, sitten A2 jne.,
    Jokaisen A-sarakkeesta syötetyn solun jälkeen järjestelmä painaa automaattisesti tallennusta: session.findById("wnd[0]").sendVKey 0 Ja valitsee seuraavan solun A-sarakkeesta, sekä ilmoittaa, kun rivit on käsitelty.

    Tuo mun aiemmin esittämä koodi siis toimii kun se laukaistaan jostain toisesta paikkaa, nyt kuitenkin haluasin, että kaikki olisi tuossa yhdessää kukkuu tiedostossa. Eli Sheetillä 1 arvot ja makro tietojen vientiin

    Helkkari näitä on vaikea selittää, kun olen vielä aika keltanokka varsinkin excelin kanssa.

    Äänestä

  • Kääpiöäly kirjoitti:

    Joo siis tämän tiedoston nimi on kukkuu, eli yhdestä tiedostosta kyse. Tuo on muuten hyvä, mutta nyt siirtyy kaikki sarakkeen A rivit yhtenä könttänä, kun mulla tuossa koodissa oli tarkoitus siirtää rivi kerrallaan.

    Eli mulla on kaksi paikkaa toim.ohj.järjestelmässä, johon dataa siirrän. Toinen on tuo session.findById("wnd[0]/usr/ctxt[0]").Text = Cells(1, 10).Value, jossa tuo Cells(1, 10) on aina vakio.
    ja toinen:
    session.findById("wnd[0]/usr/ctxt[4]").Text = infot, johon pitäisi siis tulla aina arvo A-sarakkeesta. Ensin A1, sitten A2 jne.,
    Jokaisen A-sarakkeesta syötetyn solun jälkeen järjestelmä painaa automaattisesti tallennusta: session.findById("wnd[0]").sendVKey 0 Ja valitsee seuraavan solun A-sarakkeesta, sekä ilmoittaa, kun rivit on käsitelty.

    Tuo mun aiemmin esittämä koodi siis toimii kun se laukaistaan jostain toisesta paikkaa, nyt kuitenkin haluasin, että kaikki olisi tuossa yhdessää kukkuu tiedostossa. Eli Sheetillä 1 arvot ja makro tietojen vientiin

    Helkkari näitä on vaikea selittää, kun olen vielä aika keltanokka varsinkin excelin kanssa.

    Sub Siirrä()
    Dim vika As Long
    vika = Range("A65536").End(xlUp).Row
    Sheets("Sheet1").Activate
    For Each solu In Range("A2:A" & vika)
    session.findById("wnd[0]").maximize
    session.findById("wnd[0]/mbar/menu[1]/menu[3]").Select
    session.findById("wnd[0]/usr/ctxt[0]").Text = Cells(1, 10).Value
    session.findById("wnd[0]/usr/ctxt[4]").Text = solu
    session.findById("wnd[0]/usr/ctxt[4]").SetFocus
    session.findById("wnd[0]/usr/ctxt[4]").caretPosition = 7
    session.findById("wnd[0]").sendVKey 0
    Next
    MsgBox "ALL " & vika - 1 & " Excel rows processed"
    End Sub

    Äänestä

  • kunde kirjoitti:

    Sub Siirrä()
    Dim vika As Long
    vika = Range("A65536").End(xlUp).Row
    Sheets("Sheet1").Activate
    For Each solu In Range("A2:A" & vika)
    session.findById("wnd[0]").maximize
    session.findById("wnd[0]/mbar/menu[1]/menu[3]").Select
    session.findById("wnd[0]/usr/ctxt[0]").Text = Cells(1, 10).Value
    session.findById("wnd[0]/usr/ctxt[4]").Text = solu
    session.findById("wnd[0]/usr/ctxt[4]").SetFocus
    session.findById("wnd[0]/usr/ctxt[4]").caretPosition = 7
    session.findById("wnd[0]").sendVKey 0
    Next
    MsgBox "ALL " & vika - 1 & " Excel rows processed"
    End Sub

    Nyt toimii hyvin! Ja erittäin suuri kiitos jälleen!

    Äänestä

  • kunde kirjoitti:

    Sub Siirrä()
    Dim vika As Long
    vika = Range("A65536").End(xlUp).Row
    Sheets("Sheet1").Activate
    For Each solu In Range("A2:A" & vika)
    session.findById("wnd[0]").maximize
    session.findById("wnd[0]/mbar/menu[1]/menu[3]").Select
    session.findById("wnd[0]/usr/ctxt[0]").Text = Cells(1, 10).Value
    session.findById("wnd[0]/usr/ctxt[4]").Text = solu
    session.findById("wnd[0]/usr/ctxt[4]").SetFocus
    session.findById("wnd[0]/usr/ctxt[4]").caretPosition = 7
    session.findById("wnd[0]").sendVKey 0
    Next
    MsgBox "ALL " & vika - 1 & " Excel rows processed"
    End Sub

    Miten koodia on muutettava, jos halutaan sarakkeen B arvot kohtaan: session.findById("wnd[0]/usr/ctxt[0]").Text = Cells(1, 10).Value, per rivi?

    Yritin näin mutta ei toimi:

    Dim vika As Long
    Dim vika2 As Long
    vika = Range("A65536").End(xlUp).Row
    vika2 = Range("B65536").End(xlUp).Row
    Sheets("Sheet1").Activate
    For Each solu In Range("A2:A" & vika)
    For Each solu2 In Range("B2:B" & vika2)
    session.findById("wnd[0]/usr/ctxt[0]").Text = solu2
    session.findById("wnd[0]/usr/ctxt[4]").Text = solu
    session.findById("wnd[0]/usr/ctxt[4]").SetFocus
    session.findById("wnd[0]/usr/ctxt[4]").caretPosition = 7
    session.findById("wnd[0]").sendVKey 0
    Next
    Next
    MsgBox "ALL " & vika - 1 & " Excel rows processed"
    End Sub

    Äänestä

  • kääpiöäly kirjoitti:

    Miten koodia on muutettava, jos halutaan sarakkeen B arvot kohtaan: session.findById("wnd[0]/usr/ctxt[0]").Text = Cells(1, 10).Value, per rivi?

    Yritin näin mutta ei toimi:

    Dim vika As Long
    Dim vika2 As Long
    vika = Range("A65536").End(xlUp).Row
    vika2 = Range("B65536").End(xlUp).Row
    Sheets("Sheet1").Activate
    For Each solu In Range("A2:A" & vika)
    For Each solu2 In Range("B2:B" & vika2)
    session.findById("wnd[0]/usr/ctxt[0]").Text = solu2
    session.findById("wnd[0]/usr/ctxt[4]").Text = solu
    session.findById("wnd[0]/usr/ctxt[4]").SetFocus
    session.findById("wnd[0]/usr/ctxt[4]").caretPosition = 7
    session.findById("wnd[0]").sendVKey 0
    Next
    Next
    MsgBox "ALL " & vika - 1 & " Excel rows processed"
    End Sub

    Sub Siirrä()
    Dim vika As Long
    vika = Range("A65536").End(xlUp).Row
    Sheets("Sheet1").Activate
    For Each solu In Range("A2:A" & vika)
    session.findById("wnd[0]").maximize
    session.findById("wnd[0]/mbar/menu[1]/menu[3]").Select
    session.findById("wnd[0]/usr/ctxt[0]").Text = solu.Offset(0, 1)
    session.findById("wnd[0]/usr/ctxt[4]").Text = solu
    session.findById("wnd[0]/usr/ctxt[4]").SetFocus
    session.findById("wnd[0]/usr/ctxt[4]").caretPosition = 7
    session.findById("wnd[0]").sendVKey 0
    Next
    MsgBox "ALL " & vika - 1 & " Excel rows processed"
    End Sub

    Keep EXCELing
    @Kunde

    Äänestä

  • kunde kirjoitti:

    Sub Siirrä()
    Dim vika As Long
    vika = Range("A65536").End(xlUp).Row
    Sheets("Sheet1").Activate
    For Each solu In Range("A2:A" & vika)
    session.findById("wnd[0]").maximize
    session.findById("wnd[0]/mbar/menu[1]/menu[3]").Select
    session.findById("wnd[0]/usr/ctxt[0]").Text = solu.Offset(0, 1)
    session.findById("wnd[0]/usr/ctxt[4]").Text = solu
    session.findById("wnd[0]/usr/ctxt[4]").SetFocus
    session.findById("wnd[0]/usr/ctxt[4]").caretPosition = 7
    session.findById("wnd[0]").sendVKey 0
    Next
    MsgBox "ALL " & vika - 1 & " Excel rows processed"
    End Sub

    Keep EXCELing
    @Kunde

    Ohhoijjaa, kun tunnen taas itseni tyhmäksi.... Kiitos!

    Äänestä

Ketjusta on poistettu 1 sääntöjenvastainen viesti.

Kommentoi aloitusta


Kääpiöäly kirjoitti:

Vien excelin kautta tietoja toiminnanohj.järjestelmäämme.

Nyt mulla on seuraava koodi:

Set xclapp = GetObject("Excel.Application")
Set xclwbk = xclapp.Workbooks.Open("c:\documents and settings\kukkuu.xls")
Set xclsht = xclwbk.Sheets("Sheet1")

For i = 2 To xclapp.ActiveCell.SpecialCells(11).Row
For j = 1 To xclapp.ActiveCell.SpecialCells(11).Column
If j = 1 Then infot = xclsht.Cells(i, j).Value
Next

Kun aloitan tämän makron, avaa excel tämän saman tiedoston kahteen kertaan? Miten tuota exceliä pitäisi kutsua, että se tajuisi ottaa tiedot kyseisestä työkirjasta? Miten siis määritetään avoinna oleva työkirja objectiksi?

Anonyymi
5000

Ilmoita asiaton sisältö

  • Sisältää materiaalia, joka on loukkaavaa, herjaavaa, rasistista, uhkailevaa tai ahdistelevaa.

  • Materiaali sisältää nimiä, yhteystietoja tai muita henkilökohtaisia tietoja. Julkisuuden henkilöistä, julkisissa viroissa toimivista ihmisistä sekä yritysten vastuuhenkilöistä saa keskustella työhön liittyen. Myös yksityiselämään liittyvistä asioista voi keskustella siltä osin, kuin niistä on julkisesti kerrottu.

  • Sisältää lapsille haitallista tai heiltä kiellettyä materiaalia. Seksuaalinen sisältö on sallittua aiheeseen tarkoitetuilla palstoilla, joiden ikäraja on 18 vuotta.

  • Lainvastaista sisältöä voi olla mm. yksityiselämää loukkaavan tiedon levitys, kiihottaminen kansanryhmää vastaan, laiton uhkaaminen, alaikäisiin liittyvä seksuaalinen sisältö/grooming, petokset, identiteettivarkaudet, kunnianloukkaukset ja tekijänoikeusrikkomukset.

  • Sisältö ei liity palstan tai keskusteluketjun aiheeseen.

  • Viesti ei ole suomea tai ruotsia (pl. International Forums), se sisältää mainontaa, se sisältää tekijänoikeuksin suojattua materiaalia, se on massapostitus tai jokin muu syy.

Jaa keskustelu