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

Liên hệ QC
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
Chào anh
Em down file của anh về đăng ký và dùng thì bị lỗi như 2 hình ảnh trên, anh xem hộ là bị lỗi gì mà không dùng được. Em cảm ơnLoi2.JPGLoi.JPG
 
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?

Chào anh,

Em hiện cũng bị lỗi này, không biết anh đã giải quyết thế nào xin anh giúp?

Cảm ơn anh,
Anmh
 
Chào anh,

Em hiện cũng bị lỗi này, không biết anh đã giải quyết thế nào xin anh giúp?

Cảm ơn anh,
Anmh

Ngày trước tôi xài bản VB6 Portable thì bị lỗi này
Giờ cài VB6 đàng hoàng vào máy thì hết bị
Chả biết tại sao nữa
 
Vậy thì đến 99% là do sài VB6 Portable. Mình cũng đang bị vậy.
Câu lệnh này cũng bị lỗi đó: Set ExcelApp = New Excel.Application

Tuy nhiên lỗi chỉ xảy ra nhi ta chạy thử (run hoặc F5). Còn khi biên dịch ra file exe thì chạy bình thường.
 
Các bác cho em xin ý kiến trường hợp dùng code này với ạ:

-------------------------------------------
Sub Main()
Dim ExcelApp As Object
On Error Resume Next
Set ExcelApp = GetObject(, "Excel.Application")
If Err <> 0 Then
Err.Clear
Set ExcelApp = CreateObject("Excel.Application")
End If
ExcelApp.Visible = True
AppActivate ExcelApp.Caption
ExcelApp.Workbooks.Add
Set ExcelApp = Nothing
End Sub
-------------------------------------------

Sau khi dùng code này Excel chỉ mở mới 1 book và không có những add-ins đã được nạp vào chương trình từ trước. (Khi mở cửa sổ vba thì không thấy vbaproject của các add-ins đâu và cũng không dùng được những công thức của add-ins)
Mong các bác giúp để em có thể mở mới book và đồng thời excel nạp cả các add-ins đã được nạp từ trước (Dạng như kiểu tích đúp chuột để mở file ạ)
 
Các bác cho em xin ý kiến trường hợp dùng code này với ạ:

-------------------------------------------
Sub Main()
Dim ExcelApp As Object
On Error Resume Next
Set ExcelApp = GetObject(, "Excel.Application")
If Err <> 0 Then
Err.Clear
Set ExcelApp = CreateObject("Excel.Application")
End If
ExcelApp.Visible = True
AppActivate ExcelApp.Caption
ExcelApp.Workbooks.Add
Set ExcelApp = Nothing
End Sub
-------------------------------------------

Sau khi dùng code này Excel chỉ mở mới 1 book và không có những add-ins đã được nạp vào chương trình từ trước. (Khi mở cửa sổ vba thì không thấy vbaproject của các add-ins đâu và cũng không dùng được những công thức của add-ins)
Mong các bác giúp để em có thể mở mới book và đồng thời excel nạp cả các add-ins đã được nạp từ trước (Dạng như kiểu tích đúp chuột để mở file ạ)

Hình như bạn mới tập làm quen với VBA thì phải ....

Code đó sử dụng trên VB6 kết nối với Excel....vvv và không liên quan gì tới Add-ins cả
 
Lần chỉnh sửa cuối:
Hình như bạn mới tập làm quen với VBA thì phải ....

Code đó sử dụng trên VB6 kết nối với Excel....vvv và không liên quan gì tới Add-ins cả

Hì hì. Đúng là mình chỉ sưu tầm code trên diễn đàn rồi chỉnh sửa theo công việc của mình. Và nhiều code của mình chỉ xoay quanh việc chèn công thức vào 1 ô và copy dán xuống những ô khác theo điều kiện nào đó thôi.
Code trên là mình áp dụng để tạo project mở 1 file xla rồi chạy 1 macro khởi động Và kết quả chạy bằng vb6 khác dùng macro khởi động trên excel như sau:
1. Các add=ins đã được nạp từ trước trên excel không được gọi mở. (ví dụ add đọc số thành chữ chẳng hạn)
- Cái này mình giải quyết bằng cách add.installed=False rồi lại add.installed=true rồi cho tìm lặp từ 1 đến add.coun
Nhưng cách giải quyết này lại nạp hết các add mà excel có, không phải những add active cần thiết.

