Làm việc với đối tượng Excel từ Visual Basic 6.0 và VB 2008

Liên hệ QC

PhanTuHuong

VBA & VB.NET for Excel & AutoCad
Thành viên danh dự
Tham gia
13/6/06
Bài viết
7,121
Được thích
24,279
Trong Visual Basic 6.0 (VB6) hoặc VBA bạn có thể tạo và làm việc với một Workbook, ví dụ như sau:

Lưu ý: Để làm việc với đối tượng này, trong dự án của bạn phải tham chiếu đến đối tượng Microsoft Excel xx.0 Object Library (xx là số phiên bản Office trên máy của bạn)


Mã:
Dim oXLApp as Excel.Application    '[COLOR=darkgreen]Khai báo đối tượng[/COLOR]
Set oXLApp = New Excel.Application  [COLOR=darkgreen]'Tạo đối tượng Excel[/COLOR]
 
[COLOR=darkgreen]' Bây giờ bạn có thể làm việc với oXLApp như là lớp ứng dụng (class)[/COLOR]
[COLOR=#006400]' Để làm việc với lớp này đòi hỏi bạn phải có kiến thức cơ bản về nó, bao gồm: cấu trúc, thuộc tính, phương thức và sự kiện... [/COLOR]
[COLOR=darkgreen][/COLOR] 
[COLOR=#006400]' Ví dụ:[/COLOR]
oXLApp.Visible = True               [COLOR=darkgreen]'Hiện đối tượng[/COLOR]
[COLOR=black]Debug.Print oXLApp.Name          [/COLOR][COLOR=darkgreen]'In ra cửa sổ Imediate tên của lớp[/COLOR]
[COLOR=#006400]'Kết quả: Microsoft Excel[/COLOR]
[COLOR=darkgreen]'...(your code here)[/COLOR]
Set oXLApp = Nothing               [COLOR=darkgreen]'Giải phóng oXLApp khỏi bộ nhớ[/COLOR]

____________________
Hiểu thêm về các thành phần (Components) và cấu trúc Microsoft Excel xx.0 Object Library , Click here!
 
Chỉnh sửa lần cuối bởi điều hành viên:
PhanTuHuong đã viết:
Từ chương trình ngoài, bạn có thể tạo và đọc Excel. Ví dụ về code VB, VBA:

Mã:
Dim oXLApp as Excel.Application    [COLOR="Lime"]Khai báo đối tượng[/COLOR]
  Set oXLApp = New Excel.Application  [COLOR="lime"]'Tạo đối tượng Excel[/COLOR]

  oXLApp.Visible = True               [COLOR="lime"]'Hiện đối tượng[/COLOR]
  Set oXLApp = Nothing
Hướng nên cho đoạn mã và ví dụ cụ thể.

Lê Văn Duyệt
 
Chào anh Duyệt em thấy anh có một phần mềm rât tuyệt viết trên excel để quản lý kho liên kết giữa excel và access sử dụng ODBC data provide. Sao anh không bật mí cho chúng em một ví dụ về cái khoản này. Nó cũng là một ví dụ tốt cho chủ đề này mà
 
ruadangyeu đã viết:
Chào anh Duyệt em thấy anh có một phần mềm rât tuyệt viết trên excel để quản lý kho liên kết giữa excel và access sử dụng ODBC data provide. Sao anh không bật mí cho chúng em một ví dụ về cái khoản này. Nó cũng là một ví dụ tốt cho chủ đề này mà

Cái này xin Bác Duyệt cái source là biết liền chứ gì, Bác Duyệt hứa ai xin thì cho mà
 
Đây là đoạn code để có thể mở ứng dụng Excel từ VB6.0 và cả từ VBA của AutoCad )*&^) .
Khi mở cửa sổ VB 6.0, bạn chọn Standard EXE. Cửa sổ Project hiện ra với Form1. Bạn tao 1 CommandButton và copy đoạn code dưới đây.


Mã:
Public Sub cmdMoExcel_Click()
   Dim ExcelApp As Object
   On Error Resume Next		'Bỏ qua các lỗi gặp phải
   Set ExcelApp = GetObject(, "Excel.Application")
   If Err <> 0 Then			'Lỗi phát sinh khi Excel chưa mở
     Err.Clear			'Xoá lỗi báo
     Set ExcelApp = CreateObject("Excel.Application")
   End If
   ExcelApp.Visible = True		'Hiển thị cửa sổ Excel
   AppActivate ExcelApp.Caption	'Kích hoạt cửa sổ Excel
   ExcelApp.Workbooks.Add		'Thêm Workbook mới trong Excel
   Set ExcelApp = Nothing		'Xoá biến đối tượng
End Sub

Sau đó bạn bấm phím F5 để thử.

Các bạn nhớ khai báo thư viện đối tượng Microsoft Excel XX.0 Object Library trong menu Project/References... nhé (tương tự khai báo trong menu Tools/References... trong cửa sổ VBE)!
 
Lần chỉnh sửa cuối:
Liên kết giữa VST 2008 và office (Visual basic , Excel 2007)
1. Dạng nhúng: New Project à Office à chọn các dạng sau:
a. Excel 2007 Add-in
b. Excel 2007 Workbook
c. Excel 2007 Template
Đối với các ứng dụng office khác cũng làm tương tự. Các bạn có thể tham khảo bài viết của anh Hiền
2. Tạo thư viện liên kết
Bài viết của anh Hướng đã giới thiệu tạo thư viện DLL liên kết giữa VB6 và Excel.
Ở bài viết này tôi giới thiệu tạo thư viện từ VST 2008 (.NET Class Library) bằng 1 ví dụ cụ thể.
2.1. Tạo thư viện
2.1.1. Khởi động VST, New project à Visual basic à Class Library, chọn version .Net, đặt tên dự án HelloWordGPE à OK
Lúc này chương trình từ động tạo ra Class1.vb
Public Class Class1

End Class
2.1.2. Chèn thêm 1 Form mới cho dự án: Từ menu Project (hoặc từ biểu tượng Add New Item, hoặc từ cửa sổ Solution Explorer, chọn dự án, phải chuột hiện menu, chọn Add) à Add Window Form…
2.1.3. Tạo liên kết với Excel: Từ Menu Project à Add Reference à Com à Microsoft Excel 12.0 Library
2.1.4. Xóa toàn bộ code trong Class1.vb và thay bằng đoạn code sau:
Mã:
<ComClass(Class1.ClassId, Class1.InterfaceId, Class1.EventsId)> Public Class Class1
    Public Const ClassId As String = "057B80BB-565B-4ef0-94A4-48AA34E522E0"
    Public Const InterfaceId As String = "67279AD6-4D9D-4caf-9E0D-1F6F54F15AEE"
    Public Const EventsId As String = "F94C8B54-87A5-478b-8F61-E89D03044C5E"

    Public Function ptb1(ByVal a As Double, ByVal b As Double, ByVal c As Double) As String
        ptb1 = "Nghiệm của pt là x=" & ((c - b) / a).ToString
    End Function

    Public Sub showform()
        Dim newfrm As New Form1
        newfrm.Show()
    End Sub

    Public Sub MsgboxHello()
        MsgBox("Chào mừng bạn đến với VST 2008")
    End Sub

End Class
Ghi chú:
+ ClassId, InterfaceId, EventsId có thể lấy bằng cách: từ Menu Tool à Creat GUID
+ ptb1 à Tạo hàm giải pt bậc nhất
+ showform à Macro gọi Form1
2.1.5. Từ cửa sổ Solution Explorer double click vào Form1, cửa sổ Form1.vb[Design] hiện ra.
- Từ dụng cụ Toolbox tạo TextBox1, Button1, Button2, Button3
- Dùng chọn lần lượt các Button và đổi Text (nhãn – cách gọi cũ, VST 2008 chuyển thành Text) thành: Exit, Put Cell Value, Get Cell Value
2.1.6. Nháy chuột phải trên Form1, chọn View code, xóa toàn bộ code trong Form1.vb và Copy đoạn Code này vào
Mã:
Imports Microsoft.Office.Interop
Imports System.Windows.Forms

Public Class Form1

    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        Me.Text = "VST for Office"
        Me.TextBox1.Text = "Nhập chữ vào đây và click Put Cell Value hoặc chọn cell, click Get Cell Value để lấy dữ liệu"
    End Sub

    Private Sub Button_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click, Button2.Click, Button3.Click
        Dim ExApp As Excel.Application
        Dim btnclick As Button = CType(sender, Button)
        Select Case btnclick.Name
            Case "Button1"
                Me.Close()
            Case "Button2"
                Try
                    ExApp = GetObject(, "Excel.Application")
                    Dim cel As Excel.Range = ExApp.ActiveCell
                    cel.Value = Me.TextBox1.Text
                Catch ex As Exception
                End Try
            Case "Button3"
                Try
                    ExApp = GetObject(, "Excel.Application")
                    Dim cel As Excel.Range = ExApp.ActiveCell
                    Me.TextBox1.Clear()
                    Me.TextBox1.Text = cel.Value.ToString
                Catch ex As Exception
                End Try
        End Select

    End Sub
End Class
2.1.7. Từ Menu Project à HelloWordGPE Properties (hoặc từ cửa sổ Solution Explorer, chọn dự án, phải chuột hiện menu, chọn Properties)
Chọn Compile* à Đánh dấu checkBox Regiter for Com Interop
2.1.8. Từ Menu Project à Build HelloWordGPE
Lúc này tại thư mục Dự án (vd: D:\My Documents\Visual Studio 2008\Projects\HelloWordGPE\HelloWordGPE\bin\Release\) có các files sau: HelloWordGPE.dll, HelloWordGPE.pdb, …
2.2. Sử dụng thư viện
2.2.1. Chạy Excel, Mở cửa sổ VBA, chèn Module1
2.2.2. Từ menu Tools à Preferences à Browse à chọn đường dẫn đến file HelloWordGPE.pdb
2.2.3. Copy các đoạn code sau vào trong Module1
Mã:
Option Explicit

    Function ptbac1(ByVal a As Double, ByVal b As Double, ByVal c As Double) As String
        Dim pt As New HelloWordGPE.Class1
        ptbac1 = pt.ptb1(a, b, c)
    End Function

    Sub ShowformVST()
        Dim frmvb6 As New HelloWordGPE.Form1
        frmvb6.Show
    End Sub

    Sub ShowmsgVST()
        Dim loichao As New HelloWordGPE.Class1
        loichao.MsgboxHello
    End Sub
2.2.4. Sử dụng
Ví dụ này chúng ta đã sử dụng hàm, chạy Macro, hiện Form VST: Tương tác giữa Excel và Form từ thư viện.

2.1. Chú ý khi sử dụng thư viện DLL .Net
Để sử dụng thư viện trên các máy tính khác, chạy từ Dos dòng lệnh: regasm HelloWordGPE.dll /tlb: HelloWordGPE.dll.tlb
Từ file Excel nguồn bạn có thể save as thành Add-in để sử dụng cho các file khác.

Thêm một bước nữa tạo thư viện sử dụng như các hàm API của Windows bác nào biết Post lên cho anh em học hỏi nhé!

Toàn bộ File ví dụ kèm theo dưới đây
 

File đính kèm

  • image001.jpg
    image001.jpg
    19.3 KB · Đọc: 103
  • image002.jpg
    image002.jpg
    6 KB · Đọc: 60
  • image003.jpg
    image003.jpg
    14.7 KB · Đọc: 60
  • HelloWordGPE.rar
    37.9 KB · Đọc: 926
  • LienketgiuaVST2008vaExcel.rar
    43.7 KB · Đọc: 1,154
Chỉnh sửa lần cuối bởi điều hành viên:
Public Const ClassId As String = "057B80BB-565B-4ef0-94A4-48AA34E522E0"
Public Const InterfaceId As String = "67279AD6-4D9D-4caf-9E0D-1F6F54F15AEE"
Public Const EventsId As String = "F94C8B54-87A5-478b-8F61-E89D03044C5E"

Tôi chưa hiểu hết ý của cái này trong VB2008, giá trị đó lấy từ đâu, chạy ở máy khác thì sao? Micrsoft nói rất chung chung.

Còn đối với AutoCad đây:

It depends which library is actively registered. You can find this out through the Windows Registry:

Get the ClassID for AutoCAD.Application:
HKEY_CLASSES_ROOT\AutoCAD.Application\CLSID
(Default) {28B7AA99-C0F9-4C47-995E-8A8D729603A1}

Get the TypeLib for the ClassID you found:
HKEY_CLASSES_ROOT\CLSID\{28B7AA99-C0F9-4C47-995E-8A8D729603A1}\TypeLib
(Default) {851A4561-F4EC-4631-9B0C-E7DC407512C9}

Get the file path for the TypeLib:
HKEY_CLASSES_ROOT\TypeLib\{851A4561-F4EC-4631-9B0C-E7DC407512C9}\1.0\0\win32
(Default) C:\Program Files\Common Files\Autodesk Shared\acax18enu.tlb

This is the type library that will be referenced when you instantiate an AutoCAD.Application object via late-binding.
 
Lần chỉnh sửa cuối:
Đây là đoạn code để có thể mở ứng dụng Excel từ VB6.0 và cả từ VBA của AutoCad )*&^) .
Khi mở cửa sổ VB 6.0, bạn chọn Standard EXE. Cửa sổ Project hiện ra với Form1. Bạn tao 1 CommandButton và copy đoạn code dưới đây.


