Dùng Macro 4 để lấy dữ liệu từ 1 file đang đóng

miphp

Thành viên chính thức
Tham gia ngày
20 Tháng mười một 2009
Bài viết
69
Được thích
34
Điểm
370
Nơi ở
Hải Phòng
Sub Test()
Dim sFile As String, sSheet As String, sAddr As String
sFile
= ThisWorkbook.Path & "\Source.xls"
sSheet = "Sheet1"
sAddr = "A1:D100"
Range("A1:D12") = GetData(sFile, sSheet, sAddr)
End Sub

Em mới tập tành VBA.
Em đang cố lắp ghép code để chép dữ liệu từ nhiều file (từ 1 đến 5 files) vào nhiều sheets trong 1 file tổng (chỉ làm 1 sub)
Các bác cho Em hỏi, Giả sử trường hợp không tìm thấy file "Source.xls"
mình muốn nó bỏ qua, và tìm dữ liệu của 1 file khác (Source2.xls) để chép vào file tổng, thì code như thế nào ạ?
Cảm ơn các bác
 

doveandrose

hello
Tham gia ngày
3 Tháng bảy 2009
Bài viết
2,374
Được thích
2,249
Điểm
560
Tuổi
20

[/COLOR]Em mới tập tành VBA.
Em đang cố lắp ghép code để chép dữ liệu từ nhiều file (từ 1 đến 5 files) vào nhiều sheets trong 1 file tổng (chỉ làm 1 sub)
Các bác cho Em hỏi, Giả sử trường hợp không tìm thấy file "Source.xls"
mình muốn nó bỏ qua, và tìm dữ liệu của 1 file khác (Source2.xls) để chép vào file tổng, thì code như thế nào ạ?
Cảm ơn các bác
https://msdn.microsoft.com/en-us/library/x23stk5t(v=vs.84).aspx
 

vitinhvnbmt

Thành viên hoạt động
Tham gia ngày
30 Tháng năm 2009
Bài viết
108
Được thích
6
Điểm
370
bạn ơi mình muốn lấy dữ liệu từ 2 file Source1.xls và Source2.xls vào Main thì sửa code như thế nào hả bạn?
trong đó:
+ lấy vùng A1:D12 từ Source1.xls
+ lấy vùng C3:G18 từ Source2.xls
sang Main.xls thì 2 vùng dữ liệu đó đặt ở vùng nào đó mà không bị chồng dữ liệu lên nhau.
 
Lần chỉnh sửa cuối:

vitinhvnbmt

Thành viên hoạt động
Tham gia ngày
30 Tháng năm 2009
Bài viết
108
Được thích
6
Điểm
370
Please help! chẳng nhẽ không có ai giải đáp được hay sao?
 

phantomhp

Thành viên mới
Tham gia ngày
17 Tháng hai 2017
Bài viết
5
Được thích
0
Điểm
163
Tuổi
29
Điều này không bắt buộc, tôi để cùng 1 thư mục để tiện cho quá trình thí nghiệm thôi
Nếu file của bạn nằm ở thư mục khác, cứ ghi đường dẫn chính xác vào là được rồi
Ví dụ đoạn code này:
PHP:
Sub Test()
  Dim sFile As String, sSheet As String, sAddr As String
  sFile = ThisWorkbook.Path & "\Source.xls"
  sSheet = "Sheet1"
  sAddr = "A1:D100"
  Range("A1:D12") = GetData(sFile, sSheet, sAddr)
End Sub
Nếu file Source.xls nằm ở 1 thư mục khác (D:\Baitap\Source.xls chẳng hạn) thì sửa code thành:
PHP:
Sub Test()
  Dim sFile As String, sSheet As String, sAddr As String
  sFile = "D:\Baitap\Source.xls"
  sSheet = "Sheet1"
  sAddr = "A1:D100"
  Range("A1:D12") = GetData(sFile, sSheet, sAddr)
End Sub
Vậy thôi
Anh cho em hỏi khi em thao tác file trong server chung thì nó báo lỗi Run-time error "52": Bad file name or number là sao ạ?
 

dencongvien

