Chuyên mục xử lý, gỡ rối code VBA

Liên hệ QC
Status
Không mở trả lời sau này.

ndu96081631

Huyền thoại GPE
Thành viên BQT
Super Moderator
Tham gia
5/6/08
Bài viết
30,703
Được thích
53,930
Thứ nhất: Bạn chưa cho biết nó báo lỗi như thế nào?
Hình như bạn chưa nạp dữ liệu cho mảng data1() mà, fải không? Vậy làm sao thỏa câu lệnh đó được?

Như bài #1320 đã nêu ra, đoạn code ấy sai nhiều lắm, về cả thuật toán lẫn thuật ngữ.
Thuật ngữ:
data1(i,2).Value là thuật ngữ truy vấn thuộc tính Value của phần tử dòng i, cột 2 của mảng data1
Mảng data1 là mảng 2 chiều. Vì không được xác định kiểu cho nên phần tử data1(i,2) sẽ có kiểu Variant. Vì chưa gán trị cho nên VBA chưa xác định được kiểu của nó sẽ có thuộc tính Value hay không.
Thuật toán:
như bạn đã nêu ra, data1 chưa được gán trị cho nên đem nó ra so sánh chả có nghĩa lý gì cả.
 
Upvote 0
Hiện tại em có 2 file excel, em muốn copy mã nhân viên và tên nhân viên từ file PXKhoan_2017 sang file PXKhoan_Test thì làm thế nào ạ. Và cho em hỏi là có cách nào copy mà không cần mở file không ạ. Em cảm ơn.
 

File đính kèm

  • Copy.rar
    198.2 KB · Đọc: 14
Upvote 0
Hiện tại em có 2 file excel, em muốn copy mã nhân viên và tên nhân viên từ file PXKhoan_2017 sang file PXKhoan_Test thì làm thế nào ạ. Và cho em hỏi là có cách nào copy mà không cần mở file không ạ. Em cảm ơn.
Chắc bạn copy từ sheet BangLuong & Paste vào sheet đó luôn hả?
Mã:
Public Sub GPE_()
Dim cn As Object, Str, Path As String
Path = ThisWorkbook.Path & "\PXKhoan_201712.xlsx"
Set cn = CreateObject("ADODB.Connection")
Str = "Select * from [BangLuong$B5:C] where f1 is not null"
cn.Open "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & Path & ";Extended Properties=""Excel 12.0;HDR=No"";"
Sheets("BangLuong").Range("B5").CopyFromRecordset cn.Execute(Str)
End Sub
 
Upvote 0
Em có dữ liệu dạng aaxbbbW trong đó 2 chữ màu đỏ là không đổi, aa, bbb là số (có thể là 1x18W, 10x200W). Kết quả em cần là tích của 2 số aa và bbb
Trong excel thì em dùng hàm FIND để tìm vị trí của x W rồi từ đó dùng hàm MID, LEFT, RIGHT để tách các số ra.

Chuyển sang VBA thì phương thức tìm kiếm FIND trong VBA lại không như trong excel. Các bác trợ giúp em trường hợp này với
 
Upvote 0
Bạn xài hàm tự tạo này:
PHP:
Function Tich(StrC As String) As Double
 Dim VTr As Byte, GPE As Double, COM As Double

 VTr = InStr(StrC, "x")
 If VTr Then
    GPE = CDbl(Left(StrC, VTr - 1))
    StrC = Mid(StrC, VTr + 1, Len(StrC))
    COM = CDbl(Left(StrC, Len(StrC) - 1))
    Tich = GPE * COM
 End If
End Function

Tich(25.5x13.5W) => 334.25
 