2. Nếu Excel đang mở: Các menu mới từ xla của mình chỉ hiện ở workbook mới chứ không xuất hiện ở book hiện tại.

Mong các bác giúp đỡ để giải quyết 2 hạn chế kia với ạ!
Em mới làm quen với vba nên diễn đạt hơi khó hiểu mong các bác thông cảm ạ!
Em cám ơn!
 
Lần chỉnh sửa cuối:
Hì hì. Đúng là mình chỉ sưu tầm code trên diễn đàn rồi chỉnh sửa theo công việc của mình. Và nhiều code của mình chỉ xoay quanh việc chèn công thức vào 1 ô và copy dán xuống những ô khác theo điều kiện nào đó thôi.
Code trên là mình áp dụng để tạo project mở 1 file xla rồi chạy 1 macro khởi động Và kết quả chạy bằng vb6 khác dùng macro khởi động trên excel như sau:
1. Các add=ins đã được nạp từ trước trên excel không được gọi mở. (ví dụ add đọc số thành chữ chẳng hạn)
- Cái này mình giải quyết bằng cách add.installed=False rồi lại add.installed=true rồi cho tìm lặp từ 1 đến add.coun
Nhưng cách giải quyết này lại nạp hết các add mà excel có, không phải những add active cần thiết.

2. Nếu Excel đang mở: Các menu mới từ xla của mình chỉ hiện ở workbook mới chứ không xuất hiện ở book hiện tại.

Mong các bác giúp đỡ để giải quyết 2 hạn chế kia với ạ!
Em mới làm quen với vba nên diễn đạt hơi khó hiểu mong các bác thông cảm ạ!
Em cám ơn!
Mình cũng là dân mò học thôi ....nên bạn mô tả mình không hiểu hết nếu được bạn úp code bạn viết lên mình xem trong khả năng của mình ...nếu làm được mình giúp cho... Giúp bạn tức là tự giúp mình Vô tư đi
 
Code của mình chỉ đơn giản thế này:
Mục đích cuối cùng của mình là mở file DT.xla (như giao tiếp bằng cách tích đúp chuột, hiện khung protect thì dán password vào), sau đó chạy 1 macro tạo menu trong file vừa mở.
Nhưng dùng cách này thì Menu chỉ tạo ra ở workbook mới chứ không xuất hiện ở những workbook đã mở từ trước!
--------------------------------------------------
Sub Main()
Dim ExcelApp As Object
Dim ExcelWkb As Excel.Workbook
Dim ketqua


On Error Resume Next
Set ExcelApp = GetObject("Excel.Application")
If Err <> 0 Then
Err.Clear
Set ExcelApp = CreateObject("Excel.Application")
End If
ExcelApp.Visible = True


ketqua = Encode("ABC")
ExcelApp.Workbooks.Open "C:\DT.xla", Password:=ketqua
Application.Run Macro:="DT.xla!khoidong"

End Sub
 
Lần chỉnh sửa cuối:
Code của mình chỉ đơn giản thế này:
Mục đích cuối cùng của mình là mở file DT.xla (như giao tiếp bằng cách tích đúp chuột, hiện khung protect thì dán password vào), sau đó chạy 1 macro tạo menu trong file vừa mở.
Nhưng dùng cách này thì Menu chỉ tạo ra ở workbook mới chứ không xuất hiện ở những workbook đã mở từ trước!
--------------------------------------------------
Sub Main()
Dim ExcelApp As Object
Dim ExcelWkb As Excel.Workbook
Dim ketqua


On Error Resume Next
Set ExcelApp = GetObject("Excel.Application")
If Err <> 0 Then
Err.Clear
Set ExcelApp = CreateObject("Excel.Application")
End If
ExcelApp.Visible = True


ketqua = Encode("ABC")
ExcelApp.Workbooks.Open "C:\DT.xla", Password:=ketqua
Application.Run Macro:="DT.xla!khoidong"

End Sub
ý bạn là từ VB6 mở File Add-ins "C:\DT.xla" và nhập pass vào đó rồi chạy Macro....nếu bạn làm vậy

thì chỉ Áp dụng cho File bạn mở thôi khi tắt đi thì tiêu luôn vì cái Này Password:=ketqua

VBA thì có gì mà Bảo mật chứ.... nếu đã làm trên VB6 thì Make nó sang *.dll đi cho rồi

làm thủ tục từ Excel mà Gọi nó chạy thôi
 
