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?
Vba probleema
10
534
Vastaukset
- 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 SubSorry, 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 SubSiis 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 SubJoo 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 SubNyt 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 SubMiten 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 SubSub 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
@KundeOhhoijjaa, kun tunnen taas itseni tyhmäksi.... Kiitos!
Ketjusta on poistettu 1 sääntöjenvastaista viestiä.
Luetuimmat keskustelut
Yritystuet 10 mrd. vuodessa, eli yrittäjäriski valtiolla kuten kommunismissa
Pelkästään Viking Linen viinanhakuristeilyitä sponsoroidaan 20 miljoonalla eurolla vuosittain. Dieselin verotukikin on1209935- 1039795
Sannan kirja USA:n bestseller!
"Congratulations to Sanna Marin's HOPE IN ACTION, officially a USA TODAY bestseller!" Kertoo Scribner. Mitäs persut tä349101- 217901
Sture Fjäder haluaa tuensaajien nimet julki
Kokoomuspoliitikko haluaa yli 800 euroa kuukaudessa tukia saavien nimet julki. Ehkä olisi syytä julkaista myös kuvat? h1776284Luotathan siihen tunteeseen, joka välillämme on?
Uskothan myös, että se kestää tämän? Kaipaan sinua valtavasti. Vielä tehdään yhdessä tästä jotain ihmeellistä ja kaunist585488Onnettomuus
Hukkajärventiellä kolaroi lavetti ja henkilöauto. Uutista ei missään! Hys hys ollaanko hiljaa tästäkin?104952Metsäalan rikolliset
Jokohan alkaa vähitellen kaatua kulissit näillä ihmiskauppaa harjoittavilla firmoilla.304802- 394438
- 404425