Mã:
Public Sub cmdMoExcel_Click()
   Dim ExcelApp As Object
   On Error Resume Next        'Bỏ qua các lỗi gặp phải
   Set ExcelApp = GetObject(, "Excel.Application")
   If Err <> 0 Then            'Lỗi phát sinh khi Excel chưa mở
     Err.Clear            'Xoá lỗi báo
     Set ExcelApp = CreateObject("Excel.Application")
   End If
   ExcelApp.Visible = True        'Hiển thị cửa sổ Excel
   AppActivate ExcelApp.Caption    'Kích hoạt cửa sổ Excel
   ExcelApp.Workbooks.Add        'Thêm Workbook mới trong Excel
   Set ExcelApp = Nothing        'Xoá biến đối tượng
End Sub

Sau đó bạn bấm phím F5 để thử.

Cho mình hỏi đoạn code trên mình đã chạy.Nhưng mình có vấn đề mong bạn giúp.
Đoạn code trên mỗi lần chạy lại lưu dữ liệu vào một excel mới mà mình lại muốn mỗi lần chạy đoạn code trên đều lưu vào một file excel thì phải viết code lại như thế nào.
Bởi vì mình dùng sự kiện oncomm,mỗi lần sự kiện xảy ra là lưu dữ liệu vào excel nhưng mỗi lần như vậy lại xuất hiện một file excel mới.
 
