Chia Sẻ, Học tập Và Nghiên Cứu Visual Studio 2010 (4 người xem)

Liên hệ QC

Người dùng đang xem chủ đề này

Kiều Mạnh

I don't program, I beat code into submission!!!
Tham gia
9/6/12
Bài viết
5,538
Được thích
4,129
Giới tính
Nam
Sau một thời gian tham gia GPE học code VBA đến nay mình cũng tạm biết viết ...các đây khoãng 1 một tháng mình tập sang VB6 thì cũng viết tốt như trên VBA...
Nay mình chuyển qua tự nghiên cứu trên visual studio 2010...thấy nó vừa khó mà vừa hay...
nên mình xin mở đề tài này để bạn nào có cùng chí hướng nghiên cứu chia sẽ khiến thức về visual studio 2010 hay cụ thể hơn là sự kết nối giữa Excel và visual studio 2010 bằng VB...
để cùng nhau học tập và nghiên cứu từng bước chinh phục đỉnh cao của lập trình
mình úp file thử test của mình lên mong các bạn tham gia
1/ Mở File Excel: Bai Tap Visual Studio.xlsb lên và gõ vào cột A thì sẽ thấy kết quả cột b,c,d
2/ Mở của sổ VBA lên xem code thì không thấy gì hết
3/ yêu cầu máy phải cài dotNetF x3.5 trở lên

Code Trong visual studio 2010
PHP:
Public Class Sheet1
   Private Sub Sheet1_Change(Target As Microsoft.Office.Interop.Excel.Range) Handles Me.Change               
       If Target.Count = 1 Then
            If Target.Column = 1 Then
                Cells(Target.Row, 2) = ("Kieu Manh")
                Cells(Target.Row, 3) = ("Giai Phap Excel")
                Cells(Target.Row, 4) = ("Cong Cu Tuyet Voi Cua Ban")
            End If
        End If
    End Sub
End Class
File lớn mình Úp lên GPE không được các bạn vào link sau tải về nha
https://drive.google.com/file/d/0B7zWYlns0sLBS2lhbGthSjJqTW8/view?usp=sharing
Xin Cảm Ơn các Bạn cùng tham gia nghiên cứu
 
Lần chỉnh sửa cuối:
Nhân đây cho tôi hỏi các anh chị và các bạn: ở bậc ĐH ngành CNTT có trường nào đào tạo VBA không?

Rất ít. Có thì cũng chỉ là mở rộng hay ngoại khoá khi dạy về các phần mềm ứng dụng có VBA nhúng vào (như excel, autoCAD, access...). Tại sao thế, vì VBA chỉ là phẩn thứ yếu mở rộng mà thôi.

Nhưng tôi nghĩ quan trọng là ngôn ngữ nào cũng là công cụ mà thôi, quan trọng là ứng dụng vào việc gì, và đam mê của người học ra sao.
 
Upvote 0
Ngành CNTT bây giờ không còn dạy VB6 nữa, nhưng các ngành kỹ thuật khác của nhiều trường như cơ khí, điện tử... vẫn dạy VB6. Phần lý thuyết căn bản về lệnh trong ngôn ngữ lập trình của VB6 cũng chính là lý thuyết căn bản VBA nên có thể tham khảo.

Tôi nghĩ topic này nhắm người đọc hướng tới việc lập trình trên nền .NET, tuy nhiên nếu bó hẹp việc viết ứng dụng .NET trên mỗi Visual Studio thì chắc không ít người sẽ không theo nổi. Thú thật Visual Studio là cái môi trường hao máy nhất mà tôi từng sử dụng. Mỗi lần cài xong VS là cái máy tôi chạy chậm hẳn, chưa kể là ngốn pin kinh khủng (chắc chỉ thua game hạn nặng).

