Chuyển đoạn code từ sheet sang modules (1 người xem)

Liên hệ QC

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

hoangtung211286

Thành viên mới
Tham gia
10/12/14
Bài viết
8
Được thích
0
MÌNH CÓ ĐOẠN CODE NÀY


Private Sub Worksheet_Change(ByVal Target As Range)
On Error Resume Next

If Target.Find("=", , , 2) Is Nothing Then Exit Sub
If Target.Offset(1, 0) <> "" And Target.Offset(1, -1) <> "" Then Target.Offset(1, 0).EntireRow.Insert
If InStr(Target, ": ") Then
'Ta = Right(Target, Len(Target) - InStr(Target, ":") - 1)
Ta = Mid(Target, InStrRev(Target, ":") + 1, InStr(Target, "=") - InStrRev(Target, ":") - 1) ' <-- sua 02.04.2011
Tb = Replace(Ta, " ", "")
KoCoDienGiai:
On Error GoTo LOI
Tc = Replace(Tb, ",", ".")
Tc = Replace(Tc, "x", "*")
Tc = Replace(Tc, "=", "")
Khoiluong = Round(Evaluate("=" & Tc), 3)
'Noi gia tri voi ket qua:
If Right(Target, 1) = "=" Or Khoiluong <> Replace(Right(Target, Len(Target) - InStr(Target, "=")), " ", "") Then ' <-- them
With Target
'.Value = .Value & " " & Khoiluong
.Value = Left(.Value, InStr(.Value, "=")) & " " & Khoiluong
.Font.ColorIndex = 9
.Characters(InStr(.Value, "=") + 1, Len(.Value)).Font.ColorIndex = 5
End With
Else: '<-- them
With Target
.Font.ColorIndex = 9
.Characters(InStr(.Value, "=") + 1, Len(.Value)).Font.ColorIndex = 5
End With
Exit Sub '<-- them
End If
Else:
Tb = Replace(Target, " ", "")
If IsNumeric(Left(Tb, 1)) Or Left(Tb, 1) = "(" Then
Tb = Left(Target, InStr(Target, "=") - 1) ' <-- them
GoTo KoCoDienGiai
'Else: Exit Sub
End If
'Bo sung 28.7.2010:
If Left(Tb, 1) = "-" And IsNumeric(Mid(Tb, 2, 1)) Then
Tb = Left(Target, InStr(Target, "=") - 1)
GoTo KoCoDienGiai
Else: Exit Sub
End If
End If
'Sum Khoi Luong:
'End If
'-----------------------------


Exit Sub
'---------------------------------------
LOI:
Target.Characters(InStr(Target, ":") + 1, Len(Target)).Font.ColorIndex = 3


End Sub

TUY NHIÊN MÌNH CHỈ SỬ DỤNG TRONG MỘT SHEET CỦA MỘT FILE NÀO ĐÓ, KHI MỞ FILE KHÁC THÌ KHÔNG SỬ DỤNG ĐƯỢC
MÌNH NHỜ CÁC CAO THỦ SỬA GIÚP ĐỂ ĐƯA VÀO MODULES VÀ TẠO MỘT FILE MAXCRO, MÌNH KHÔNG CẦN PHẢI COPY ĐOẠN CODE NÀY VÀO NỮA,
CẢM ƠN NHIỀU
 

File đính kèm