Thành viên mới
Tham gia ngày
7 Tháng tám 2017
Bài viết
1
Được thích
0
Điểm
0
Tuổi
33
nếu người ta biết sửa thì đã không phải lên diễn đàn hỏi bác rùi,
 

bth8320

Thành viên mới
Tham gia ngày
24 Tháng mười một 2007
Bài viết
33
Được thích
4
Điểm
665
Tuổi
35
Nơi ở
Đà Nẵng/Quảng Ngãi
Chào các anh chị.

Cho mình hỏi về trường hợp của mình như sau:

Bây giờ mình muốn lấy giá trị của ô A1 của rất nhiều file trong đó file tổng hợp đã hiển thị đường dẫn, tên file, tên sheet(Tất cả đều là sheet1)
Mình cần giá trị A1 sẽ tương ứng với các file hiển thị tại cột C.
Mình đã edit thử code của các anh cho đúng với trường hợp của minh nhưng không được.

Nhờ các anh chị giúp mình trường hợp này với.(Code khác cũng được miễn là giải quyết được vấn đề).

Chi tiết xin xem file đính kèm.

Trân trọng.
 

File đính kèm

tq_thuyet

Thành viên mới
Tham gia ngày
29 Tháng mười một 2008
Bài viết
44
Được thích
4
Điểm
665
Nơi ở
Hà Nội
Loại bài toán này đã từng được nói rất nhiều lần trên diễn đàn rồi. Hầu hết người ta dùng 2 cách:
Cách 1: Mở file để lấy dữ liệu rồi đóng file lại
Cách 2: Dùng ADO (không thấy mở file nhưng vẫn có mở ngầm)
Hôm nay xin giới thiệu với bạn 1 cách cực kỳ đơn giản (tự các bạn xây dựng). Bẳng cách dùng Macro 4, các bạn sẽ thấy giải thuật đơn giản đến không ngờ
Tất cả bắt đầu bằng những thí nghiệm sau đây:
- Giả sử ta có file Source.xls và file Main.xls nằm cùng 1 thư mục
- File Source.xls là file chứa nguồn dữ liệu
- Ta mở 2 file cùng lúc. Tại file Main, sheet1, cell A1, tôi gõ dấu = , xong tôi dời con trỏ sang file Source.xls rồi nhấp chọn cell A1
- Sau khi thực hiện xong ta được công thức =[Source.xls]Sheet1!$A$1
- Đóng file Source.xls, ta thấy công thức tại cell A1 của file Main.xls đã biến đổi, có thêm đường dẩn tuyệt đối... đại khái thế này
PHP:
='C:\Documents and Settings\NHAV\Desktop\GetData_Test\[Source.xls]Sheet1'!$A$1
- Giở ta bật chức năng record macro lên, chọn cell A1, bấm F2Enter... xong, tắt record macro và Alt + F11 để xem code, ta sẽ thấy code có dạng thế này:
PHP:
Sub Macro1()
'
' Macro recorded 17/8/2010 by Anh Tu?n
'
'
    Range("A1").Select
    ActiveCell.FormulaR1C1 = _
        "='C:\Documents and Settings\NHAV\Desktop\GetData_Test\[Source.xls]Sheet1'!R1C1"
    Range("A2").Select
End Sub
- Chỉnh sửa code lại 1 tí:
PHP:
Sub Macro1()
  Range("A1") = "='C:\Documents and Settings\NHAV\Desktop\GetData_Test\[Source.xls]Sheet1'!R1C1"
End Sub
- Code này làm công việc gán công thức liên kết đến file Source.xls vào cell A1 của file Main.xls
- Để chuyển công thức thành giá trị, ta có 2 cách
Cách 1:
PHP:
Sub Macro1()
  With Range("A1")
    .Value = "='C:\Documents and Settings\NHAV\Desktop\GetData_Test\[Source.xls]Sheet1'!R1C1"
    .Value = .Value
  End With
End Sub
Cách 2:
PHP:
Sub Macro1()
  Range("A1") = ExecuteExcel4Macro("'C:\Documents and Settings\NHAV\Desktop\GetData_Test\[Source.xls]Sheet1'!R1C1")
End Sub
- Và cách 2 này chính là phương pháp dùng macro 4 để lấy dữ liệu ở file đang đóng
----------------------------------------------------------

