Hỏi về code VBA lấy dữ liệu từ các sheet với nhau!

  • Thread starter Thread starter xmanpro
  • Ngày gửi Ngày gửi
Liên hệ QC

xmanpro

Thành viên mới
Tham gia
7/7/08
Bài viết
22
Được thích
3
Xin chào cả nhà! Cả nhà cho em hỏi 1 chút. Em muốn lấy dữ liệu giữa 2 sheet với nhau, em dùng đoạn mã sau:
Application.ActiveWorkbook.Worksheets("Sheet1").Range(Cells(2, 2), Cells(2, 2)).Value = Application.ActiveWorkbook.Worksheets("Sheet1").Range(Cells(1, 1), Cells(1, 1))
Nhưng nếu trên cùng 1 sheet thì được, nếu 2 sheet khác nhau thì báo lỗi. Cả nhà giúp em với }}}}}!
 
Bạn sửa đoạn code thành vầy xem sau
Mã:
Application.ActiveWorkbook.Worksheets("Sheet2").Range(Sheet2.Cells(2, 2), Sheet2.Cells(2, 2)).Value = Application.ActiveWorkbook.Worksheets("Sheet1").Range(Sheet1.Cells(1, 1), Sheet1.Cells(1, 1))
 
Upvote 0
Bạn sửa đoạn code thành vầy xem sau
Mã:
Application.ActiveWorkbook.Worksheets("Sheet2").Range(Sheet2.Cells(2, 2), Sheet2.Cells(2, 2)).Value = Application.ActiveWorkbook.Worksheets("Sheet1").Range(Sheet1.Cells(1, 1), Sheet1.Cells(1, 1))
Cám ơn rất nhiều. Làm ơn cho mình hỏi thêm chút: Ở phần này Worksheets("Sheet1") mình muốn thay tên Sheet1 bằng tên Codename trong VBA thì code phải viết thế nào? Cám ơn rất nhiều!
 
Upvote 0
Chắc ý bạn muốn rút ngắn đoạn code đó hả
PHP:
Dim sh, sh1 as worksheet
set sh = sheets("sheet1") or sh = sheet1
set sh1 = sheets("sheet2") or sh1 = sheet2
sh1.Range(sh1.Cells(2, 2), sh1.Cells(2, 2)).Value = sh.Range(Sh.Cells(1, 1), Sh.Cells(1, 1))
Khống biết có đúng ý bạn không
 
Upvote 0
Chắc ý bạn muốn rút ngắn đoạn code đó hả
PHP:
Dim sh, sh1 as worksheet
set sh = sheets("sheet1") or sh = sheet1
set sh1 = sheets("sheet2") or sh1 = sheet2
sh1.Range(sh1.Cells(2, 2), sh1.Cells(2, 2)).Value = sh.Range(Sh.Cells(1, 1), Sh.Cells(1, 1))
Khống biết có đúng ý bạn không

Cám ơn bạn đã trả lời câu hỏi của mình! Ý mình là khi dùng đối tượng Worksheets, mình muốn dùng codename của sheet thay cho tên sheet. Mình nghĩ làm như vậy thì khi mình thay đổi tên sheet nào đó, code vẫn chạy đúng!
 
Upvote 0
Bạn phải chú ý, gán giá trị và copy khác nhau, copy ngoài việc lấy giá trị còn lấy định dạng , công thức v.v...
Sao trông dòng lệnh của bạn "khổ sở" thế. Nó chỉ thế này thôi (Giả sử CodeName của sheet là Sheet1)

Sheet1.Range("A1").Copy Sheet1.Range("B2")

Hay

Sheet1.[A1].Copy Sheet1.[B2]
 
