Moi!
Tein ohjelman, mihin liittyy hakemistossa oleva excel-taulukko. En kuitenkaan saa taulukkoa auki vb6:sta. Olen yrittänyt mm. shell (excel.exe c:\ohjelma\tilasto.xls) bugaa vain ko. riviä! Esim. notepadin tuolla saa auki, mutta ei exceliä. Excel myös avautuu Windowsin komentokehoitteesta, mutta ei vb6:ssa.
No, yritin sitten linkittää ko. excel-taulukkoa ohjelmaani ja se onnistui siihen asti, kun tein ohjelmasta exe:n ja asennus tiedoston. Ennen toimenpiteitä excel-taulukko (ohjelmassa) päivittyi myös sen mukaan miten taulukkoa oli excelissä päivitetty.
Kyseessä on siis urheilujoukkueen osallistumis-seurantalista joka päivitetään jossain ja lähetetään muille ohjelman omaaville esim. s-postilla. Nyt siis postin saanut henkilö heittää päivitetyn listan hakemistoon c:\ohjelma ja taulukon pitäisi päivittyä varsinaiseen ohjelmaan. Näin ei vain käy.
Googlessa neuvottiin ainakin 5-6 eri versioo kuinka taulukon saa päivittymään, mutta en saanut näistä mitään toimimaan.
Kiitokset vastauksista jo etukäteen!
Moi Apuvaaaa!
Siinä tapauksessa, että ko. seurantalistan käyttäjillä on Excel asennettuna ei ole mitään järkeä rukata moista viritelmää VB6:ssa tai muussakaan erillisessä ohjelmointiympäristössä (unohdetaan ohjelmoinnin harjoittelu). Sensijaan toimiva viritelmä on helposti toteutettvissa Excel/VBA:lla.
Se taho, joka hoitaa seurantalistan päivitykset tarvitsee VBA-viritelmän, joka pukkaa päivitetyn datan esim. csv-muodossa web-palvelimelle.
Seurantalistan käyttäjät tarvitsevat kopion VBA-viritelmästä, joka lataa päivitetyn tiedoston em. palvelimelta työkirjan avaamisen yhteydessä ja/tai ajoitetusti ja siirtää ladatun .csv -tiedoston datan työkirjansa johonkin tauluun.
Kun tieto on noudettavissa yhdestä ja samasta paikasta vältytään turhilta s-postin lähettely/seuranta viritelmiltä (hieman osviittaa).
mutta tässä kuitenkin viritelmä .xls -tiedoston avaamiseksi VB:n kautta Exceliin...
Private ExelPath As String Private Sub Form_Load() Set WshShell = CreateObject("WScript.Shell") Dim i As Integer: For i = 8 To 20 Dim strValue As String: strValue = "" On Error Resume Next strValue = WshShell.RegRead( _ "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Office\" & _ CStr(i) & ".0\Excel\InstallRoot\Path") If strValue <> "" Then ExelPath = strValue: Exit For End If If Err <> 0 Then Err.Clear On Error GoTo 0 End If Next i Set WshShell = Nothing End Sub Private Sub Command1_Click() Dim xlsPath As String: xlsPath = "C:\Testi.xls" 'esim. If ExelPath <> "" Then If Dir(xlsPath) <> "" Then Dim MyLng As Long, cmdStr As String cmdStr = ExelPath & "Excel.exe " & xlsPath MyLng = Shell(cmdStr, vbNormalFocus) If MyLng = 0 Then MsgBox ("Tapahtui virhe avattaessa tiedostoa " & xlsPath) End If Else MsgBox ("Tiedostoa " & xlsPath & " ei löydy!" End If Else MsgBox "Microsoft Excel ei ole asennettuna tähän järjestelmään!" End If End Sub
Suur kiitokset Nea! Kokeilen tuota hetimiten.
Vielä vähän ohjelmasta. Tuntui siis luontevammalta ja hepommalta luoda ohjelmaan exceliin avautuvat yleisesti päivittyvät tiedot, kuten juuri tämä harjoitusseuranta, rangaistusseuranta (kun 3*10= toimenpide), pistepörssi ja rangaistustilastot. Jos käytettävissä olisi web-palvelin ohjelmaa ei edes tarvitsisi. Tuolloin tilastot ja pelaajatietokannat voisi toteuttaa severille.
Nyt tarkoituksena on siis se, että tämä ohjelma on käytössä jojo:lla, rahastonhoitajalla, huoltajalla ja valmentajilla. Pääsääntöisesti jokainen taho päivittää omia tehtävätietojaan excel-taulukoihin ja viestityksen jälkeen ne tiedot ovat myös muiden ohjelmaa käyttävien tiedossa.
Ohjelma sinällään on vain pelkkä tietokanta pelaajista jossa on mm. lisenssit (numerot) puh, yh ym.ym. Tuntui luontevalta, että ohjelmasta olisi myös pääsy tilastoihin, jolloin ei tarvitsisi aina erikseen (kesken ajatuksen) lähteä etsimään ja availemaan jotakin excel-tiedostoa, kun se olisi ohjelmassa yhden napin takana. Nythän siis näitä erillisiä excel-taulukoita päivitellään ja heitellään puolin sun toisin s-postilla. Lyhyesti sanottuna on tarkoitus helpottaa ohjelmallisesti joukkueen tiedonhallintaa.
Aihe on jo aika vanha, joten et voi enää vastata siihen.