- Hãy nghiên cứu chuổi "'C:\Documents and Settings\NHAV\Desktop\GetData_Test\[Source.xls]Sheet1'!R1C1"
Ta thấy nó có cú pháp thế này:
"'" & đường dẩn & "[" Tên file & "]" & Tên sheet & "'!" & địa chỉ cell
- Vậy hãy xây dựng 1 code dựa trên phương pháp lấy dữ liệu này nhé
PHP:
Function GetData(sFile As String, sSheet As String, sAddr As String)
  Dim pLink As String, iR As Long, iC As Long, Arr
  If Len(Dir(sFile)) Then
    Arr = Range(sAddr)
    pLink = "'" & Replace(sFile, Dir(sFile), "[" & Dir(sFile) & "]") & sSheet & "'!"
    For iR = 1 To Range(sAddr).Rows.Count
      For iC = 1 To Range(sAddr).Columns.Count
        Arr(iR, iC) = ExecuteExcel4Macro(pLink & Range(sAddr).Cells(iR, iC).Address(, , 2))
      Next iC
    Next iR
    GetData = Arr
  End If
End Function
- Hàm đã có, giờ để lấy dữ liệu vùng A1:D12 tại sheet1 của file Source.xls, ta viết thêm code này:
PHP:
Sub Test()
  Dim sFile As String, sSheet As String, sAddr As String
  sFile = ThisWorkbook.Path & "\Source.xls"
  sSheet = "Sheet1"
  sAddr = "A1:D100"
  Range("A1:D12") = GetData(sFile, sSheet, sAddr)
End Sub
-----------------------------
Ứng dụng mở rộng: Nạp list cho ComboBox, với dữ liệu được lấy từ file đang đóng
- Giả sử ta có sẳn 1 ComboBox, tên ComboBox1
- Dữ liệu cần lấy nằm ở vùng H1:H10 của sheet1, file Source.xls
- Ta viết code sau:
PHP:
Sub AddList()
  Dim sFile As String, sSheet As String, sAddr As String
  sFile = ThisWorkbook.Path & "\Source.xls"
  sSheet = "Sheet1"
  sAddr = "H1:H10"
  Sheet1.ComboBox1.List() = GetData(sFile, sSheet, sAddr)
End Sub
Sau khi chạy code, hãy bấm vào ComboBox xem thử
------------------------------------
Ưu điểm và nhược điểm:
- Ưu điểm của phương pháp dùng macro 4 này là code đơn giản, lại hoàn toàn không mở file tí nào (ngay cả ADO, tuy không thấy mở file nhưng thực chất nó cũng mở ngầm)
- Với ADO hoặc phương thức mở file trực tiếp, dù không biết tên sheet thì ít nhất ta cũng lấy được dữ liệu tại sheet đầu tiên
- Với phương pháp dùng Macro 4, bắt buộc phải biết trước tên sheet
- Còn ưu điểm hay nhược điểm gì nữa.. chúng ta cùng nghiên cứu thêm nhé
------------------------------------
Hãy tham khảo file đính kèm và cảm nhận nhé! Đơn giản không nào?
------------------------------------
Lưu ý quan trọng: Tại file về, phải giải nén ra rồi hẳn chạy, nếu không code chẳng hoạt động đâu nha
Trường hợp em có thêm một file nguồn tên Source2.xls có cấu trúc giống như file nguồn Source.xls
bây giờ em muốn copy dữ liệu từ file nguồn Source2.xls vào dòng tiếp theo của dữ liệu đã có trên sheet1 của file đích Main thì làm thế nào ạ.
Cảm ơn các bác.
 

nhattinh92