Đây là đoạn code để có thể mở ứng dụng Excel từ VB6.0 và cả từ VBA của AutoCad )*&^) .
Khi mở cửa sổ VB 6.0, bạn chọn Standard EXE. Cửa sổ Project hiện ra với Form1. Bạn tao 1 CommandButton và copy đoạn code dưới đây.


Mã:
Public Sub cmdMoExcel_Click()
   Dim ExcelApp As Object
   On Error Resume Next        'Bỏ qua các lỗi gặp phải
   Set ExcelApp = GetObject(, "Excel.Application")
   If Err <> 0 Then            'Lỗi phát sinh khi Excel chưa mở
     Err.Clear            'Xoá lỗi báo
     Set ExcelApp = CreateObject("Excel.Application")
   End If
   ExcelApp.Visible = True        'Hiển thị cửa sổ Excel
   AppActivate ExcelApp.Caption    'Kích hoạt cửa sổ Excel
   ExcelApp.Workbooks.Add        'Thêm Workbook mới trong Excel
   Set ExcelApp = Nothing        'Xoá biến đối tượng
End Sub

Sau đó bạn bấm phím F5 để thử.

Cho mình hỏi đoạn code trên mình đã chạy.Nhưng mình có vấn đề mong bạn giúp.
Đoạn code trên mỗi lần chạy lại lưu dữ liệu vào một excel mới mà mình lại muốn mỗi lần chạy đoạn code trên đều lưu vào một file excel thì phải viết code lại như thế nào.
Bởi vì mình dùng sự kiện oncomm,mỗi lần sự kiện xảy ra là lưu dữ liệu vào excel nhưng mỗi lần như vậy lại xuất hiện một file excel mới.

