Copy dữ liệu trên Sheet rồi dán dữ liệu sang cửa sổ VBA (1 người xem)

  • Thread starter Thread starter Kh Biet
  • Ngày gửi Ngày gửi

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

Kh Biet

Cánh hạc đầu đông
Tham gia
24/8/12
Bài viết
203
Được thích
429
Mì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 !
 

File đính kèm

Mì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 !
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ả
 
Upvote 0
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ứ.
 
Upvote 0
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ứ.
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 .
 
Upvote 0
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ả
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 .
 
Upvote 0
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 .
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ốn
VBA là sự lựa chọn đâu đầu và phải kiên trì thì mới hoc được...GPE là môi trường dễ học nhất ... kiến thức cao thấp có hết..
chúc Bạn chinh phục đỉnh cao VBA thành công
 
Upvote 0
Upvote 0
Cám ơn các bạn đã quan tâm, thực ra mình chỉ vướng sau khi copy dữ liệu và mở Module ra rồi . Việc duy nhất vướng là viết câu lệnh dán dữ liệu ( code đó ) vào module và khi thoát thì xóa dữ liệu mới nạp vào đi .( Cho mình hỏi : Viết câu lệnh thực thi thay cho "Ctrl+v" trong vba viết thế nào ? Dùng ActiveSheet.Paste nó chỉ tác dụng trên sheet . Chà đầu đất quá .
 
Upvote 0
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..
 
Upvote 0
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..


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!
 
Upvote 0
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 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
 
Upvote 0
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 .
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
 
Upvote 0
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
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ã:
[/COLOR].InsertLines 3, Cls.Text
[COLOR=#000000]
Đó 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ỉ?


 
Upvote 0
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 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 .
 
Upvote 0
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


chỉ cần đặt code sau vào trang code thisworkbook là được
chú ý vùng đặt sub ngoài sheet là nằm ở cột A sheet2
Mã:
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
 
Upvote 0
Cám ơn các bạn đã giúp đỡ, nhân tiện năm mới mình xin chúc các bạn và gia đình sức khỏe , an khang thịnh vượng . Chúc mọi người mọi sự bình an !
 
Upvote 0

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

Back
Top Bottom