Vba probleema

Kääpiöäly

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?

10

585

    Vastaukset 10

    Anonyymi (Kirjaudu / Rekisteröidy)
    5000
    • untokuurna

      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.

      • 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


      • kääpiöäly
        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


      • 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


      • Kääpiöäly
        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.


      • 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


      • Kääpiöäly
        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!


      • kääpiöäly
        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


      • 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


      • kääpiöäly
        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!


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

    Luetuimmat keskustelut

    1. Mikä on totta mikä ei?

      Onko juoru vai ei että nimeltä mainitsematon henkilö on tehnyt naiselle/naisille jotain joka on väärin?
      Kuhmo
      21
      2214
    2. Päivän aivopieru Trumpilta

      Trump julisti sodan hyttysiä vastaan. Myös punkit ovat Trumpin sodan kohteena. Eikö vieläkään USA:n kansa tajua tuon uko
      Maailman menoa
      82
      1402
    3. Lopetetaanko tämä

      Juttu ja mennään eteenpäin? Pystytkö?
      Ikävä
      132
      958
    4. Just saying

      Mies joka antaa naiselle turvallisen olon, on seksikäs. Ei kieroja kikkoja ja haluaa olla vain sen yhden naisen mies.
      Ikävä
      142
      737
    5. Voisin antaa sulle nyt

      Halin❤️
      Ikävä
      54
      666
    6. Löytyikö syy miksi Martina on Muhiksen kanssa

      Saipa naurut Gekkosen kuvasta, missä ovat ravintola Hookissa Immu fight night ottelun jälkeen, Muhoksella pullottaa hirv
      Kotimaiset julkkisjuorut
      95
      662
    7. Janpen Thai lopettanut, miksiköhän

      Hyvää apetta teki.
      Suomussalmi
      13
      617
    8. Jos selviäisi että kaivattusi

      Olisi savant asperger? Rakastaisitko vielä? Savant-lahjakkuus olisi kapea-alaista neroutta liittyen mekanisiin ja tilan
      Ikävä
      96
      592
    9. Jorma Uotinen läväytti härskin heiton - Paljastus uudesta TTK-romanssista?

      Tuomari Jorma Uotisen linja on välillä hyvinkin rohkea TTK:ssa. Hän näpäytti Jaakko Parkkalille ja Kastanja Rauhalalle v
      Tanssii tähtien kanssa
      12
      578
    10. Tosi kiva on

      Joo. Mitä olisit menettänyt jos olisit paljastanut itsesi?
      Ikävä
      65
      561
    11. Toivotko vielä viestiä

      Minulta? En rohkene enää ottaa yhteyttä, kun varmasti jo uusia naisia elämässä. Nolaisin vain itseni.
      Ikävä
      44
      549
    12. Jokin ei täsmää

      Joskus yksi vuosiluku saa katsomaan koko tarinaa uudestaan. Löysin gradun. Matematiikka ei oikein täsmää siihen, mitä mi
      Ikävä
      298
      546
    13. Tehdään yhdessä itsestämme

      Parhaat versiot❤️ Se vaatii molemmilta hyvää itsetuntoa!
      Ikävä
      42
      525
    14. Olen ajellut Dieseleillä yli 50 vuotta.

      Enkä ole koskaan kaivannut sähköautoa.
      Hybridi- ja sähköautot
      133
      509
    15. Oliko Jani Halmeen aika jo tippua TTK:sta?

      Jani Halme ja Claudia Ketonen joutuivat jättämään TTK:n. Halme ja Ketonen saivat viimeiseksi jäänestä tanssista, sambas
      Tanssii tähtien kanssa
      28
      498
    16. Kuka kaipaa T m?

      Kerro nainen kirjaimesi vaan... Haluan miettiä kuka tulee ekana mieleeni.. kuin kurkistus tunteiden meren pinnalle, jota
      Ikävä
      36
      490
    17. Mitä tunteita

      Sulla vielä on?
      Ikävä
      77
      484
    18. Miksi jotku naiset on niin tyhmiä

      Että elättelevät turhaa toivoa toisen kustannuksella. Onko ne kaikki kaappilesboja vai mikä niitä vaivaa? Sitten itketä
      Ikävä
      52
      474
    19. On väärin

      Tykätä ja haluta sua kun tilanne täysin mahdoton mutta minkäs teet. Mun sisällä roihuaa 🔥 kunpa tietäisit mitä sä minus
      Ikävä
      31
      469
    20. Vaikea on tämän

      Jälkeen suhtautua sinuun ilman ettei muista kirjoituksiasi.
      Ikävä
      58
      447
    Aihe