To pycckuu410
Ví dụ bạn làm một Add-ins đọc sorachu Make sang *.dll và Register Xong...

Thì từ Excel bạn chỉ cần chạy thủ tục như sau là OK

PHP:
Sub AutoCheck_AddIns()
With ActiveWorkbook
    Rem Check Automation\Ten File\"QLBHPN.DocSo"
    AddIns.Add Filename:="QLBHPN.DocSo"
    Rem Check Add-ins\Ten File\"QLBHPN.DocSo"
    AddIns("QLBHPN.DocSo").Installed = True
End With
End Sub

Nếu làm biếng check bằng tay thì làm như trên
--=0--=0--=0
 
Lần chỉnh sửa cuối:
Uh, Cám ơn bạn giúp đỡ nhé, thực sự với những mem mới tiếp cận như mình thì sự giúp đỡ nhiệt tình của bạn cũng như các thành viên khác là rất đáng trân trọng!

Một số chương trình dự toán trên nền excel vẫn làm được. Và của mình cũng tương tự nhưng test mãi không giống cách open file của họ. Chắc là do liên quan đến ngôn ngữ lập trình nhiều hơn! Thôi đành an phận vậy.

À nói về bảo mật vba thì khó thật vì đã sử dụng đến vba thì ắt phải open file gốc lên. Thế nên mình viết project để kiểm tra mã md5 của file có vba+password open file, nếu md5 sai thì sẽ không mở file nữa. Do đó nếu password open file có tính bảo mật cao thì có thể yên tâm hơn một chút.

Bác nào muốn check thì vào đây tải file nhé: https://www.facebook.com/groups/1610050295899248/
 
Uh, Cám ơn bạn giúp đỡ nhé, thực sự với những mem mới tiếp cận như mình thì sự giúp đỡ nhiệt tình của bạn cũng như các thành viên khác là rất đáng trân trọng!

Một số chương trình dự toán trên nền excel vẫn làm được. Và của mình cũng tương tự nhưng test mãi không giống cách open file của họ. Chắc là do liên quan đến ngôn ngữ lập trình nhiều hơn! Thôi đành an phận vậy.

À nói về bảo mật vba thì khó thật vì đã sử dụng đến vba thì ắt phải open file gốc lên. Thế nên mình viết project để kiểm tra mã md5 của file có vba+password open file, nếu md5 sai thì sẽ không mở file nữa. Do đó nếu password open file có tính bảo mật cao thì có thể yên tâm hơn một chút.

Bác nào muốn check thì vào đây tải file nhé: https://www.facebook.com/groups/1610050295899248/
Nếu Bạn rành VB6 rồi thì mình khuyên viết code nên Make thành *.dll làm thủ tục call từ Excel là an toàn nhất Còn Pass Open Excel hay Add-ins Thì đọc lại Bài Của Bạn nha.... Pass Open phơi bày ra hết đó --=0--=0--=0

http://www.giaiphapexcel.com/forum/...-nào-không-cho-xem-code-trong-VBA-không/page6
 