Thành viên mới
Tham gia ngày
11 Tháng tám 2018
Bài viết
1
Được thích
0
Điểm
13
Tuổi
34
Loại bài toán này đã từng được nói rất nhiều lần trên diễn đàn rồi. Hầu hết người ta dùng 2 cách:
Cách 1: Mở file để lấy dữ liệu rồi đóng file lại
Cách 2: Dùng ADO (không thấy mở file nhưng vẫn có mở ngầm)
Hôm nay xin giới thiệu với bạn 1 cách cực kỳ đơn giản (tự các bạn xây dựng). Bẳng cách dùng Macro 4, các bạn sẽ thấy giải thuật đơn giản đến không ngờ
Tất cả bắt đầu bằng những thí nghiệm sau đây:
- Giả sử ta có file Source.xls và file Main.xls nằm cùng 1 thư mục
- File Source.xls là file chứa nguồn dữ liệu
- Ta mở 2 file cùng lúc. Tại file Main, sheet1, cell A1, tôi gõ dấu = , xong tôi dời con trỏ sang file Source.xls rồi nhấp chọn cell A1
- Sau khi thực hiện xong ta được công thức =[Source.xls]Sheet1!$A$1
- Đóng file Source.xls, ta thấy công thức tại cell A1 của file Main.xls đã biến đổi, có thêm đường dẩn tuyệt đối... đại khái thế này
PHP:
='C:\Documents and Settings\NHAV\Desktop\GetData_Test\[Source.xls]Sheet1'!$A$1
- Giở ta bật chức năng record macro lên, chọn cell A1, bấm F2Enter... xong, tắt record macro và Alt + F11 để xem code, ta sẽ thấy code có dạng thế này:
PHP:
Sub Macro1()
'
' Macro recorded 17/8/2010 by Anh Tu?n
'
'
    Range("A1").Select
    ActiveCell.FormulaR1C1 = _
        "='C:\Documents and Settings\NHAV\Desktop\GetData_Test\[Source.xls]Sheet1'!R1C1"
    Range("A2").Select
End Sub
- Chỉnh sửa code lại 1 tí:
PHP:
Sub Macro1()
  Range("A1") = "='C:\Documents and Settings\NHAV\Desktop\GetData_Test\[Source.xls]Sheet1'!R1C1"
End Sub
- Code này làm công việc gán công thức liên kết đến file Source.xls vào cell A1 của file Main.xls
- Để chuyển công thức thành giá trị, ta có 2 cách
Cách 1:
PHP:
Sub Macro1()
  With Range("A1")
    .Value = "='C:\Documents and Settings\NHAV\Desktop\GetData_Test\[Source.xls]Sheet1'!R1C1"
    .Value = .Value
  End With
End Sub
Cách 2:
PHP:
Sub Macro1()
  Range("A1") = ExecuteExcel4Macro("'C:\Documents and Settings\NHAV\Desktop\GetData_Test\[Source.xls]Sheet1'!R1C1")
End Sub
- Và cách 2 này chính là phương pháp dùng macro 4 để lấy dữ liệu ở file đang đóng
----------------------------------------------------------

- Hãy nghiên cứu chuổi "'C:\Documents and Settings\NHAV\Desktop\GetData_Test\[Source.xls]Sheet1'!R1C1"
Ta thấy nó có cú pháp thế này:
"'" & đường dẩn & "[" Tên file & "]" & Tên sheet & "'!" & địa chỉ cell
- Vậy hãy xây dựng 1 code dựa trên phương pháp lấy dữ liệu này nhé
PHP:
Function GetData(sFile As String, sSheet As String, sAddr As String)
  Dim pLink As String, iR As Long, iC As Long, Arr
  If Len(Dir(sFile)) Then
    Arr = Range(sAddr)
    pLink = "'" & Replace(sFile, Dir(sFile), "[" & Dir(sFile) & "]") & sSheet & "'!"
    For iR = 1 To Range(sAddr).Rows.Count
      For iC = 1 To Range(sAddr).Columns.Count
        Arr(iR, iC) = ExecuteExcel4Macro(pLink & Range(sAddr).Cells(iR, iC).Address(, , 2))
      Next iC
    Next iR
    GetData = Arr
  End If
End Function
- Hàm đã có, giờ để lấy dữ liệu vùng A1:D12 tại sheet1 của file Source.xls, ta viết thêm code này:
PHP:
Sub Test()
  Dim sFile As String, sSheet As String, sAddr As String
  sFile = ThisWorkbook.Path & "\Source.xls"
  sSheet = "Sheet1"
  sAddr = "A1:D100"
  Range("A1:D12") = GetData(sFile, sSheet, sAddr)
