Xin giúp về copy và paste link

Liên hệ QC

thedeath2078

Thành viên mới
Tham gia
14/3/08
Bài viết
38
Được thích
2
Chào các anh chị.

Em đang tập về VBA và có tình huống sau nhưng chưa giải quyết được

Cụ thể như sau:

Em có 1 file tổng để quản lý các file khác. File này nằm ở 1 folder, trong ví dụ này em save ở Folder 1

Folder 2 là để chứa các file khác

File tổng dùng để hyperlink đến các file khác. Khi cần mở các file khác thì chỉ cần chọn vào hyperlink, ở đây là chọn từ MSNV

Mục đích của em là sau khi mở các file khác lên, sau đó copy 1 vùng dữ liệu từ file đó và paste link ở file tổng

Trong ví dụ này em mở file tên NguyenVanA == > chọn ô từ C4:Z4 rồi copy sau đó quay lại file_tong chọn ô D4 và paste link

Em muốn thực hiện công việc này bằng VBA và có record macro lại để xem cách làm. Đoạn marco copy như sau

"Sub Macro1()

Range("C4:Z4").Select
Selection.Copy
Windows("File_Tong.xlsx").Activate
Range("D4").Select
ActiveSheet.Paste Link:=True
End Sub"

Giờ em muốn thay vì chọn ô D4 để paste link thì nó sẽ xuất hiện một hộp thoại để mình chọn ô và sau đó paste link.

Tìm hiểu trên các page về VBA thì em dùng code "set rng=Application.InputBox("Chon o de paste link",Type:=8) thay cho phần Range("D4").Select ở đoạn code bên trên nhưng nó báo lổi

Không biết bị sai chổ nào, nhờ các anh chị trong GPE hỗ trợ dùm ạ!

Xin cảm ơn
 

File đính kèm

  • Vi du.zip
    37.8 KB · Đọc: 3
Chào các anh chị.

Em đang tập về VBA và có tình huống sau nhưng chưa giải quyết được

Cụ thể như sau:

Em có 1 file tổng để quản lý các file khác. File này nằm ở 1 folder, trong ví dụ này em save ở Folder 1

Folder 2 là để chứa các file khác

File tổng dùng để hyperlink đến các file khác. Khi cần mở các file khác thì chỉ cần chọn vào hyperlink, ở đây là chọn từ MSNV

Mục đích của em là sau khi mở các file khác lên, sau đó copy 1 vùng dữ liệu từ file đó và paste link ở file tổng

Trong ví dụ này em mở file tên NguyenVanA == > chọn ô từ C4:Z4 rồi copy sau đó quay lại file_tong chọn ô D4 và paste link

Em muốn thực hiện công việc này bằng VBA và có record macro lại để xem cách làm. Đoạn marco copy như sau

"Sub Macro1()

Range("C4:Z4").Select
Selection.Copy
Windows("File_Tong.xlsx").Activate
Range("D4").Select
ActiveSheet.Paste Link:=True
End Sub"

Giờ em muốn thay vì chọn ô D4 để paste link thì nó sẽ xuất hiện một hộp thoại để mình chọn ô và sau đó paste link.

Tìm hiểu trên các page về VBA thì em dùng code "set rng=Application.InputBox("Chon o de paste link",Type:=8) thay cho phần Range("D4").Select ở đoạn code bên trên nhưng nó báo lổi

Không biết bị sai chổ nào, nhờ các anh chị trong GPE hỗ trợ dùm ạ!

Xin cảm ơn
Bạn thử Code này xem
Mã:
Sub ImportData()
    Dim Master As Worksheet, wk As Workbook
    Dim strFolderPath As String, strFileName As String, I As Long
    Dim Arr As Variant, v as Long
Application.ScreenUpdating = False
I = 1
Set Master = ActiveWorkbook.Sheets("Sheet1")
On Error GoTo NoFile
Arr = Application.GetOpenFilename( _
        filefilter:="Excel Files (*.xls*),*.xlsx*", MultiSelect:=True)
For v = LBound(Arr) To UBound(Arr)
    strFileName = Arr(v)
    Set wk = Workbooks.Open(strFileName)
    Master.Range("A" & I + 3) = I
    wk.Sheets("Sheet1").Range("A4:Z4").Copy Master.Range("B" & I + 3)
    wk.Close , False
    Range("C" & I + 3).Hyperlinks.Add Anchor:=Range("C" & I + 3), Address:=Arr(v)
    I = I + 1
