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.
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 FunctionTolla 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?
Aihe on jo aika vanha, joten et voi enää vastata siihen.