Kh Biet
Cánh hạc đầu đông
- Tham gia
- 24/8/12
- Bài viết
- 203
- Được thích
- 429
Hình như không làm được thì phảiMình muốn copy code được viết trên sheet ( hoặc sheet Macro4 ) và dán sang cửa sổ VBA .Sau phiên làm việc kết thúc thì xóa code này đi cho nhẹ . Việc viết lệnh mở cửa sổ VBA và chèn code mình không biết viết thế nào . Bạn nào biết chỉ mình với !
Việc trên làm thủ công thì qúa đơn giản , nhưng mình hỏi làm bàng VBA ? Bởi vì mình thấy các thày nói " Phàm cái gì làm bằng tay được thì VBA làm được " , mà mình làm không được nên hỏi để biết , để học , Vây thôi . Đời thường cũng vậy thôi, nếu cái gì ta đã biết làm rồi mà thấy người khác làm hay hơn thì hỏi để mà học .Lý do tại sao phải "viết lệnh mở cửa sổ VBA và chèn code"
Nó có khác gì mở cửa sổ, cóp dán rồi chạy bằng tay đâu?
Đã muốn "cho nhẹ" thfi còn rườm rà thêm cái vụ tự đông làm chi?
Nếu tự làm bằng tay thì file là macro free, nếu phài cốt kiếc tự động thì file phải chứa macro, lắm thứ.
Mình cũng tìm nhiều trên mạng mà không thấy nên mới hỏi . Kể cũng lạ, những việc khó hơn rất nhiều thì làm được như: chèn code vào file đang đóng, chèn code từ file .text , chèn code vào sheet , vào Thiswookbook , vào Module ...thì làm được mà cái việc làm bằng tay chỉ mất 3s lại có vẻ khó . Hay mình hỏi câu hỏi "dở hơi" nên mọi người không giúp ? Kiến thức VBa không cơ bản lắm lúc cũng "ớn" thật .Hình như không làm được thì phải
mình đọc trên GPE rất nhiều nhưng chưa thấy ai hỏi và làm như bạn mô tả
bạn tìm những bài cơ bản VBA mà học sau khi rành hết các thuộc tình Range,Offset,tham chiếu....và viết,vọc nhiều bạn sẽ ngộ ra điều bạn muốnMình cũng tìm nhiều trên mạng mà không thấy nên mới hỏi . Kể cũng lạ, những việc khó hơn rất nhiều thì làm được như: chèn code vào file đang đóng, chèn code từ file .text , chèn code vào sheet , vào Thiswookbook , vào Module ...thì làm được mà cái việc làm bằng tay chỉ mất 3s lại có vẻ khó . Hay mình hỏi câu hỏi "dở hơi" nên mọi người không giúp ? Kiến thức VBa không cơ bản lắm lúc cũng "ớn" thật .



mới nhập môn thì vào trang đó đọc chắc hoa mắt luôn mấtBạn đọc cái này xem
http://www.cpearson.com/excel/vbe.aspx