Next
With Master
    .Range("B4:AA" & .Range("A65535").End(xlUp).Row).Sort Key1:=.Range("C4")
End With
MsgBox "Qua trinh lay du lieu hoan thanh   "
NoFile:
Exit Sub
Application.ScreenUpdating = True
End Sub
 
Lần chỉnh sửa cuối:
Upvote 0
Bạn thử Code này xem
Mã:
Sub ImportData()
    Dim Master As Worksheet, wk As Workbook
    Dim strFolderPath As String, strFileName As String, I As Long
    Dim Arr As Variant, v as Long
Application.ScreenUpdating = False
I = 1
Set Master = ActiveWorkbook.Sheets("Sheet1")
On Error GoTo NoFile
Arr = Application.GetOpenFilename( _
        filefilter:="Excel Files (*.xls*),*.xlsx*", MultiSelect:=True)
For v = LBound(Arr) To UBound(Arr)
    strFileName = Arr(v)
    Set wk = Workbooks.Open(strFileName)
    Master.Range("A" & I + 3) = I
    wk.Sheets("Sheet1").Range("A4:Z4").Copy Master.Range("B" & I + 3)
    wk.Close , False
    Range("C" & I + 3).Hyperlinks.Add Anchor:=Range("C" & I + 3), Address:=Arr(v)
    I = I + 1
Next
With Master
    .Range("B4:AA" & .Range("A65535").End(xlUp).Row).Sort Key1:=.Range("C4")
End With
MsgBox "Qua trinh lay du lieu hoan thanh   "
NoFile:
Exit Sub
Application.ScreenUpdating = True
End Sub

Cảm ơn anh đã hỗ trợ.

Em add code vào rồi và nó chỉ thực thi đúng ở row 4 thôi anh ạ, các row khác không chạy được, và data paste vào chỉ là value, trong khi mục đích của tình huống này là Paste link để khi dữ liệu bên các file kia thay đổi thì trong file tổng sẽ tự động cập nhật

Có lẽ e diễn giải chưa đầy đủ ý nên sợ anh hiểu sai ý em và viết code

Ý em là khi copy data mà cụ thể là Range("C4:Z4") trong các file như NguyenVanA, TranVanB....sau đó sẽ select 1 cell cụ thể trong file tổng và paste link vào.

Như của NguyenVanA thì paste link vào chổ Nguyễn Văn A trong file tổng, TranVanB thì paste link vào chổ Trần Văn B trong file tổng....tiếp tục cho những người khác vì file tổng danh sách có thể dài ra.

Do vậy ý em là khi copy Range("C4:Z4") xong, mình sẽ chủ động chọn 1 cell trong file master để paste link vì file danh sách file tổng có thể sau này có thêm những người khác

Một lần nữa cảm ơn anh nhiều về sự hỗ trợ
Bài đã được tự động gộp:

À, em đã xem lại rồi, có phần multi select file.

Nhưng nếu được thì có thể paste link được ko anh thay vì paste value, vì e muốn khi data từ các file kia thay đổi thì file tổng sẽ tự cập nhật, ko phải chọn lại lần nữa.

Vì khi chọn multi thì nó sẽ thay đổi toàn bộ các file, chọn single file thì nó chỉ thực thi ở row 4. Giả sử e muốn cập nhật data ở row 5 thì chọn file lúc đó nó cũng chỉ thực thi ở row 4
 
Lần chỉnh sửa cuối:
Upvote 0
Cảm ơn anh đã hỗ trợ.

Em add code vào rồi và nó chỉ thực thi đúng ở row 4 thôi anh ạ, các row khác không chạy được, và data paste vào chỉ là value, trong khi mục đích của tình huống này là Paste link để khi dữ liệu bên các file kia thay đổi thì trong file tổng sẽ tự động cập nhật

Có lẽ e diễn giải chưa đầy đủ ý nên sợ anh hiểu sai ý em và viết code

Ý em là khi copy data mà cụ thể là Range("C4:Z4") trong các file như NguyenVanA, TranVanB....sau đó sẽ select 1 cell cụ thể trong file tổng và paste link vào.

Như của NguyenVanA thì paste link vào chổ Nguyễn Văn A trong file tổng, TranVanB thì paste link vào chổ Trần Văn B trong file tổng....tiếp tục cho những người khác vì file tổng danh sách có thể dài ra.

Do vậy ý em là khi copy Range("C4:Z4") xong, mình sẽ chủ động chọn 1 cell trong file master để paste link vì file danh sách file tổng có thể sau này có thêm những người khác