VBA thì có gì mà Bảo mật chứ....
cái này hình như là không chuẩn lắm, người ta có thể dịch code VBA để cho bạn không bao giờ đọc được, mà chương trình vẫn chạy bình thường
bạn đọc được code VBA này không
Mã:
Function k6ql6qm6qn6qo6qp6qq6qr6qs6qt6q()
Dim qxdrxdsxdtxduxdvxdwxdxxdyxdzxd As String
Dim m7hn7ho7hp7hq7hr7hs7ht7hu7hv7h: m7hn7ho7hp7hq7hr7hs7ht7hu7hv7h = 1
Dim irjrkrlrmrnrorprqrrr
Dim u6qv6qw6qx6qy6qz6qa7qb7qc7qd7q As Integer, ilastelibiglecol
Dim w5dx5dy5dz5da6db6dc6dd6de6df6d
On Error Resume Next
qxdrxdsxdtxduxdvxdwxdxxdyxdzxd = ActiveSheet.Name
Sheets(abrbbrcbrdbrebrfbrgbrhbribrjbr).Select
Sheets(abrbbrcbrdbrebrfbrgbrhbribrjbr).PageSetup.PrintArea = "$B$1:$" & yzizzia_ib_ic_id_ie_if_ig_ih_i(ecrfcrgcrhcricrjcrkcrlcrmcrncr) & "$" & idrjdrkdrldrmdrndrodrpdrqdrrdr
With ActiveSheet.PageSetup
.PrintHeadings = False
.PrintGridlines = False
.PrintComments = xlPrintInPlace
.Orientation = xlLandscape
.FirstPageNumber = xlAutomatic
.order = xlDownThenOver
.BlackAndWhite = False
.Zoom = 100
End With
ActiveWindow.View = xlPageBreakPreview
u6qv6qw6qx6qy6qz6qa7qb7qc7qd7q = Month(Cells(4, ubrvbrwbrxbrybrzbracrbcrccrdcr))
ilastelibiglecol = ubrvbrwbrxbrybrzbracrbcrccrdcr
irjrkrlrmrnrorprqrrr = ubrvbrwbrxbrybrzbracrbcrccrdcr + 1
Do
If Month(Cells(4, irjrkrlrmrnrorprqrrr)) = u6qv6qw6qx6qy6qz6qa7qb7qc7qd7q Then
If Columns(irjrkrlrmrnrorprqrrr).columnwidth > 0 Then
ilastelibiglecol = irjrkrlrmrnrorprqrrr
End If
Else
w5dx5dy5dz5da6db6dc6dd6de6df6d = yzizzia_ib_ic_id_ie_if_ig_ih_i(ilastelibiglecol + 1) & "2"
If ActiveSheet.VPageBreaks.Count < m7hn7ho7hp7hq7hr7hs7ht7hu7hv7h Then
ActiveSheet.VPageBreaks.Add before:=Range(yzizzia_ib_ic_id_ie_if_ig_ih_i(ecrfcrgcrhcricrjcrkcrlcrmcrncr) & "2")
End If
Set ActiveSheet.VPageBreaks(m7hn7ho7hp7hq7hr7hs7ht7hu7hv7h).Location = Range(w5dx5dy5dz5da6db6dc6dd6de6df6d)
u6qv6qw6qx6qy6qz6qa7qb7qc7qd7q = Month(Cells(4, irjrkrlrmrnrorprqrrr))
m7hn7ho7hp7hq7hr7hs7ht7hu7hv7h = m7hn7ho7hp7hq7hr7hs7ht7hu7hv7h + 1
End If
irjrkrlrmrnrorprqrrr = irjrkrlrmrnrorprqrrr + 1
Loop Until irjrkrlrmrnrorprqrrr = ecrfcrgcrhcricrjcrkcrlcrmcrncr
ActiveWindow.View = xlNormalView
y9kz9kaalbalcaldalealfalgalhal
Sheets(kbrlbrmbrnbrobrpbrqbrrbrsbrtbr).Select
Sheets(kbrlbrmbrnbrobrpbrqbrrbrsbrtbr).PageSetup.PrintArea = "$B$1:$" & yzizzia_ib_ic_id_ie_if_ig_ih_i(ycrzcradrbdrcdrddredrfdrgdrhdr) & "$" & idrjdrkdrldrmdrndrodrpdrqdrrdr
ActiveWindow.View = xlPageBreakPreview
With ActiveSheet.PageSetup
.PrintHeadings = False
.PrintGridlines = False
.PrintComments = xlPrintInPlace
.Orientation = xlLandscape
.FirstPageNumber = xlAutomatic
.order = xlDownThenOver
.BlackAndWhite = False
.Zoom = 100
End With
u6qv6qw6qx6qy6qz6qa7qb7qc7qd7q = Month(Cells(4, ocrpcrqcrrcrscrtcrucrvcrwcrxcr))
ilastelibiglecol = ycrzcradrbdrcdrddredrfdrgdrhdr
m7hn7ho7hp7hq7hr7hs7ht7hu7hv7h = 1
irjrkrlrmrnrorprqrrr = ocrpcrqcrrcrscrtcrucrvcrwcrxcr + 1
Do
If Month(Cells(4, irjrkrlrmrnrorprqrrr)) = u6qv6qw6qx6qy6qz6qa7qb7qc7qd7q Then
If Columns(irjrkrlrmrnrorprqrrr).columnwidth > 0 Then
ilastelibiglecol = irjrkrlrmrnrorprqrrr
End If
Else
w5dx5dy5dz5da6db6dc6dd6de6df6d = yzizzia_ib_ic_id_ie_if_ig_ih_i(ilastelibiglecol + 1) & "2"
If ActiveSheet.VPageBreaks.Count < m7hn7ho7hp7hq7hr7hs7ht7hu7hv7h Then
ActiveSheet.VPageBreaks.Add before:=Range(yzizzia_ib_ic_id_ie_if_ig_ih_i(ycrzcradrbdrcdrddredrfdrgdrhdr) & "2")
End If
Set ActiveSheet.VPageBreaks(m7hn7ho7hp7hq7hr7hs7ht7hu7hv7h).Location = Range(w5dx5dy5dz5da6db6dc6dd6de6df6d)
u6qv6qw6qx6qy6qz6qa7qb7qc7qd7q = Month(Cells(4, irjrkrlrmrnrorprqrrr))
m7hn7ho7hp7hq7hr7hs7ht7hu7hv7h = m7hn7ho7hp7hq7hr7hs7ht7hu7hv7h + 1
End If
irjrkrlrmrnrorprqrrr = irjrkrlrmrnrorprqrrr + 1
Loop Until irjrkrlrmrnrorprqrrr = ycrzcradrbdrcdrddredrfdrgdrhdr
ActiveWindow.View = xlNormalView
y9kz9kaalbalcaldalealfalgalhal
Sheets(qxdrxdsxdtxduxdvxdwxdxxdyxdzxd).Select
On Error GoTo 0
End Function
Function e7qf7qg7qh7qi7qj7qk7ql7qm7qn7q()
Dim o7qp7qq7qr7qs7qt7qu7qv7qw7qx7q As Boolean
If Sheets(abrbbrcbrdbrebrfbrgbrhbribrjbr).Cells(3, g6ih6ii6ij6ik6il6im6in6io6ip6i) = "" Then
If Sheets(abrbbrcbrdbrebrfbrgbrhbribrjbr).Cells(5, g6ih6ii6ij6ik6il6im6in6io6ip6i).HasFormula Then
o7qp7qq7qr7qs7qt7qu7qv7qw7qx7q = True
End If
Else
If Not Sheets(abrbbrcbrdbrebrfbrgbrhbribrjbr).Cells(5, g6ih6ii6ij6ik6il6im6in6io6ip6i).HasFormula Then
o7qp7qq7qr7qs7qt7qu7qv7qw7qx7q = True
End If
End If
If Sheets(abrbbrcbrdbrebrfbrgbrhbribrjbr).Cells(3, q6ir6is6it6iu6iv6iw6ix6iy6iz6i) = "" Then
If Sheets(abrbbrcbrdbrebrfbrgbrhbribrjbr).Cells(5, q6ir6is6it6iu6iv6iw6ix6iy6iz6i).HasFormula Then
o7qp7qq7qr7qs7qt7qu7qv7qw7qx7q = True
End If
Else
If Not Sheets(abrbbrcbrdbrebrfbrgbrhbribrjbr).Cells(5, q6ir6is6it6iu6iv6iw6ix6iy6iz6i).HasFormula Then
o7qp7qq7qr7qs7qt7qu7qv7qw7qx7q = True
End If
End If
If o7qp7qq7qr7qs7qt7qu7qv7qw7qx7q Then
Call alhblhclhdlhelhflhglhhlhilhjlh(CBool(qmgrmgsmgtmgumgvmgwmgxmgymgzmg(y4fz4fa5fb5fc5fd5fe5ff5fg5fh5f, kdgldgmdgndgodgpdgqdgrdgsdgtdg, False, False)))
Call inhjnhknhlnhmnhnnhonhpnhqnhrnh(CBool(qmgrmgsmgtmgumgvmgwmgxmgymgzmg(g7fh7fi7fj7fk7fl7fm7fn7fo7fp7f, kdgldgmdgndgodgpdgqdgrdgsdgtdg, False, False)))
End If
End Function
Function y7qz7qa8qb8qc8qd8qe8qf8qg8qh8q()
Dim i8qj8qk8ql8qm8qn8qo8qp8qq8qr8q As Double
Dim s8qt8qu8qv8qw8qx8qy8qz8qa9qb9q As Double
Const c9qd9qe9qf9qg9qh9qi9qj9qk9ql9q = 29
Const m9qn9qo9qp9qq9qr9qs9qt9qu9qv9q = 0.33
i8qj8qk8ql8qm8qn8qo8qp8qq8qr8q = w9qx9qy9qz9qaarbarcardarearfar
If i8qj8qk8ql8qm8qn8qo8qp8qq8qr8q < c9qd9qe9qf9qg9qh9qi9qj9qk9ql9q Then
s8qt8qu8qv8qw8qx8qy8qz8qa9qb9q = c9qd9qe9qf9qg9qh9qi9qj9qk9ql9q - (i8qj8qk8ql8qm8qn8qo8qp8qq8qr8q - Sheets(abrbbrcbrdbrebrfbrgbrhbribrjbr).Columns(14).columnwidth)
Call kwjlwjmwjnwjowjpwjqwjrwjswjtwj(abrbbrcbrdbrebrfbrgbrhbribrjbr, True)
Call kwjlwjmwjnwjowjpwjqwjrwjswjtwj(kbrlbrmbrnbrobrpbrqbrrbrsbrtbr, True)
Sheets(abrbbrcbrdbrebrfbrgbrhbribrjbr).Columns(14).columnwidth = s8qt8qu8qv8qw8qx8qy8qz8qa9qb9q
Sheets(kbrlbrmbrnbrobrpbrqbrrbrsbrtbr).Columns(14).columnwidth = s8qt8qu8qv8qw8qx8qy8qz8qa9qb9q
Call awjbwjcwjdwjewjfwjgwjhwjiwjjwj(abrbbrcbrdbrebrfbrgbrhbribrjbr)
Call awjbwjcwjdwjewjfwjgwjhwjiwjjwj(kbrlbrmbrnbrobrpbrqbrrbrsbrtbr)
Else
If (i8qj8qk8ql8qm8qn8qo8qp8qq8qr8q - Sheets(abrbbrcbrdbrebrfbrgbrhbribrjbr).Columns(14).columnwidth) > c9qd9qe9qf9qg9qh9qi9qj9qk9ql9q Then
If Sheets(abrbbrcbrdbrebrfbrgbrhbribrjbr).Columns(14).columnwidth <> m9qn9qo9qp9qq9qr9qs9qt9qu9qv9q Then
Call kwjlwjmwjnwjowjpwjqwjrwjswjtwj(abrbbrcbrdbrebrfbrgbrhbribrjbr, True)
Call kwjlwjmwjnwjowjpwjqwjrwjswjtwj(kbrlbrmbrnbrobrpbrqbrrbrsbrtbr, True)
Sheets(abrbbrcbrdbrebrfbrgbrhbribrjbr).Columns(14).columnwidth = m9qn9qo9qp9qq9qr9qs9qt9qu9qv9q
Sheets(kbrlbrmbrnbrobrpbrqbrrbrsbrtbr).Columns(14).columnwidth = m9qn9qo9qp9qq9qr9qs9qt9qu9qv9q
Call awjbwjcwjdwjewjfwjgwjhwjiwjjwj(abrbbrcbrdbrebrfbrgbrhbribrjbr)
Call awjbwjcwjdwjewjfwjgwjhwjiwjjwj(kbrlbrmbrnbrobrpbrqbrrbrsbrtbr)
End If
End If
End If
End Function
Function w9qx9qy9qz9qaarbarcardarearfar() As Double
Dim irjrkrlrmrnrorprqrrr, garhariarjarkarlarmarnaroarpar As Double
garhariarjarkarlarmarnaroarpar = 0
For irjrkrlrmrnrorprqrrr = 1 To 14
garhariarjarkarlarmarnaroarpar = garhariarjarkarlarmarnaroarpar + Sheets(abrbbrcbrdbrebrfbrgbrhbribrjbr).Columns(irjrkrlrmrnrorprqrrr).columnwidth
Next irjrkrlrmrnrorprqrrr
w9qx9qy9qz9qaarbarcardarearfar = garhariarjarkarlarmarnaroarpar
End Function
 
phihndhsp



Vụ này mình chưa nhìn trên VBA bao giờ nên chưa tin .... còn họ viết xong rồi biên dịch nó qua mã máy hay gì gì .... thì mình không biết mà không quan tâm làm gì ...
 
Lần chỉnh sửa cuối:
Nếu Bạn rành VB6 rồi thì mình khuyên viết code nên Make thành *.dll làm thủ tục call từ Excel là an toàn nhất Còn Pass Open Excel hay Add-ins Thì đọc lại Bài Của Bạn nha.... Pass Open phơi bày ra hết đó --=0--=0--=0

http://www.giaiphapexcel.com/forum/...-nào-không-cho-xem-code-trong-VBA-không/page6


Cách đó mình đã làm được rồi. Thế nên mình làm thêm code check md5. Bạn check thử sẽ rõ.
 
Web KT
Back
Top Bottom