End Sub
-----------------------------
Ứng dụng mở rộng: Nạp list cho ComboBox, với dữ liệu được lấy từ file đang đóng
- Giả sử ta có sẳn 1 ComboBox, tên ComboBox1
- Dữ liệu cần lấy nằm ở vùng H1:H10 của sheet1, file Source.xls
- Ta viết code sau:
PHP:
Sub AddList()
  Dim sFile As String, sSheet As String, sAddr As String
  sFile = ThisWorkbook.Path & "\Source.xls"
  sSheet = "Sheet1"
  sAddr = "H1:H10"
  Sheet1.ComboBox1.List() = GetData(sFile, sSheet, sAddr)
End Sub
Sau khi chạy code, hãy bấm vào ComboBox xem thử
------------------------------------
Ưu điểm và nhược điểm:
- Ưu điểm của phương pháp dùng macro 4 này là code đơn giản, lại hoàn toàn không mở file tí nào (ngay cả ADO, tuy không thấy mở file nhưng thực chất nó cũng mở ngầm)
- Với ADO hoặc phương thức mở file trực tiếp, dù không biết tên sheet thì ít nhất ta cũng lấy được dữ liệu tại sheet đầu tiên
- Với phương pháp dùng Macro 4, bắt buộc phải biết trước tên sheet
- Còn ưu điểm hay nhược điểm gì nữa.. chúng ta cùng nghiên cứu thêm nhé
------------------------------------
Hãy tham khảo file đính kèm và cảm nhận nhé! Đơn giản không nào?
------------------------------------
Lưu ý quan trọng: Tại file về, phải giải nén ra rồi hẳn chạy, nếu không code chẳng hoạt động đâu nha
Nếu muốn lấy dữ liệu của từng cột được chọn bên file nguồn thì thế nào bạn
 

mykoloda

Thành viên chính thức
Tham gia ngày
7 Tháng tám 2017
Bài viết
57
Được thích
3
Điểm
170
Tuổi
25
Đối với trường hợp lấy dữ liệu từ Workbook đang đóng, tôi nghĩ nếu đưa vào mảng sẽ chậm hơn so với cách đưa trực tiếp
Các code ở trên là dùng mảng đấy thôi!
Còn đây là cách không dùng mảng và vòng lập
PHP:
Sub GetData(sFile As String, sSheet As String, sAddr As String, Target As Range)
  Dim pLink As String
  If Len(Dir(sFile)) Then
    pLink = "'" & Replace(sFile, Dir(sFile), "[" & Dir(sFile) & "]") & sSheet & "'!"
    With Range(sAddr)
      With Target.Resize(.Rows.Count, .Columns.Count)
        .FormulaArray = "=" & pLink & sAddr
        .Value = .Value
      End With
    End With
  End If
End Sub
PHP:
Sub Test()
  Dim sFile As String, sSheet As String, sAddr As String
  sFile = ThisWorkbook.Path & "\Source.xls"
  sSheet = "Sheet1"
  sAddr = "A1:C10000"
  GetData sFile, sSheet, sAddr, Range("A1")
End Sub
Cách này cho tốc độ nhanh hơn, tuy nhiên vẫn có giới hạn (giới hạn bao nhiêu tôi chưa biết) ---> Nếu tăng vùng dữ liệu cần lấy (chẳng hạn A1:C60000) thì code sẽ báo lỗi
Còn việc tăng dung lượng gì đó thì... có sao đâu ---> Sao khi xong việc, bạn xóa dữ liệu đi là xong chứ gì!
Đương nhiên chỉ có cách dùng ADO là hầu như không bị giới hạn gì cả nhưng ác cái là code rất khó nhớ
Làm sao để chỉnh những giá trị rỗng sẽ trả về rỗng chứ không trả về 0 bác ơi
 

Chen Ming