Một lần nữa cảm ơn anh nhiều về sự hỗ trợ
Bài đã được tự động gộp:

À, em đã xem lại rồi, có phần multi select file.

Nhưng nếu được thì có thể paste link được ko anh thay vì paste value, vì e muốn khi data từ các file kia thay đổi thì file tổng sẽ tự cập nhật, ko phải chọn lại lần nữa.

Vì khi chọn multi thì nó sẽ thay đổi toàn bộ các file, chọn single file thì nó chỉ thực thi ở row 4. Giả sử e muốn cập nhật data ở row 5 thì chọn file lúc đó nó cũng chỉ thực thi ở row 4
Bạn muốn Copy hết các file hay chỉ copy 1 File chỉ định
 
Upvote 0
Bạn muốn Copy hết các file hay chỉ copy 1 File chỉ định

Dạ chỉ 1 File chỉ định thôi ạ, rồi từ File chỉ định đó e sẽ áp dụng cho các file khác.

Ví dụ như với file NguyenVanA, e copy data và paste link vào Cell D4 trong file tổng đang mang tên là Nguyễn Văn A.

Rồi e áp dụng cho các Name khác, như TranVanB thì chọn Cell D5, PhamThiC thì chọn Cell D6... do vậy ban đầu e muốn là phần Cell này là mình tự chọn chứ ko phải gán cố định ở 1 Cell nào cả

Cảm ơn anh hỗ trợ
 
Upvote 0
Dạ chỉ 1 File chỉ định thôi ạ, rồi từ File chỉ định đó e sẽ áp dụng cho các file khác.

Ví dụ như với file NguyenVanA, e copy data và paste link vào Cell D4 trong file tổng đang mang tên là Nguyễn Văn A.

Rồi e áp dụng cho các Name khác, như TranVanB thì chọn Cell D5, PhamThiC thì chọn Cell D6... do vậy ban đầu e muốn là phần Cell này là mình tự chọn chứ ko phải gán cố định ở 1 Cell nào cả

Cảm ơn anh hỗ trợ
Bạn xem thử
Mã:
Sub ImportData()
    Dim Master As Worksheet, wk As Workbook, strFileName As String
    Dim sRng As Range, I As Long
Set Master = ActiveWorkbook.Sheets("Sheet1")
strFileName = Application.GetOpenFilename( _
        filefilter:="Excel Files (*.xls*),*.xlsx*", MultiSelect:=False)
Set sRng = Application.InputBox(Prompt:="Chon vung du lieu ", Title:="Chon o gan du lieu", Type:=8)
I = sRng.Row
Set wk = Workbooks.Open(strFileName)
wk.Sheets("Sheet1").Range("A4:Z4").Copy
With Master
    .Activate
    .Range("A" & I) = "=MAX(R3C1:R[-1]C)+1"
    .Range("B" & I).Select
    ActiveSheet.Paste Link:=True
    .Range("C" & I).Hyperlinks.Add Anchor:=.Range("C" & I), Address:=strFileName
End With
wk.Close , False
MsgBox "Qua trinh lay du lieu hoan thanh   "
Exit Sub
End Sub
 
Upvote 0
Bạn xem thử
Mã:
Sub ImportData()
    Dim Master As Worksheet, wk As Workbook, strFileName As String
    Dim sRng As Range, I As Long
Set Master = ActiveWorkbook.Sheets("Sheet1")
strFileName = Application.GetOpenFilename( _
        filefilter:="Excel Files (*.xls*),*.xlsx*", MultiSelect:=False)
Set sRng = Application.InputBox(Prompt:="chon vung du lieu ", Title:="Chon du lieu dau vao", Type:=8)
I = sRng.Row
Set wk = Workbooks.Open(strFileName)
wk.Sheets("Sheet1").Range("A4:Z4").Copy
With Master
    .Activate
    .Range("A" & I) = I
    .Range("B" & I).Select
    ActiveSheet.Paste Link:=True
    .Range("C" & I).Hyperlinks.Add Anchor:=.Range("C" & I), Address:=strFileName
End With
wk.Close , False
MsgBox "Qua trinh lay du lieu hoan thanh   "
Exit Sub
End Sub

Code này đúng ý em rồi anh ạ.

Một lần nữa cảm ơn anh rất nhiều vì đã hỗ trợ.

Chúc a ngày cuối tuần vui vẻ !
 
Upvote 0
Web KT

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

Back
Top Bottom