Upvote 0
Chắc bạn copy từ sheet BangLuong & Paste vào sheet đó luôn hả?
Mã:
Public Sub GPE_()
Dim cn As Object, Str, Path As String
Path = ThisWorkbook.Path & "\PXKhoan_201712.xlsx"
Set cn = CreateObject("ADODB.Connection")
Str = "Select * from [BangLuong$B5:C] where f1 is not null"
cn.Open "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & Path & ";Extended Properties=""Excel 12.0;HDR=No"";"
Sheets("BangLuong").Range("B5").CopyFromRecordset cn.Execute(Str)
End Sub
Vâng anh, copy mã nhân viên và tên nhân viên từ sheet BangLuong của PXKhoang_2017 vào sheet BangLuong của PXKhoan_Test. À anh cho em hỏi thêm là, bây giờ em có 10 file của mỗi phân xưởng riêng thì có cách nào chạy 1 lần mà tự động copy theo từng phân xưởng không anh. Hiện tại mỗi phân xưởng nằm cùng một thư mục quản lý và chia ra từng thư mục theo phân xưởng. Có một vấn đề nữa là 2 file cần copy dữ liệu không nằm trong một thư mục, như hình ở dưới thì dữ liệu cần copy nằm trong các phân xưởng, còn file để paste dữ liệu thì nằm trong thư mục Templates anh ạ.
Capturef.png
 
Lần chỉnh sửa cuối:
Upvote 0
Em chào mọi người!
Nhờ mọi người giải đáp giúp em thắc mắc này ạ!
Em có một bảng dữ liệu muốn dùng lệnh auto sort theo thứ tự tăng dần. Em dùng code bên dưới.
Giá trị cột B em cần sort vlookup từ sheet khác, sẽ thay đổi theo thời gian chứ em không tự nhập tay giá trị này trực tiếp vào B.

Tuy nhiên em gặp vấn đề là khi giá trị cột B thay đổi thì code không chạy. Chỉ khi nào em nhấp chuột hoặc bấm enter hay nhập trực tiếp vào một ô bất kỳ ở cột B thì code mới chạy sort lại theo đúng thứ tự.

Vậy em làm cách nào để chỉ cần thay đổi giá trị ở bảng mà cột B vlookup qua thì code chạy luôn chứ không cần em bấm chuột vào cột B ạ?

Mong mọi người chỉ giáo giúp em với!!!!
Em cảm ơn ạ!!!!!!!

Private Sub Worksheet_Change(ByVal Target As Range)
On Error Resume Next
If Not Intersect(Target, Range("B:B")) Is Nothing Then
Range("B1").Sort Key1:=Range("B2"), _
Order1:=xlAscending, Header:=xlYes, _
OrderCustom:=1, MatchCase:=False, _
Orientation:=xlTopToBottom
End If
End
 
Upvote 0
Vâng anh, copy mã nhân viên và tên nhân viên từ sheet BangLuong của PXKhoang_2017 vào sheet BangLuong của PXKhoan_Test. À anh cho em hỏi thêm là, bây giờ em có 10 file của mỗi phân xưởng riêng thì có cách nào chạy 1 lần mà tự động copy theo từng phân xưởng không anh. Hiện tại mỗi phân xưởng nằm cùng một thư mục quản lý và chia ra từng thư mục theo phân xưởng. Có một vấn đề nữa là 2 file cần copy dữ liệu không nằm trong một thư mục, như hình ở dưới thì dữ liệu cần copy nằm trong các phân xưởng, còn file để paste dữ liệu thì nằm trong thư mục Templates anh ạ.
Capturef.png
10 Phân xưởng không gì là nhiều. 10 cái làm tay cũng được cơ mà
Chừng nào lên 100 -> 1000 thì mới bàn tính.
 
Upvote 0
Sếp nào vô lý thế. Sao phải "ma cà rồng". Tôi làm sao là việc của tôi miễn xong việc là được... (Sếp có trên GPE không? mời vào đây tiếp chuyện.)
Sếp của em thì không có ở trên này anh ạ, bởi vì cái này hàng tháng em đều phải copy 1 lần. Sau khi copy xong thì có đoạn macro đẩy kế hoạch cho các phân xưởng nữa nên làm tự động thì hay hơn ạ.
 