Thành viên mới
Tham gia ngày
17 Tháng một 2019
Bài viết
6
Được thích
0
Điểm
13
Tuổi
55
Loại bài toán này đã từng được nói rất nhiều lần trên diễn đàn rồi. Hầu hết người ta dùng 2 cách:
Cách 1: Mở file để lấy dữ liệu rồi đóng file lại
Cách 2: Dùng ADO (không thấy mở file nhưng vẫn có mở ngầm)
Hôm nay xin giới thiệu với bạn 1 cách cực kỳ đơn giản (tự các bạn xây dựng). Bẳng cách dùng Macro 4, các bạn sẽ thấy giải thuật đơn giản đến không ngờ
Tất cả bắt đầu bằng những thí nghiệm sau đây:
- Giả sử ta có file Source.xls và file Main.xls nằm cùng 1 thư mục
- File Source.xls là file chứa nguồn dữ liệu
- Ta mở 2 file cùng lúc. Tại file Main, sheet1, cell A1, tôi gõ dấu = , xong tôi dời con trỏ sang file Source.xls rồi nhấp chọn cell A1
- Sau khi thực hiện xong ta được công thức =[Source.xls]Sheet1!$A$1
- Đóng file Source.xls, ta thấy công thức tại cell A1 của file Main.xls đã biến đổi, có thêm đường dẩn tuyệt đối... đại khái thế này
PHP:
='C:\Documents and Settings\NHAV\Desktop\GetData_Test\[Source.xls]Sheet1'!$A$1
- Giở ta bật chức năng record macro lên, chọn cell A1, bấm F2Enter... xong, tắt record macro và Alt + F11 để xem code, ta sẽ thấy code có dạng thế này:
PHP:
Sub Macro1()
'
' Macro recorded 17/8/2010 by Anh Tu?n
''
    Range("A1").Select
    ActiveCell.FormulaR1C1 = _
        "='C:\Documents and Settings\NHAV\Desktop\GetData_Test\[Source.xls]Sheet1'!R1C1"
    Range("A2").Select
End Sub
- Chỉnh sửa code lại 1 tí:
PHP:
Sub Macro1()
  Range("A1") = "='C:\Documents and Settings\NHAV\Desktop\GetData_Test\[Source.xls]Sheet1'!R1C1"
End Sub
- Code này làm công việc gán công thức liên kết đến file Source.xls vào cell A1 của file Main.xls
- Để chuyển công thức thành giá trị, ta có 2 cách
Cách 1:
PHP:
Sub Macro1()
  With Range("A1")
    .Value = "='C:\Documents and Settings\NHAV\Desktop\GetData_Test\[Source.xls]Sheet1'!R1C1"
    .Value = .Value
  End With
End Sub
Cách 2:
PHP:
Sub Macro1()
  Range("A1") = ExecuteExcel4Macro("'C:\Documents and Settings\NHAV\Desktop\GetData_Test\[Source.xls]Sheet1'!R1C1")
End Sub
- Và cách 2 này chính là phương pháp dùng macro 4 để lấy dữ liệu ở file đang đóng
----------------------------------------------------------

- Hãy nghiên cứu chuổi "'C:\Documents and Settings\NHAV\Desktop\GetData_Test\[Source.xls]Sheet1'!R1C1"
Ta thấy nó có cú pháp thế này:
"'" & đường dẩn & "[" Tên file & "]" & Tên sheet & "'!" & địa chỉ cell
- Vậy hãy xây dựng 1 code dựa trên phương pháp lấy dữ liệu này nhé
PHP:
Function GetData(sFile As String, sSheet As String, sAddr As String)
  Dim pLink As String, iR As Long, iC As Long, Arr
  If Len(Dir(sFile)) Then
    Arr = Range(sAddr)
    pLink = "'" & Replace(sFile, Dir(sFile), "[" & Dir(sFile) & "]") & sSheet & "'!"
    For iR = 1 To Range(sAddr).Rows.Count
      For iC = 1 To Range(sAddr).Columns.Count
        Arr(iR, iC) = ExecuteExcel4Macro(pLink & Range(sAddr).Cells(iR, iC).Address(, , 2))
      Next iC
    Next iR
    GetData = Arr
  End If
End Function
- Hàm đã có, giờ để lấy dữ liệu vùng A1:D12 tại sheet1 của file Source.xls, ta viết thêm code này:
PHP:
Sub Test()
  Dim sFile As String, sSheet As String, sAddr As String
  sFile = ThisWorkbook.Path & "\Source.xls"
  sSheet = "Sheet1"
  sAddr = "A1:D100"
  Range("A1:D12") = GetData(sFile, sSheet, sAddr)