Đơn giản là bạn thay câu

ExcelApp.Workbooks.Add

bằng câu :

ExcelApp.Workbooks.Open("D:\kalanta\TaiLieu.xls")

(Bạn thay đường dẫn theo yêu cầu của bạn)
Thân
 
Đơn giản là bạn thay câu

ExcelApp.Workbooks.Add

bằng câu :

ExcelApp.Workbooks.Open("D:\kalanta\TaiLieu.xls")

(Bạn thay đường dẫn theo yêu cầu của bạn)
Thân

Mình đã thử và đúng nhưng thay vì câu lệnh

ExcelApp.Workbooks.Add sẽ mở excel mới thì câu lệnh
ExcelApp.Workbooks.Open("D:\kalanta\TaiLieu.xls") sẽ mở file tài liệu theo đường dẫn.
Nhưng nó vẫn không khác mấy. Vì theo yêu cầu của mình là giả sử cứ 1giây (sự kiện oncomm xảy ra )mình lấy được giá trị dòng ,áp về rồi sẽ xuất ra file excel.Như vậy cứ mỗi giây xuất ra file excel thì file ("D:\kalanta\TaiLieu.xls") lại hiện lên. Như thế 1000giây sẽ có 1000file xuất hiện mà mỗi file chỉ có 1 giá trị . Cho nên mình sử dụng câu lệnh ExcelApp.Save để lưu giá trị vào một file cố định nhưng nó lại hiện lên hỏi có lưu không khi mình bấm lưu thì VB bị lỗi do sự kiện tiếp theo đang xảy ra.