Nhiều người chủ định cài các phiên bản cũ như VS2010 hay 2008 như giải pháp tình thế nhưng làm thế thì chẳng khác nào chúng đi lùi. Các phiên bản này không mở được cái project viết ở VS về sau, chúng cũng không hỗ trợ các phiên bản ngôn ngữ cao hơn (chẳng hạn C# ra tới version 5.0). Giả sử các bạn có kiếm được đoạn code nào cực ngắn, cực hay hý hứng chép vô chương trình của mình nhưng trình biên dịch báo lỗi... vì chẳng hiểu.

Hiện nay MS cung cấp một phiên bản VS Express rút gọn không yêu cầu phí bản quyền mà xài chả khác gì bản Pro hay Enterprise cả. Quan trọng nhất là bạn được tiếp cận những công nghệ mới nhất. Bạn thoải mái download từ trang chủ của hãng (cũng gần 1GB). Nếu bạn nào muốn nhẹ hơn nữa thì choi SharpDevelop4x như tôi. Chỉ có 16MB thôi. Lúc trước tôi cài song song cả 2 cái nhưng hiện h chỉ cài mối SharpDevelop4x cho nhẹ người.
quả thực đúng như bạn nói cài vào máy mà cấu hình thấp là nó mở mãi mới lên...mà mình cũng không hiểu tại sao bản Pro2010 nặng tới 2.2G còn bản Pro2012 chỉ có 1.5 G thôi chỉ khác nhau giao diện không biết bản nào xài chuẩn hơn ???
 
Upvote 0
vs 2010 đủ rồi, không cần 2012. .net 4 mới là bước nhảy.
vs 2008 chỉ dùng tới .net 3.5

Ba cái phiên bản C# 5 gì gì đó không quan trọng. Nó chỉ cho thêm một vài cách lập class và method. Mà mấy cái này các bạn hoàn toàn không đụng tới.

Như tôi đã nói trên, ở đây bạn dùng VSTO (visual studio tools for office) cho nên mấy cái asembly của interop mới quan trọng.
Ứng dụng chế từ phiên bản 2010 có embed cái này trong khi từ 2008 thì không. Máy chạy ứng dụng phải tự cài lấy.
 
Upvote 0
Ba cái phiên bản C# 5 gì gì đó không quan trọng. Nó chỉ cho thêm một vài cách lập class và method. Mà mấy cái này các bạn hoàn toàn không đụng tới.
Tôi không nghĩ là mấy chục con người của hãng MS nhận lương vài trăm ngàn đô la mỗi năm, có vấn đề về thân kính khi bóp đầu bóp trán cố làm đưa ra những phiên bản ngôn ngữ mới dù biết rằng nó "không quan trọng" gì như VetMini nói. Tôi thì thấy phiên bản ngôn ngữ mới cho ra những cú pháp cực kỳ ngắn gọn, hiện quả điển hình nhât là linq. Xin nói luôn linq không phải là 1 phát minh của .Net mà là một hình thức cú pháp lập trình ngày này đang được áp dụng cho nhiều ngôn ngữ lập trình khác nhau nhằm giúp code ngắn hơn và tiếp cận với logic ngôn ngữ tự nhiên.

Tâm lý người Việt vốn thích sự ổn định (kể cả với công nghệ), giả sử khách hàng nào mà cũng mang tâm lý thế này thì các hãng công nghệ rất may mắn vì chẳng phải bỏ vài tỷ đô mỗi năm để chỉ để cải tiến vài % tính năng sản phẩm và tôi chắc sẽ chẳng lăn tăn gì khi xài con nokia cùi sản xuất từ năm 2006 tới h.
 
Lần chỉnh sửa cuối:
Upvote 0
Mình thử làm trên Form VSTO Check File trong cùng folder xem code giữa VBA, VB6 và VSTO xem nó khác nhau nhiều không thì thấy
1/ về cơ bản VB là giống nhau
2/ khác nhau là làm sao mình khai báo để cho nó hiểu mới là vấn đề đau đầu..
3/ Còn chạy For Next trong VSTO cũng vậy quan trong là làm sao khai báo được một biến toàn cục làm sao cho nó hiểu.......ĐAU ĐẦU !!!!

VD như trên VB6 ta
PHP:
Private Excel As Excel.Application
Public Property Set ExcelApp(ByRef ExcelApp As Excel.Application)
Set Excel = ExcelApp
End Property

Còn trên VSTO thì sao.... thật sự đau đầu...!!!

So sánh code trên VBA, VB6 và VSTO sau thì sẽ hiểu
code trên Form VSTO
PHP:
Public Class Form1
    REM Check FileName trong Cùng Folder
    Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
        Dim FileName As String
        REM Trên VBA
        'FileName = ThisWorkbook.Path & "\" & "QLBH.dll"
        'FileName = ThisWorkbook.Path & "\QLBH.dll"
        REM Trên VB6
        'FileName = App.Path & "\" & "QLBH.dll"
        REM Trên VSTO 2010
        FileName = Application.StartupPath & "\" & "QLBH.dll"
        With CreateObject("Scripting.FileSystemObject")
            If .FileExists(FileName) = True Then
                MsgBox("File Tồn Tại", , "Kiều Mạnh")
            Else
                MsgBox("File Không Tồn Tại Trong Cùng Folder !!!??? ", , "Kiều Mạnh")
            End If
        End With
    End Sub
Hy vọng sẽ nhận được trợ giúp nhiệt tình từ các Bạn
Xin cảm ơn
 
Lần chỉnh sửa cuối:
Upvote 0
dotNet là môi trường hướng đối tượng hoàn toàn. Tôi muốn nhấn mạnh chữ "hoàn toàn" nên một số ý niệm lập trình trước .Net sẽ không còn tồn tại. Ví dụ bạn cần 1 biến toàn cục và có thể tham khảo trong mọi class khác nhau. dotNet không có khái niệm về biến toàn cục kiểu này, tuy nhiên chúng ta có thể đặt biến toàn cục như là 1 thuộc tính static của một lớp nào đó chẳng hạn class GlobalVariables (tên gì thì tùy hứng). Chẳng hạn GlobalVariables.Total với Total là tổng cái gì đó....

Tôi xin phép không đi sâu vô vấn đề này vì chắc lòi thêm cái ngu của chính tôi, tuy nhiên tôi bảo đảm là những cái tôi nói ở trên đã từng áp dụng.--=0
 
Lần chỉnh sửa cuối:
Upvote 0
Tặng cho Bạn nào mới tập làm quen với VBA mà chưa biết bật Macros thì tải file Sau về chạy một cái là OK
Áp dụng cho WinXP + Win7 + Office 2010 ...Máy cài Dotnet 3.5 (Nếu máy chưa cài Dotnet 3.5 thì Sử dụng file VB6)
Auto Check Access To VBOM và Enable Macros
Code trên Form Visual Studio 2010

PHP:
Public Class Form1
    Private Sub Form1_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load
        Dim VBOM As String, Emacros As String
        'Check Trust Access To VBA project model
        VBOM = "HKEY_CURRENT_USER\Software\Microsoft\Office\14.0\Excel\Security\AccessVBOM"
        CreateObject("WScript.Shell").RegWrite(VBOM, 1, "REG_DWORD")
        'Enable Macros Setting muc canh bao an Toan
        Emacros = "HKEY_CURRENT_USER\Software\Microsoft\Office\14.0\Excel\Security\VBAWarnings"
        CreateObject("WScript.Shell").RegWrite(Emacros, 2, "REG_DWORD")
        MsgBox("Ban Da Enable Macros Thanh Cong" & vbNewLine & "Vui Long Mo Excel Kiem Tra !", , "Kieu Manh_GPE")
        Application.Exit() ''Thoat Form
    End Sub
End Class

File 20k mà không Úp lên GPE được
Các bạn vào link sau tải nha
https://drive.google.com/file/d/0B7zWYlns0sLBRHowZUJ0Q1lYSXc/view?usp=sharing
File VB6
https://drive.google.com/file/d/0B7zWYlns0sLBcVdTWUJGMnZwSHM/view?usp=sharing

Lưu ý File VB6 Sử dụng được từ Office 2007 - 2010 còn 2013 chưa Test
Nhìn code sao thấy quen quen sao ấy.
 
Upvote 0
Nhìn code sao thấy quen quen sao ấy.
Thay vì hôm trước Anh chỉ Em cách tạo ra 2 file .bat và .reg ghi các thông tin vào 2 file đó sau đó sử dụng file .bat register file reg xong rồi xóa luôn hai file .reg và .bat ở ổ D đi là xong

Thay vì làm vậy thì em ghi trực tiếp vào Registry luôn
 
Lần chỉnh sửa cuối:
Upvote 0
Tôi không nghĩ là mấy chục con người của hãng MS nhận lương vài trăm ngàn đô la mỗi năm, có vấn đề về thân kính khi bóp đầu bóp trán cố làm đưa ra những phiên bản ngôn ngữ mới…

Bạn nghĩ gì là chuyện của bạn. Đây là diễn đàn học hỏi cho nên tôi đưa lại ý kiến phản biện.

Trong MS cũng có hàng trăm người nhận lương trên như vậy, mà chả phải bóp đầu bóp cổ cố làm. Công việc của họ là vắt nước bọt bán cái mà những người kia đưa ra.

MS lên địa vị ngày hôm nay do kỹ thuật phần mềm của họ rất ít, mà phần nhiều chính là do nghệ thuật kinh doanh của họ.

….
Tâm lý người Việt vốn thích sự ổn định (kể cả với công nghệ), ….

Đây là ý tưởng khuôn mẫu hoá (sterrotype), mang đầy tính chất chủ quan và cực đoan.
 
Upvote 0
...
3/ Còn chạy For Next trong VSTO cũng vậy quan trong là làm sao khai báo được một biến toàn cục làm sao cho nó hiểu.......ĐAU ĐẦU !!!!
...

Trong một ngôn ngữ hướng đối tượng đúng lý thuyết thì khái niệm về "biến" đã thay đổi. Mọi "biến" đều là đối tượng. Mọi đối tượng đều là hiện thể của một lớp nào đó. VB.net là một ngôn ngữ HĐT rất gân mức lý thuyết này, cho nên bạn nên hiểu biến theo định nghĩa mới.

Trước khi đi vào vấn đề "biến toàn cục" của bạn, tôi xin nhắc lại sơ qua về khái niệm biến toàn cục.

Trong chương trình cấu trúc, biến toàn cục được lập ra với 2 mục đích:

1. để liên lạc dữ liệu giữa các hàm, phương thức. Nói theo ngôn ngữ chung là sự liên lạc dữ liệu giữa các vùng tầm vực mà không phải qua tham sô. Tuy nhiên, phần lớn những nhà lập trình chuyên lý thuyết đều chê cách này là không đúng đắn.

2. để giữ lại dữ liệu cho chương trình chính sau khi chương trình con chạy xong và thoát.

Cái điểm thứ 2 là cái mà tôi muốn bàn cho VB.net

Khi một lớp bình thường được khai báo thì compiler lập nên cái mẫu. Lúc nào thể hiện đối tượng mới gán vùng nhớ. Riêng các thuộc tính được khai báo theo lối tĩnh thì chúng có vùng nhớ tĩnh đã định sẵn. Điểm quan trọng là lúc các đối tượng (biến) khai báo nội hết phạm vi (tầm vực), và đối tượng được huỷ thì vùng nhớ của nó cũng huỷ theo. Riêng các thuộc tính tĩnh thì chúng có vùng nhớ cố định cho nên vẫn tồn tại.

Ví dụ điểm hình của loại thuộc tính tĩnh này có thể tìm thấy trong các lớp kiểu căn bản (integer, long, string, ...)
Dim result As String = String.Format("{0}: {1:0.0} - {2:yyyy}", name, number, day)
Lệnh trên gọi thuộc tính (ở đây là hàm) Format của lớp String để định dạng
String ở đây là tên của một lớp khai báo sẵn trong dot net. Format là một thuộc tính tĩnh của nó. Để có thể được gọi như vậy, Format phải được khai báo là Public Static (thư viện của dot net đã khai báo sẵn cho bạn). Nếu chỉ có Public mà không có Static thì thuộc tính thuộc về đối tuợng. Chỉ khi nào thể hiện đối tượng mới dùng được, và lúc đối tượng huỷ thì nó cũng huỷ theo.

Cái mà bạn muốn, biến toàn cục, có thể thực hiện qua cách sử dụng thuộc tính cố định/tĩnh (static). Lưu ý từ "có thể thực hiện" bên trên, nó ngụ ý là một phương pháp, không hẳn là duy nhất.
 
Lần chỉnh sửa cuối:
Upvote 0
Trong MS cũng có hàng trăm người nhận lương trên như vậy, mà chả phải bóp đầu bóp cổ cố làm. Công việc của họ là vắt nước bọt bán cái mà những người kia đưa ra.
Theo cách nói của VetMini thì làm cho MS chỉ tốn nước bọt thôi ah? Thế chắc mấy người viêm tuyến nước bọt hoặc bà tám nhà lá là ứng viên tiềm năng cho khoản thu nhập mấy chục ngàn đô bên hãng MS rồi? Bây h tôi mới được mở mang thêm về hoạt động của các hãng công nghệ mà tôi ngưỡng mộ bấy lâu. Không ngờ Windows với Office lại được xây dựng từ "kỹ thuật phần mềm của họ rất ít". Thế mà tôi cứ tưởng nó được xây dựng bằng công nghệ to tát, vĩ đại lắm.
MS lên địa vị ngày hôm nay do kỹ thuật phần mềm của họ rất ít, mà phần nhiều chính là do nghệ thuật kinh doanh của họ.
Xem ra chỉ có thiếu chiến lược kinh doanh theo VetMini nói nữa thôi thì chỉ cần vài bữa là FPT, SPT... Việt Nam dư sức hất cẳng MS trong nháy mắt. Hổng biết mấy bác lãnh đạo công nghệ xứ mình có ghé qua đây để học hỏi không lãng phí quá --=0
Đây là ý tưởng khuôn mẫu hoá (sterrotype), mang đầy tính chất chủ quan và cực đoan.
Phải thừa nhận tâm huyết trong từng lời cao siêu mà VetMni gửi gắm... nhưng khổ nỗi năng lực nhận thức của tôi có hạn nên xin miễn nhận vậy. Tôi tự thấy trời ban cho đầu óc thì cứ tự nhiên mà dùng... Chứ cứ làm theo dẫn dắt người này người nọ thì chả thỏa cái trí ngu dốt của bản thân cho lắm
 
Lần chỉnh sửa cuối:
Upvote 0
dotNet là môi trường hướng đối tượng hoàn toàn. Tôi muốn nhấn mạnh chữ "hoàn toàn" nên một số ý niệm lập trình trước .Net sẽ không còn tồn tại. Ví dụ bạn cần 1 biến toàn cục và có thể tham khảo trong mọi class khác nhau. dotNet không có khái niệm về biến toàn cục kiểu này, tuy nhiên chúng ta có thể đặt biến toàn cục như là 1 thuộc tính static của một lớp nào đó chẳng hạn class GlobalVariables (tên gì thì tùy hứng). Chẳng hạn GlobalVariables.Total với Total là tổng cái gì đó....

Tôi xin phép không đi sâu vô vấn đề này vì chắc lòi thêm cái ngu của chính tôi, tuy nhiên tôi bảo đảm là những cái tôi nói ở trên đã từng áp dụng.--=0

Bạn đang nói webform? Trong winform mình có thể khai báo biến toàn cục và có thể khai báo để dùng biến đó khi máy tính đó tắt và khi mở lên lại biết đó vẫn còn.
 
Upvote 0
Bạn đang nói webform? Trong winform mình có thể khai báo biến toàn cục và có thể khai báo để dùng biến đó khi máy tính đó tắt và khi mở lên lại biết đó vẫn còn.
À... khi nói tới biến là người ta ám chỉ là cái gì lưu nhớ trong RAM. Phải tôi hiểu thiếu xót chăng?
 
Upvote 0
À... khi nói tới biến là người ta ám chỉ là cái gì lưu nhớ trong RAM. Phải tôi hiểu thiếu xót chăng?

Theo như lý thuyết là thế, biến sẽ được lưu trong ram, và nó sẽ mất đi khi máy tính tắt, nhưng nhiều lúc ta cần có những biến mà không mất đi khi tắt máy.
 
Upvote 0
Theo như lý thuyết là thế, biến sẽ được lưu trong ram, và nó sẽ mất đi khi máy tính tắt, nhưng nhiều lúc ta cần có những biến mà không mất đi khi tắt máy.
Chắc anh nâng tầm ý niệm về biến mất rồi... Tôi chỉ coi đây là thông số được giữ lại cho các hoạt động sau và thông số này cũng phải nạp vào 1 biến hoặc 1 hình thức nào đó phải nằm trong RAM
 
Upvote 0
Chắc anh nâng tầm ý niệm về biến mất rồi... Tôi chỉ coi đây là thông số được giữ lại cho các hoạt động sau và thông số này cũng phải nạp vào 1 biến hoặc 1 hình thức nào đó phải nằm trong RAM
Nó giống như cái file ví dụ của tôi gửi dưới đây. Bạn test hộ nhé.
 

File đính kèm

Upvote 0
Tôi xin phép miễn được download ví dụ, nhưng như tôi đã nói biến là thứ tồn tại trong RAM. Dù là biểu hiện ở hình thức nào đi chăng nữa khi một biến được sử dụng đồng nghĩa với việc nó chiếm lấy 1 phần của RAM.
 
Upvote 0
Tôi chỉ quen nói một vài lời rồi dừng lại khi cảm thấy tranh luận thêm chỉ tổ rát họng. Cùng lắm thì chứng tỏ là mình "giỏi", chả đóng góp gì cho ai cả.

Bây giờ tôi trở lại nói theo tinh thần đóng góp như sau:

Ý chính của tôi là: nếu cần xài thì nên tránh phiên bản 2008 vì nó quá cũ rồi. Và tôi cũng có nêu ra sự cũ kỹ của nó trong ứng dụng VSTO. Với lý do này thì 2010 đủ xài rồi. Đối với các bạn muốn theo mới thì nên bỏ qua 2012 mà chơi luôn 2013, nếu máu hơn chút nữa thì xài phiên bản thử nghiệm 2015.
 
Upvote 0
đến bao giờ mình có thể viết được như HLMT vậy ta .......cố giắng 10 năm nữa hỏng biết có được chăng

Thật ra thì mình lưu nó trong ổ cứng thôi, về cơ chế hoạt động thì nó giống như biến thôi, mà theo lý thuyết về biến thì biến sẽ được lưu trong ram chứ không ổ cứng.
Mình là dân không chuyên, chỉ mới vọc thôi bạn. Chưa chắc kiến thức của mình bằng bạn đâu.
 
Upvote 0
Web KT

Bài viết mới nhất

Back
Top Bottom