Upvote 0
Bạn vào CS (cửa sổ) VBE (bằng tổ hợp {ALT}+{F11};
Nếu ta chưa thấy ở đâu đó trên màn hình CS Project-VBAProject thì ta vô menu View & chọn dòng
Project Explorer.

Tại đây ta sẽ thấy những liệt kê, đại loại như:

| VBAProject (TachTheoTruong.xls)
|frmTimKiem
|Module1
|Sheet1(Sheet2)
|Sheet16(Sheet14)
|Sheet17(Sum)
|Sheet2(Report)
|ThisWorkbook
|UserForm1
Thì bạn sẽ thấy tên cúng cơm của các trang tính thôi.
Nhất là các dòng có từ 'Sum' hay 'Report' đó; Đối với các trang tính chưa có tên ta gán, thì bạn tự tìm ra tên cúng cơm nó ên nha.

Chúc thành công.
 
Upvote 0
Cám ơn cả nhà rất nhiều. Nhưng có điều này em vẫn chưa hiểu phải làm sao (Chắc do không biết trình bày câu hỏi của mình, hi hi). Khi em lấy dữ liệu từ 1 vùng của sheet này cho sheet khác, em dùng dòng lệnh:
Application.ActiveWorkbook.Worksheets("Bao cao").Range(Sheet2.Cells(1, 1), Sheet2.Cells(100, 1)).Value = Application.ActiveWorkbook.Worksheets("DATA").Range(Sheet1.Cells(1, 1), Sheet1.Cells(100, 1)).Value

Đoạn code: Worksheets("Bao cao"), Worksheets("DATA") em muốn dùng codename thay cho tên sheet, nhưng không biết viết thế nào cả. Viết như sau thì chương trình báo lỗi:
Application.ActiveWorkbook.Sheet2.Range(Sheet2.Cells(1, 1), Sheet2.Cells(100, 1)).Value = Application.ActiveWorkbook.Sheet1.Range(Sheet1.Cells(1, 1), Sheet1.Cells(100, 1)).Value
Mong cả nhà giúp đỡ!
 
Upvote 0
Cám ơn cả nhà rất nhiều. Nhưng có điều này em vẫn chưa hiểu phải làm sao (Chắc do không biết trình bày câu hỏi của mình, hi hi). Khi em lấy dữ liệu từ 1 vùng của sheet này cho sheet khác, em dùng dòng lệnh:
Application.ActiveWorkbook.Worksheets("Bao cao").Range(Sheet2.Cells(1, 1), Sheet2.Cells(100, 1)).Value = Application.ActiveWorkbook.Worksheets("DATA").Range(Sheet1.Cells(1, 1), Sheet1.Cells(100, 1)).Value

Đoạn code: Worksheets("Bao cao"), Worksheets("DATA") em muốn dùng codename thay cho tên sheet, nhưng không biết viết thế nào cả. Viết như sau thì chương trình báo lỗi:
Application.ActiveWorkbook.Sheet2.Range(Sheet2.Cells(1, 1), Sheet2.Cells(100, 1)).Value = Application.ActiveWorkbook.Sheet1.Range(Sheet1.Cells(1, 1), Sheet1.Cells(100, 1)).Value
Mong cả nhà giúp đỡ!

Như bài trên Bác HYen17 đã hướng dẫn cho bạn rồi còn gì.

Bạn xem hình nhé.
0.jpg
 
Upvote 0
Hình như bỏ bớt thì excel sẽ chịu, như sau:

PHP:
Sub CopyRange()
Sheet1.Range(Sheet1.Cells(1, "K"), Sheet1.Cells(100, "K")).Value _
   = Sheet17.Range(Sheet17.Cells(1, 1), Sheet17.Cells(100, 1)).Value
End Sub
Một khi bạn có 2 trang tính với tên cúng cơm tương ứng là Sheet1 & Sheet17

Cần quay lại & nhấn mạnh điều này: Nếu các trang 1 & 17 đó bị xóa rồi thì bạn nhận được báo lỗi có thể là khác.
 
Chỉnh sửa lần cuối bởi điều hành viên:
Upvote 0
Như bài trên Bác HYen17 đã hướng dẫn cho bạn rồi còn gì.

Bạn xem hình nhé.
View attachment 49657
Vâng! Về tìm tên "cúng cơm" của nó thì em biết rùi. Nhưng em không biết viết như thế nào cả. Em viết thế này thì khi chạy lại báo lỗi:
Application.ActiveWorkbook.Sheet2.Range(Sheet2.Cells(1, 1), Sheet2.Cells(100, 1)).Value = Application.ActiveWorkbook.Sheet1.Range(Sheet1.Cells(1, 1), Sheet1.Cells(100, 1)).Value
Dù Sheet1, Sheet2 em đã lấy đúng codename của nó ở trong bảng VBE!
 
Upvote 0
Em viết thế này thì khi chạy lại báo lỗi:
Application.ActiveWorkbook.Sheet2.Range(Sheet2.Cells(1, 1), Sheet2.Cells(100, 1)).Value = Application.ActiveWorkbook.Sheet1.Range(Sheet1.Cells(1, 1), Sheet1.Cells(100, 1)).Value
Dù Sheet1, Sheet2 em đã lấy đúng codename của nó ở trong bảng VBE!
Báo lỗi phải rồi bạn ạ! Theo bài của a HYen hướng dẫn thì ok rồi. Đoạn code bạn viết bị lỗi là vì bạn biết rằng nếu muốn có con thì phải có cha, có mẹ. Application là đại diện cho MS excel trong đó có nhiều Workbook trong workbook có nhiều worksheets vì vậy bạn phải đi tư từ nó mới hiểu. Vì vậy bạn phải thêm worksheets("ten cua sheet bạn muốn lấy")
Đoạn code trên phải làm theo anh Sealand là ok. Rút ngắn đoạn code trên theo ý bạn là
Sheet2.Range(Sheet2.Cells(1, 1), Sheet2.Cells(100, 1)).copy Sheet1.Range(Sheet1.Cells(1, 1), Sheet1.Cells(100, 1)). Mình nghĩ bạn nến tìm các bài của Bác SA_QC, HYen17 đọc thêm ở dưới những bài viết của Bác SA_QC có chú thích bạn click vào đó sẽ có nhiều cái hay để học lắm, cứ từ từ
 
Upvote 0
Web KT

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

Back
Top Bottom