Tóm lại theo yêu cầu của mình là cứ 1giây (sự kiện oncomm xảy ra ) mình sẽ lưu giá trị vào cột 1,hàng 1.Giây tiếp theo sẽ lưu vào cột 1,hàng 2 ...và tự động cập nhật giá trị (theo như trước thì giây 1 nó lưu vào hàng 1 , cột 1 của file "D:\kalanta\TaiLieu.xls",giây 2 lại lưu vào cột 1,hàng 2 của file "D:\kalanta\TaiLieu.xls",như vậy mỗi file chỉ lưu 1 giá trị cho nên khi Save chỉ có 1 giá trị).
Code của mình:
Dim ExcelApp As Excel.Application
Dim ExcelBook As Excel.Workbook
Dim iSheetsPerBook As Integer

Set ExcelApp = New Excel.Application
Set ExcelBook = ExcelApp.Workbooks.Open("D:\kalanta\TaiLieu.xls")
Set ExcelSheet = ExcelBook.Worksheets(1)
ExcelApp.Visible = True

ExcelSheet.Cells(i, j).Value = "Dữ liệu cần ghi"

Mong các bạn giúp đỡ.

 
Mình đã thử và đúng nhưng thay vì câu lệnh

ExcelApp.Workbooks.Add sẽ mở excel mới thì câu lệnh
ExcelApp.Workbooks.Open("D:\kalanta\TaiLieu.xls") sẽ mở file tài liệu theo đường dẫn.
Nhưng nó vẫn không khác mấy. Vì theo yêu cầu của mình là giả sử cứ 1giây (sự kiện oncomm xảy ra )mình lấy được giá trị dòng ,áp về rồi sẽ xuất ra file excel.Như vậy cứ mỗi giây xuất ra file excel thì file ("D:\kalanta\TaiLieu.xls") lại hiện lên. Như thế 1000giây sẽ có 1000file xuất hiện mà mỗi file chỉ có 1 giá trị . Cho nên mình sử dụng câu lệnh ExcelApp.Save để lưu giá trị vào một file cố định nhưng nó lại hiện lên hỏi có lưu không khi mình bấm lưu thì VB bị lỗi do sự kiện tiếp theo đang xảy ra.