MÌNH CÓ ĐOẠN CODE NÀY
.................
TUY NHIÊN MÌNH CHỈ SỬ DỤNG TRONG MỘT SHEET CỦA MỘT FILE NÀO ĐÓ, KHI MỞ FILE KHÁC THÌ KHÔNG SỬ DỤNG ĐƯỢC
MÌNH NHỜ CÁC CAO THỦ SỬA GIÚP ĐỂ ĐƯA VÀO MODULES VÀ TẠO MỘT FILE MAXCRO, MÌNH KHÔNG CẦN PHẢI COPY ĐOẠN CODE NÀY VÀO NỮA,
CẢM ƠN NHIỀU
đúng là nó không thể chạy khi ở sheet hoặc file khác. cho dù bạn có chuyển được sang module thì bạn gọi bằng cách nào?
nếu cách mình không được cho là gà thì bạn thử xem sao nhé
tại các sheet bạn dán code này vào
Mã:
[COLOR=#000000]Private Sub Worksheet_Change(ByVal Target As Range)
[/COLOR]Run "FILEA.xlam!RunMacrox", [COLOR=#000000]Target[/COLOR][COLOR=#000000]
end sub
[/COLOR]

rồi bạn quất cái đống code cũ cũa bạn vào module của 1 file mới như này

Mã:
[/COLOR][COLOR=#000000]Public sub [/COLOR]RunMacrox(byval Target as range)[COLOR=#000000]
[/COLOR][COLOR=#000000]On Error Resume Next[/COLOR]
[COLOR=#000000]If Target.Find("=", , , 2) Is Nothing Then Exit Sub[/COLOR]
[COLOR=#000000]If Target.Offset(1, 0) <> "" And Target.Offset(1, -1) <> "" Then Target.Offset(1, 0).EntireRow.Insert[/COLOR]
[COLOR=#000000]If InStr(Target, ": ") Then[/COLOR]
[COLOR=#000000]'Ta = Right(Target, Len(Target) - InStr(Target, ":") - 1)[/COLOR]
[COLOR=#000000]Ta = Mid(Target, InStrRev(Target, ":") + 1, InStr(Target, "=") - InStrRev(Target, ":") - 1) ' <-- sua 02.04.2011[/COLOR]
[COLOR=#000000]Tb = Replace(Ta, " ", "")[/COLOR]
[COLOR=#000000]KoCoDienGiai:[/COLOR]
[COLOR=#000000]On Error GoTo LOI[/COLOR]
[COLOR=#000000]Tc = Replace(Tb, ",", ".")[/COLOR]
[COLOR=#000000]Tc = Replace(Tc, "x", "*")[/COLOR]
[COLOR=#000000]Tc = Replace(Tc, "=", "")[/COLOR]
[COLOR=#000000]Khoiluong = Round(Evaluate("=" & Tc), 3)[/COLOR]
[COLOR=#000000]'Noi gia tri voi ket qua:[/COLOR]
[COLOR=#000000]If Right(Target, 1) = "=" Or Khoiluong <> Replace(Right(Target, Len(Target) - InStr(Target, "=")), " ", "") Then ' <-- them[/COLOR]
[COLOR=#000000]With Target[/COLOR]
[COLOR=#000000]'.Value = .Value & " " & Khoiluong[/COLOR]
[COLOR=#000000].Value = Left(.Value, InStr(.Value, "=")) & " " & Khoiluong[/COLOR]
[COLOR=#000000].Font.ColorIndex = 9[/COLOR]
[COLOR=#000000].Characters(InStr(.Value, "=") + 1, Len(.Value)).Font.ColorIndex = 5[/COLOR]
[COLOR=#000000]End With[/COLOR]
[COLOR=#000000]Else: '<-- them[/COLOR]
[COLOR=#000000]With Target[/COLOR]
[COLOR=#000000].Font.ColorIndex = 9[/COLOR]
[COLOR=#000000].Characters(InStr(.Value, "=") + 1, Len(.Value)).Font.ColorIndex = 5[/COLOR]
[COLOR=#000000]End With[/COLOR]
[COLOR=#000000]Exit Sub '<-- them[/COLOR]
[COLOR=#000000]End If[/COLOR]
[COLOR=#000000]Else:[/COLOR]
[COLOR=#000000]Tb = Replace(Target, " ", "")[/COLOR]
[COLOR=#000000]If IsNumeric(Left(Tb, 1)) Or Left(Tb, 1) = "(" Then[/COLOR]
[COLOR=#000000]Tb = Left(Target, InStr(Target, "=") - 1) ' <-- them[/COLOR]
[COLOR=#000000]GoTo KoCoDienGiai[/COLOR]
[COLOR=#000000]'Else: Exit Sub[/COLOR]
[COLOR=#000000]End If[/COLOR]
[COLOR=#000000]'Bo sung 28.7.2010:[/COLOR]
[COLOR=#000000]If Left(Tb, 1) = "-" And IsNumeric(Mid(Tb, 2, 1)) Then[/COLOR]
[COLOR=#000000]Tb = Left(Target, InStr(Target, "=") - 1)[/COLOR]
[COLOR=#000000]GoTo KoCoDienGiai[/COLOR]
[COLOR=#000000]Else: Exit Sub[/COLOR]
[COLOR=#000000]End If[/COLOR]
[COLOR=#000000]End If[/COLOR]
[COLOR=#000000]'Sum Khoi Luong:[/COLOR]
[COLOR=#000000]'End If[/COLOR]
[COLOR=#000000]'-----------------------------[/COLOR]
[COLOR=#000000]Exit Sub[/COLOR]
[COLOR=#000000]'---------------------------------------[/COLOR]
[COLOR=#000000]LOI:[/COLOR]
[COLOR=#000000]Target.Characters(InStr(Target, ":") + 1, Len(Target)).Font.ColorIndex = 3[/COLOR]
[COLOR=#000000]End Sub
[/COLOR]

rồi lưu lại dưới dạng ADDINS tên file là
FILEA.xlam sau đó thêm addins vừa tạo vào rồi chạy xem
khi bạn thao tác trên sheet có code

Mã:
[COLOR=#000000]Private Sub Worksheet_Change(ByVal Target As Range)
[/COLOR]Run "FILEA.xlam!RunMacrox", [COLOR=#000000]Target[/COLOR][COLOR=#000000]
end sub
[/COLOR]

sẽ gọi lệnh RunMacrox trong addins ra chạy
thử xem......
/-*+/
 
Lần chỉnh sửa cuối:
Upvote 0
Có vẻ như fải mắng bạn vài câu mới được, trước khi bạn xem file

Bạn làm về kỹ thuật, nhưng viết VBA cần thận trọng hơn nữa;
Ông bà ta nói sai con toán bán con trâu!

Thứ nhứt: Bao giờ cũng nên xài câu thần chú
Mã:
Option Explicit
Chuyện này iêu cầu các tham biến cần fải được khai báo tường minh.

Thứ nữa: Các dòng lệnh cần thẳng theo cột, tạo khối các dòng lệnh để dễ bề tìm ra sai sót của chính mình;
Không ai tài giỏi để chỉ viết 1 lần là đúng hết trong 1 macro, chứ chưa nói tới macro đồ sộ như bạn.

Muốn chạy xa & nhanh thì cần tập đi cho đúng kiểu cái đã!

(*) Bạn xài macro sự kiện trên toàn 1 trang tính là không nên chút nào; Trong file mình giới hạn tác động macro ở 2 cột mà thôi.
Chuyện này cũng còn là quá dư giả trong thực tế công việc của bạn;
Trong thực tế thế nào, bạn nên sửa lại.
Tất nhiên không thể tự do vô giới hạn như bạn thế được.
 

File đính kèm

Upvote 0
Những bạn nào mới dùng VBA thì vào VBA->Options->Editor->Đánh dấu Require Variable Declartion thì sẽ ko cần phải chèn tay Option Explicit nữa.
 
Upvote 0
Cái này là do bạn tich vào mục docking rồi chứ sao nữa :D. bạn ko dock thì cửa sổ vba ide mỗi nơi 1 cái, nó giống delphi và pascal ide trước đây đó.
 
Upvote 0
nói chung là cảm ơn các thánh nhiều, mình lấy đoạn code này trong phần mềm để giúp ba mình đỡ vất vả, nên nhờ các thánh hoàn thiện, cho chắc miếng gạo, chứ có biết gì về VBA đâu
 
Upvote 0
Bạn làm về kỹ thuật, nhưng viết VBA cần thận trọng hơn nữa;
Ông bà ta nói sai con toán bán con trâu!

Thứ nhứt: Bao giờ cũng nên xài câu thần chú
Mã:
Option Explicit
Chuyện này iêu cầu các tham biến cần fải được khai báo tường minh.

Thứ nữa: Các dòng lệnh cần thẳng theo cột, tạo khối các dòng lệnh để dễ bề tìm ra sai sót của chính mình;
Không ai tài giỏi để chỉ viết 1 lần là đúng hết trong 1 macro, chứ chưa nói tới macro đồ sộ như bạn.

Muốn chạy xa & nhanh thì cần tập đi cho đúng kiểu cái đã!

(*) Bạn xài macro sự kiện trên toàn 1 trang tính là không nên chút nào; Trong file mình giới hạn tác động macro ở 2 cột mà thôi.
Chuyện này cũng còn là quá dư giả trong thực tế công việc của bạn;
Trong thực tế thế nào, bạn nên sửa lại.
Tất nhiên không thể tự do vô giới hạn như bạn thế được.
oh. xin lỗi bác. cái này em chỉ xem code rồi sửa lại theo yêu cầu của bác ấy thôi chứ em chưa xem file. nhưng cách trên em chỉnh có đúng là chạy được trên file khác không bác. còn vụ khai báo biến vs code này kia thì để tác giả tự chỉnh. chứ em chỉ biết sửa lại để chạy đoạn code đó trên mấy file khác thui. ^^
 
Upvote 0
vẫn chưa chạy được khi tạo file ADDINS bác ạh, các bác thử viết lại xem nhé, em thì bó tay rồi mới nhờ các bác đó
 
Upvote 0

File đính kèm

Upvote 0
Web KT

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

Back
Top Bottom