Kirjautuminen

Haku

Tehtävät

Keskustelu: Ohjelmointikysymykset: VB6 & Excel yhteys (VBA)

Konna [11.05.2005 07:51:52]

#

Kuinka saan tiedon liikkumaan VB6 ja Excelin välillä? Olen aloittelija VB6 kanssa ja pieni apu olisi tarpeen.

Minulla on VB:ssä useita textboxeja ja niistä pitäisi saada arvot Exceliin haluttuihin soluihin. Tämän pitäisi toimia myös toisin päin, elikkä Excel soluun pistetty arvo pitäisi saada lähetettyä VB6:n textboxiin.

BadSource [11.05.2005 09:36:11]

#

Lisää Formille yksi buttoni (Command1) ja käy tuota koodia läpi. Pitäisi hieman raottua Excelin käyttö VB:n kautta.

ps. Lisää projektiin Excel:n referenssi, eli Project->References...->"Microsoft Excel x Object Library"->Ok, niin koodin käyttö onnistuu.
(x riippuu käyttämästäsi Excel-versiosta)

Option Explicit

Private xlDataApp As Excel.Application
Private xlDataBook As Excel.Workbook
Private ExcelWasNotRunning As Boolean

Private Sub Command1_Click()
    If Not funcOpenExcel Then
        MsgBox "ErrorTerror"
    Else
        xlDataBook.Application.Range("B2").Value = "Hello World!"
        MsgBox xlDataBook.Application.Range("B2").Value
        If ExcelWasNotRunning Then If Not xlDataBook.Application.Visible Then xlDataApp.Visible = True
    End If
End Sub

Private Sub Form_Unload(Cancel As Integer)

On Error Resume Next

    xlDataBook.Saved = True                     'Kun ei haluta tallentaa muutoksia, pitää valehdella
    xlDataBook.Close                            'Suljetaan käytetty Workbook
    If ExcelWasNotRunning = True Then           'Tarkistetaan oliko Excel käynnissä
        xlDataApp.Application.Quit              'Jos ei niin suljetaan se...
    Else
        xlDataApp.Application.Visible = True    'Muussa tapauksessa aktivoidaan se
    End If

    If Err.Number <> 0 Then Err.Clear
    Set xlDataBook = Nothing                    'Vapautetaan käytetyt xl-muuttujat
    Set xlDataApp = Nothing
    End

End Sub

Private Function funcOpenExcel(Optional file As String) As Boolean
    Dim MyXl As Object

On Error Resume Next

    funcOpenExcel = False
    ExcelWasNotRunning = False

    Set MyXl = GetObject(, "Excel.Application")
    If Err.Number <> 0 Then ExcelWasNotRunning = True   '0:lla Excel käynnissä, muuten virhe
    Err.Clear                                           'Putsataan Virhe-koodi

    Set xlDataApp = IIf(ExcelWasNotRunning, New Excel.Application, MyXl)

    Set xlDataBook = funcOpenWorkbook(file)
    If Err.Number = 0 Then funcOpenExcel = True
    Err.Clear
    Set MyXl = Nothing

End Function

Private Function FetchFile(ByVal file As String) As String
    FetchFile = Right(file, Len(file) - InStrRev(file, "\"))
End Function

Private Function funcOpenWorkbook(ByVal file As String) As Excel.Workbook
    Dim xlBook As Excel.Workbook
    Dim FileWasNotOpen As Boolean
    Dim FileName As String
    Dim i As Integer

    If file <> "" Then
        If InStr(1, file, "\") = 0 Then
            FileName = file
            file = App.Path & "\" & file
        Else
            FileName = FetchFile(file)
        End If
        If xlDataApp.Application.Workbooks.Count <> 0 Then
            For i = 1 To xlDataApp.Workbooks.Count
                If xlDataApp.Workbooks(i).name = FileName Then
                    Set xlBook = xlDataApp.Workbooks(i) 'File on auki ja se otetaan käyttöön
                    xlBook.Saved = True                 'Tiedosto suljetaan ilman talletusta, joten .Saved=true
                    xlBook.Close                        'Suljetaan avonainen tiedosto...
                    FileWasNotOpen = True               '...näin varmistetaan halutun laisen tiedoston avaaminen
                    Exit For                            'avaamalla sen uudestaan
                End If
                FileWasNotOpen = True               'tiedostoja on auki, mutta File ei ole auki
            Next
        Else
            FileWasNotOpen = True                   'Tiedostoja ei ole auki, joten File ei ole auki
        End If

        If FileWasNotOpen Then
            Set xlBook = xlDataApp.Workbooks.Open(file)
            FileWasNotOpen = False
            For i = 1 To xlDataApp.Workbooks.Count
                If xlDataApp.Workbooks(i).name = FileName Then
                    Exit For
                End If
            Next
        End If

        xlBook.Application.Workbooks(i).Activate    'Aktivoidaan avattu tiedosto
    Else
        Set xlBook = xlDataApp.Application.Workbooks.Add
    End If

    Set funcOpenWorkbook = xlBook
    Set xlBook = Nothing

End Function

Konna [11.05.2005 12:15:19]

#

Tolla data-ohjaimellla sain excelin ja vb6 kommunikoimaan mut en oikein tajua miten ton saa kirjottaa haluttuun soluun. Jos valitsen vaikka DataFieldiksi F1 kirjoittaa exceliin eri paikkaan. Ei taida toi F1 olla solun arvo?

Onko järkevää rakentaa tämän tyyppistä ohjelmaa data-ohjaimella?

Vastaus

Aihe on jo aika vanha, joten et voi enää vastata siihen.

Tietoa sivustosta