Tóm lại theo yêu cầu của mình là cứ 1giây (sự kiện oncomm xảy ra ) mình sẽ lưu giá trị vào cột 1,hàng 1.Giây tiếp theo sẽ lưu vào cột 1,hàng 2 ...và tự động cập nhật giá trị (theo như trước thì giây 1 nó lưu vào hàng 1 , cột 1 của file "D:\kalanta\TaiLieu.xls",giây 2 lại lưu vào cột 1,hàng 2 của file "D:\kalanta\TaiLieu.xls",như vậy mỗi file chỉ lưu 1 giá trị cho nên khi Save chỉ có 1 giá trị).
Code của mình:
Dim ExcelApp As Excel.Application
Dim ExcelBook As Excel.Workbook
Dim iSheetsPerBook As Integer

Set ExcelApp = New Excel.Application
Set ExcelBook = ExcelApp.Workbooks.Open("D:\kalanta\TaiLieu.xls")
Set ExcelSheet = ExcelBook.Worksheets(1)
ExcelApp.Visible = True

ExcelSheet.Cells(i, j).Value = "Dữ liệu cần ghi"

Mong các bạn giúp đỡ.


Lý do là bạn nói không rõ nên khó có thể giúp bạn hoàn chỉnh. Với yêu cầu như trên thì câu lệnh của nó là :
PHP:
Dim Wb As Workbook
Dim Ws As Worksheet
TenFile = "D:\kalanta\TaiLieu.xls"
Set Wb = GetObject(TenFile)
Set Ws = Wb.Worksheets("Sheet1")
n = Ws.Range("A65000").End(xlUp).Row
Ws.Cells(n + 1, 1) = "Dữ Liệu Cần Ghi"
'Nếu muốn cho hiện file thì thêm câu lệnh
'Windows("TaiLieu.xls").Visible = True

Ngoài ra còn có thể sử dụng ADODB. Bạn tham khảo thêm trên diễn đàn này
Thân
 
Lần chỉnh sửa cuối:
Lỗi Permission denied khi gọi Excel từ VB6

Không hiểu sao khi làm việc với VB6, tôi luôn bị lỗi này (Permission denied), dù code chỉ có đúng 2 dòng:
PHP:
Private Sub Form_Load()
  With CreateObject("Excel.Application")
  End With
End Sub
Nguyên văn lỗi như thế này:
Run-time error '70'
Permission denied
Các bạn có ai biết nguyên nhân là gì không?
 
Hi Anh Tuấn,

Anh nói cụ thể được không? Vì phải xem đoạn code của anh mới trả lời được.

Lê Văn Duyệt
 
Hi Anh Tuấn,

Anh nói cụ thể được không? Vì phải xem đoạn code của anh mới trả lời được.

Lê Văn Duyệt
Code chỉ đúng 2 dòng ấy thôi, không còn thêm bất cứ thứ gì cả... Ấy thế mà vừa Run 1 phát là lập tức lổi ngay!
Chỉ nhiêu đó thôi đã lổi thì còn làm việc được gì với Excel nữa đây trời!
Tôi gặp lổi này thì liên tưởng ngay đến "quyền" của User Account ---> Nhưng User tôi là quyền Admin cơ mà ---> cẩn thận hơn, tôi Log On vào Administrator, lổi vẫn y chang!
Hic...
Duyệt đã bao giờ gặp lổi dạng này chưa? Giúp tôi với!
 
Lần chỉnh sửa cuối:
Chào Anh,

Em test trên máy em thì không bị lỗi gì.
Theo em, hướng suy nghĩ của anh đã đúng, nhưng cần xem lại kỹ hơn.
Anh thử các phương án từ "Google" thử xem.

Lê Văn Duyệt
 