Upvote 0
Sếp của em thì không có ở trên này anh ạ, bởi vì cái này hàng tháng em đều phải copy 1 lần. Sau khi copy xong thì có đoạn macro đẩy kế hoạch cho các phân xưởng nữa nên làm tự động thì hay hơn ạ.

Tôi dị ứng với cái kiểu "Sếp bắt em làm" lắm

Tôi thích làm gì là việc của tôi. Tôi thấy hợp lý, thuận lợi cho tôi tôi làm. Thế thôi....

Chứ đừng ở đây nói là "Sếp bắt em làm như vậy". Dị ứng lắm.
Sếp em viết là: "Viết macro update mã và tên nhân viên vào template kế hoạch sản xuất của PX" anh ạ. :D

Thế bạn trả lời sao???
 
Upvote 0
Tôi dị ứng với cái kiểu "Sếp bắt em làm" lắm

Tôi thích làm gì là việc của tôi. Tôi thấy hợp lý, thuận lợi cho tôi tôi làm. Thế thôi....

Chứ đừng ở đây nói là "Sếp bắt em làm như vậy". Dị ứng lắm.


Thế bạn trả lời sao???
Em thấy làm bằng macro cũng thuận tiện hơn mà anh. Sếp giao thì em làm thôi. Thôi để em tự nghiên cứu, em cảm ơn anh.
 
Upvote 0
Upvote 0
Em thấy làm bằng macro cũng thuận tiện hơn mà anh. Sếp giao thì em làm thôi. Thôi để em tự nghiên cứu, em cảm ơn anh.

Thuận lợi hơn, tôi đồng ý. Nhưng, cái gì cũng có mặt trái và mặt phải.

+ Nếu bạn làm chủ được (có nghĩa bạn tự biến chuyển được khi xảy ra lỗi, hay yêu cầu cao hơn): thì macro thực sự hữu ích cho bạn
+ Bạn không làm được mà đi nhờ làm macro. Đến lúc sếp thấy ô hay quá, vậy bạn phải làm thêm cái này, cái kia...cho hay hơn....: bạn có đủ khả năng và đáp ứng cái ông sếp kia hông???

Đến lúc này bạn chạy đường nào.... Cho nên ông bà ta nói "liệu cơm gắp mắm" là vậy....
 
Upvote 0
Em thấy làm bằng macro cũng thuận tiện hơn mà anh. Sếp giao thì em làm thôi. Thôi để em tự nghiên cứu, em cảm ơn anh.
Ghi trên bảng mô tả công việc (khi tuyển dụng) khác với giao việc nha bạn.
Những công việc trên bảng mô tả công việc là trách nhiệm của bạn, bạn phải làm những việc đó để hưởng mức lương đó.
Còn khi giao việc phải phù hợp với bảng mô tả công việc, giao những việc ngoài bảng mô tả công việc bạn có thể từ chối (nguyên tắc là vậy :D)
 
Upvote 0
Trên bảng mô tả công việc của bạn có mục nào ghi kiểu như "thực hiện các công việc trên excel bằng macro" không :D

Người thực sự có công việc như thế này sẽ không hỏi code từ a đến z như thế. Người ta sẽ tự viết gần hết, và chỉ hỏi 1 vài chỗ bí.

Ghi trên bảng mô tả công việc (khi tuyển dụng) khác với giao việc nha bạn.
Những công việc trên bảng mô tả công việc là trách nhiệm của bạn, bạn phải làm những việc đó để hưởng mức lương đó.
Còn khi giao việc phải phù hợp với bảng mô tả công việc, giao những việc ngoài bảng mô tả công việc bạn có thể từ chối (nguyên tắc là vậy :D)

Cũng có khi sếp bắt làm công việc ngoài bảng mô tả. Nhưng "ngoài" đến mức như thế này thì ngừoi hỏi nên đi kiếm việc khác là vừa. Bởi vì đáp ứng xong thì sếp sẽ tiếp tục được voi đòi tiên.
 
Upvote 0
Status
Không mở trả lời sau này.
Web KT
Back
Top Bottom