End Sub
-----------------------------
Ứng dụng mở rộng: Nạp list cho ComboBox, với dữ liệu được lấy từ file đang đóng
- Giả sử ta có sẳn 1 ComboBox, tên ComboBox1
- Dữ liệu cần lấy nằm ở vùng H1:H10 của sheet1, file Source.xls
- Ta viết code sau:
PHP:
Sub AddList()
  Dim sFile As String, sSheet As String, sAddr As String
  sFile = ThisWorkbook.Path & "\Source.xls"
  sSheet = "Sheet1"
  sAddr = "H1:H10"
  Sheet1.ComboBox1.List() = GetData(sFile, sSheet, sAddr)
End Sub
Sau khi chạy code, hãy bấm vào ComboBox xem thử
------------------------------------
Ưu điểm và nhược điểm:
- Ưu điểm của phương pháp dùng macro 4 này là code đơn giản, lại hoàn toàn không mở file tí nào (ngay cả ADO, tuy không thấy mở file nhưng thực chất nó cũng mở ngầm)
- Với ADO hoặc phương thức mở file trực tiếp, dù không biết tên sheet thì ít nhất ta cũng lấy được dữ liệu tại sheet đầu tiên
- Với phương pháp dùng Macro 4, bắt buộc phải biết trước tên sheet
- Còn ưu điểm hay nhược điểm gì nữa.. chúng ta cùng nghiên cứu thêm nhé
------------------------------------
Hãy tham khảo file đính kèm và cảm nhận nhé! Đơn giản không nào?
------------------------------------
Lưu ý quan trọng: Tại file về, phải giải nén ra rồi hẳn chạy, nếu không code chẳng hoạt động đâu nha
Mình muốn dùng Macro 4 để copy toàn bộ nội dung (Paste all) của 1 ô (ví dụ từ ô A1 của file đang đóng sang ô A1 của file đang mở) thì câu lệnh sẽ như thế nào ?
 

A Đặng

Thành viên mới
Tham gia ngày
18 Tháng mười hai 2018
Bài viết
33
Được thích
1
Điểm
15
Nơi ở
Thủ Dầu Một, Bình Dương
Dear anh/chị trong topic !
Cho em hỏi có phải ADO chỉ giới hạn được số cột là 255 không.? Vì em test thử với dữ liệu khoảng 4000 cột thì nó chỉ lấy được dữ liệu tới cột 255.
Kiến thức còn mập mờ mong anh/chị giúp đỡ. Cám ơn
 
Tham gia ngày
14 Tháng chín 2012
Bài viết
310
Được thích
68
Điểm
395
Nơi ở
HNM
Bài đã được tự động gộp:

PHP:
Sub GetData(sFile As String, sSheet As String, sAddr As String, Target As Range)
  Dim pLink As String
  If Len(Dir(sFile)) Then
    pLink = "'" & Replace(sFile, Dir(sFile), "[" & Dir(sFile) & "]") & sSheet & "'!"
    With Range(sAddr)
      With Target.Resize(.Rows.Count, .Columns.Count)
        .FormulaArray = "=" & pLink & sAddr
        .Value = .Value
      End With
    End With
  End If
End Sub
PHP:
Sub Test()
  Dim sFile As String, sSheet As String, sAddr As String
  sFile = ThisWorkbook.Path & "\Source.xls"
  sSheet = "Sheet1"
  sAddr = "A1:C10000"
  GetData sFile, sSheet, sAddr, Range("A1")
End Sub
Anh cho em hỏi thêm. Như Code này của anh là copy dữ liệu từ A1:C10000 ở sheet1 file Source, giờ em không muốn copy mảng đó em muốn làm thêm 1 vài thao tác vào cột D (xử lý dữ liệu luôn trên file đó có được không)? Và chỉ copy cột D thôi hoặc em muốn copy từ 2 file khác nhau là Source1 và Source2 thì cần bổ xung hay chỉnh sửa thế nào ạ. Ví dụ: Em muốn gán 1 lệnh đếm hay 1 lệch tìm kiếm chẳng hạn. Cảm ơn ạ.
 
Lần chỉnh sửa cuối:
Top Bottom