Code chỉ đúng 2 dòng ấy thôi, không còn thêm bất cứ thứ gì cả... Ấy thế mà vừa Run 1 phát là lập tức lổi ngay!
Chỉ nhiêu đó thôi đã lổi thì còn làm việc được gì với Excel nữa đây trời!
Tôi gặp lổi này thì liên tưởng ngay đến "quyền" của User Account ---> Nhưng User tôi là quyền Admin cơ mà ---> cẩn thận hơn, tôi Log On vào Administrator, lổi vẫn y chang!
Hic...
Duyệt đã bao giờ gặp lổi dạng này chưa? Giúp tôi với!

Vấn đề là môi trường thực hiện thì bạn lại ko nói ra (người ta gọi là thông báo lỗi mà ko thông báo đủ môi trường làm việc). Đối với Vista, Windows 7 thì log bằng Admin chắc gì đã thực hiện được. Google: UAC
 
Vấn đề là môi trường thực hiện thì bạn lại ko nói ra (người ta gọi là thông báo lỗi mà ko thông báo đủ môi trường làm việc). Đối với Vista, Windows 7 thì log bằng Admin chắc gì đã thực hiện được. Google: UAC
Tôi chạy VB6 trên Windows XP, SP3 bạn à!
Đã search google cả tuần nay rồi mà chưa tìm được câu trả lời (cho trường hợp của tôi)
Bạn có nhiều kinh nghiệm, xin giúp tôi với!
 
Không hiểu sao khi làm việc với VB6, tôi luôn bị lỗi này (Permission denied), dù code chỉ có đúng 2 dòng:
PHP:
Private Sub Form_Load()
  With CreateObject("Excel.Application")
  End With
End Sub
Nguyên văn lỗi như thế này:

Các bạn có ai biết nguyên nhân là gì không?

Bác thử xem nội dung này xem sao, em thấy khá nhiều lỗi liên quan đến vấn đề của anh.

http://www.ntcompatible.com/Visual_Basic_6.0_-_Permission_Denied_-_Runtime_error_70_t28214.html
 
Cảm ơn bác 'nguyentuhp ' vì bài hướng dẫn này, nhưng khi thực hiện em bị lỗi thế này "Namespace or type specified in the Imports 'Microsoft.Office.Interop' doesn't contain any public member or cannot be found...." tìm hiểu thấy là vì word của em là 2003. bác có thể chỉ cho em cách sửa lỗi này được không?
 
Trong Visual Basic 6.0 (VB6) hoặc VBA bạn có thể tạo và làm việc với một Workbook, ví dụ như sau:

Lưu ý: Để làm việc với đối tượng này, trong dự án của bạn phải tham chiếu đến đối tượng Microsoft Excel xx.0 Object Library (xx là số phiên bản Office trên máy của bạn)

Mã:
Dim oXLApp as Excel.Application    '[COLOR=darkgreen]Khai báo đối tượng[/COLOR]
Set oXLApp = New Excel.Application  [COLOR=darkgreen]'Tạo đối tượng Excel[/COLOR]
 
[COLOR=darkgreen]' Bây giờ bạn có thể làm việc với oXLApp như là lớp ứng dụng (class)[/COLOR]
[COLOR=#006400]' Để làm việc với lớp này đòi hỏi bạn phải có kiến thức cơ bản về nó, bao gồm: cấu trúc, thuộc tính, phương thức và sự kiện... [/COLOR]
 
[COLOR=#006400]' Ví dụ:[/COLOR]
oXLApp.Visible = True               [COLOR=darkgreen]'Hiện đối tượng[/COLOR]
[COLOR=black]Debug.Print oXLApp.Name          [/COLOR][COLOR=darkgreen]'In ra cửa sổ Imediate tên của lớp[/COLOR]
[COLOR=#006400]'Kết quả: Microsoft Excel[/COLOR]
[COLOR=darkgreen]'...(your code here)[/COLOR]
Set oXLApp = Nothing               [COLOR=darkgreen]'Giải phóng oXLApp khỏi bộ nhớ[/COLOR]

____________________
Hiểu thêm về các thành phần (Components) và cấu trúc Microsoft Excel xx.0 Object Library , Click here!
Tôi thấy hướng dẫn như trên của PhanTuHuong rất hay. Vậy làm sao mà kết nối với sheet có sẳn bảng tính của excel vào VB6
 
Web KT
Back
Top Bottom