mới nhập môn thì vào trang đó đọc chắc hoa mắt luôn mất
trang Link dưới kiến thức và nhiều vi dụ cơ bản nè
http://www.excel-easy.com/vba/examples/life-of-variables.html
Cám ơn Dhn46, mình đã một lần hỏi thày NDU về nạp code từ File.text vào Excel , Thày Siwtom , rồi code của bạn Quang hải nhưng ứng dụng để copy từ sheet dán vào module không được , thế mới bực . Mình vừa xem code của Thày Trung chính , để ngâm cứu xem sao ? Thực ra việc rất đơn giản mà không làm được , tức cho cái đầu ...tàu hơi nước chạy bằng than..hi..hi..Bác Kh Biet có thể đọc bài #136 tại topic này
http://www.giaiphapexcel.com/forum/showthread.php?72632-Có-thể-dùng-vba-để-xóa-vba-đc-không/page14
Đây là bài viết rất dễ hiểu và hoàn chỉnh để bác làm những công việc đó
Cám ơn Dhn46, mình đã một lần hỏi thày NDU về nạp code từ File.text vào Excel , Thày Siwtom , rồi code của bạn Quang hải nhưng ứng dụng để copy từ sheet dán vào module không được , thế mới bực . Mình vừa xem code của Thày Trung chính , để ngâm cứu xem sao ? Thực ra việc rất đơn giản mà không làm được , tức cho cái đầu ...tàu hơi nước chạy bằng than..hi..hi..
Sub Test()
Call DeleteModuleContent(ThisWorkbook, "module1")
End Sub
Sub AddModuleContent(ByVal book As Workbook, ByVal CompName As String)
On Error Resume Next
Dim Cls As Range
With book.VBProject.VBComponents(CompName).CodeModule
For Each Cls In [B2:B7]
.InsertLines 3, Cls.Text
Next
End With
On Error GoTo 0
End Sub
Cám ơn Dhn46! Mình cũng chuc bạn và gia đình năm mới dồi dào sức khỏe ,an khang , thịnh vượng .Dựa vào link mà dhn46 đã gửi bác chỉ cần biến đổi chút xíu là được
Mã:Sub Test() Call DeleteModuleContent(ThisWorkbook, "module1") End Sub Sub AddModuleContent(ByVal book As Workbook, ByVal CompName As String) On Error Resume Next Dim Cls As Range With book.VBProject.VBComponents(CompName).CodeModule For Each Cls In [B2:B7] .InsertLines 3, Cls.Text Next End With On Error GoTo 0 End Sub
Bác nhớ phải check vào mục Trust access to VBA prọect Object Module trong option Macro setting nhé.
Tuổi bác còn học thế này thì tụi "trẻ con" như dhn46 còn chạy dài không theo nổi đó bác
Chúc bác xuân mới sức khỏe, thành công mới và thật nhiều khám phá mới về VBA!
Cám ơn Dhn46! Mình cũng chúc bạn và gia đình năm mới dồi dào sức khỏe ,an khang , thịnh vượng .Dựa vào link mà dhn46 đã gửi bác chỉ cần biến đổi chút xíu là được
Mã:Sub Test() Call DeleteModuleContent(ThisWorkbook, "module1") End Sub Sub AddModuleContent(ByVal book As Workbook, ByVal CompName As String) On Error Resume Next Dim Cls As Range With book.VBProject.VBComponents(CompName).CodeModule For Each Cls In [B2:B7] .InsertLines 3, Cls.Text Next End With On Error GoTo 0 End Sub
Bác nhớ phải check vào mục Trust access to VBA prọect Object Module trong option Macro setting nhé.
Tuổi bác còn học thế này thì tụi "trẻ con" như dhn46 còn chạy dài không theo nổi đó bác
Chúc bác xuân mới sức khỏe, thành công mới và thật nhiều khám phá mới về VBA!
Phần in đậm là do bác chưa có Tick vào mục Trust access to VBA prọect Object Module. Việc can thiệp vào cửa sổ code "BẮT BUỘC" phải tick vào mục đó.Cám ơn Dhn46! Mình cũng chuc bạn và gia đình năm mới dồi dào sức khỏe ,an khang , thịnh vượng .
Mình đã text thử code của bạn . Hình như bạn hiểu nhầm ý mình :Range("B2:B7") là yêu cầu của mình .Cái mình cần là copy Sub thu() từ : Range("A2:A4").copy rồi dán vào Module . Sau khi thoát thì xóa nó đi (code có thể dài ngắn khác nhau tại cột A, sub thu() chỉ là ví dụ ). Hình như sub text cũng không thực thi, để mình text kỹ lại . Sheet "Thu" thực ra là sheet Macro4, nên sẽ không nhìn thấy trên cửa sổ sheet
[/COLOR].InsertLines 3, Cls.Text
[COLOR=#000000]
Cám ơn bạn ! Mục Trust access to VBA prọect Object Module mình vẫn tích thường trực và chưa bao gỡ bỏ tích mục này kể từ khi "bị" một lần "mẻ trán" vì nó . theo hướng dẫn mình sẽ text thử . Có gì vướng mình trao đổi và nhờ sau .Phần in đậm là do bác chưa có Tick vào mục Trust access to VBA prọect Object Module. Việc can thiệp vào cửa sổ code "BẮT BUỘC" phải tick vào mục đó.
Còn việc đưa dữ liệu vùng nào vào Module nào thì bác tùy biến nhé.
Bác chú ý cấu trúc
Mã:Mã:.InsertLines 3, Cls.Text
Đó là chèn vào dòng thứ 3 của module string có trong Cls
=> Qua đó có thể thay đổi Cls theo mong muốn, và thay đổi dòng cần chèn. Việc dài ngắn của vùng dữ liệu thì bác cũng đã làm rồi chỉ cần dùng Range kết hợp End(xlup) là được bác nhỉ?
Cám ơn Dhn46! Mình cũng chúc bạn và gia đình năm mới dồi dào sức khỏe ,an khang , thịnh vượng .
Mình đã text thử code của bạn . Hình như bạn hiểu nhầm ý mình :Range("B2:B7") là yêu cầu của mình .Cái mình cần là copy Sub thu() từ : Range("A2:A4").copy rồi dán vào Module . Sau khi thoát thì xóa nó đi (code có thể dài ngắn khác nhau tại cột A, sub thu() chỉ là ví dụ ). Hình như sub text cũng không thực thi, để mình text kỹ lại . Sheet "Thu" thực ra là sheet Macro4, nên sẽ không nhìn thấy trên cửa sổ sheet
Private Sub Workbook_BeforeClose(Cancel As Boolean)
'modify from code of siwtom
Dim VBCp As VBComponents
Application.DisplayAlerts = False
On Error Resume Next
Set VBCp = ThisWorkbook.VBProject.VBComponents
If Not VBCp Is Nothing Then VBCp.Remove VBCp("NewModule")
Set VBCp = Nothing
On Error GoTo 0
Application.DisplayAlerts = True
End Sub
Private Sub Workbook_Open()
If MsgBox("ban co muon copy code o Sheet2 vao vbe code khong (Y/N)?", vbYesNo) <> vbYes Then Exit Sub
Dim VBProj As Object
Dim VBComp As Object
Dim CodeMod As Object
Set VBProj = ThisWorkbook.VBProject
Set VBComp = VBProj.VBComponents.Add(vbext_ct_StdModule)
VBComp.Name = "NewModule"
Set CodeMod = VBComp.CodeModule
Dim Arr As Variant
Dim i As Long
Dim LineNum As Long
Arr = Range(Sheet2.[A1], Sheet2.[A65000].End(xlUp)).Value
With CodeMod
LineNum = .CountOfLines + 1
For i = 1 To UBound(Arr)
.InsertLines LineNum, Arr(i, 1)
LineNum = LineNum + 1
Next i
End With
End Sub