Hỏi code lấy link tự động

Liên hệ QC

feelingyes

Thành viên tiêu biểu
Tham gia
24/9/07
Bài viết
459
Được thích
395
Nghề nghiệp
Economic
Tiêu đề em đặt có thể không rõ ràng lắm mong anh chị thông cảm
File của em có 1 sheet index và 71 sheets đánh số
Tên đồ ăn từ sheet 1 đến sheet 71 đều nằm ở vị trí ô B3

Câu hỏi của em như sau
1. Tại sheet Index cột B, bắt đầu từ dòng 2 (B2) em muốn link tới tên đồ ăn tại B3 sheet 1,..............và cứ tương tự cho đến sheet 71
(Em muốn hỏi code để làm việc này, vì nếu làm bằng tay thì rất lâu)
2. Có cách nào em tạo nhanh (copy nhanh một số lượng sheet biết trước và tên sheet nằm theo thứ tự không?) Ví dụ như trong bài em muốn tạo một lúc 71 sheets và đánh số thứ tự từ 1 -> 71

Anh chị xem file và rất mong được chỉ giáo
 

File đính kèm

Tiêu đề em đặt có thể không rõ ràng lắm mong anh chị thông cảm
File của em có 1 sheet index và 71 sheets đánh số
Tên đồ ăn từ sheet 1 đến sheet 71 đều nằm ở vị trí ô B3

Câu hỏi của em như sau
1. Tại sheet Index cột B, bắt đầu từ dòng 2 (B2) em muốn link tới tên đồ ăn tại B3 sheet 1,..............và cứ tương tự cho đến sheet 71
(Em muốn hỏi code để làm việc này, vì nếu làm bằng tay thì rất lâu)
2. Có cách nào em tạo nhanh (copy nhanh một số lượng sheet biết trước và tên sheet nằm theo thứ tự không?) Ví dụ như trong bài em muốn tạo một lúc 71 sheets và đánh số thứ tự từ 1 -> 71

Chào bạn,
Nếu cách đáng số sheets của bạn như vậy thì đơn giản không khó đâu:
Tạo một nút lệnh rồi gán thủ tục này vào nhé:
PHP:
Sub FillValueSheets()
For i = 1 to 72   'Cái này bạn có thể thay bằng tham số tùy chọn nhé. Mình làm vậy cho nhanh.
sheets(i).range("B3").value=cells(i+1,2)
next i
End sub
 
Lần chỉnh sửa cuối:
Upvote 0
2. Có cách nào em tạo nhanh (copy nhanh một số lượng sheet biết trước và tên sheet nằm theo thứ tự không?) Ví dụ như trong bài em muốn tạo một lúc 71 sheets và đánh số thứ tự từ 1 -> 71


Bạn để ý khi thêm một sheet thì activesheet lúc nào cũng là sheet mới tạo, suy ra ta có thủ tục sau:

PHP:
Sub addsheets()
For i = 1 To 71
Sheets.Add
ActiveSheet.Name = i
Next i

End Sub
 
Lần chỉnh sửa cuối:
Upvote 0
1. Tại sheet Index cột B, bắt đầu từ dòng 2 (B2) em muốn link tới tên đồ ăn tại B3 sheet 1,..............và cứ tương tự cho đến sheet 71
(Em muốn hỏi code để làm việc này, vì nếu làm bằng tay thì rất lâu)

Bạn xem đoạn code mình viết xem, có thể phải sửa lại chút đỉnh:
PHP:
Sub AddHyperlink()
For i = 1 To 71
Range("a" & i + 1).Select
    ActiveSheet.Hyperlinks.Add Anchor:=Selection, Address:="", SubAddress:= _
        "" '" & Sheets(i).Name & "'" & "!" & "A1"&""", TextToDisplay:="""& Sheets(i).Name & """
Next i

End Sub

</b>
 
Upvote 0
Nhìn kỹ file tôi cũng chưa hình dung dc đâu là dử liệu nhập và đâu là cái ta sẽ xuất... Nếu nói INDEX là nơi nhập liệu vậy sao nó lại có công thức?
Hiểu rõ hơn về bài toán này thì tôi nghĩ rất có thể giãi quyết dc bằng những hàm thông thường, chẳng hạn như hàm HYPERLINK và name động!
ANH TUẤN
 
Upvote 0
Trả lời: code=công thức lấy link tự động

Tiêu đề em đặt có thể không rõ ràng lắm mong anh chị thông cảm
File của em có 1 sheet index và 71 sheets đánh số
Tên đồ ăn từ sheet 1 đến sheet 71 đều nằm ở vị trí ô B3

Câu hỏi của em như sau
1. Tại sheet Index cột B, bắt đầu từ dòng 2 (B2) em muốn link tới tên đồ ăn tại B3 sheet 1,..............và cứ tương tự cho đến sheet 71
(Em muốn hỏi code để làm việc này, vì nếu làm bằng tay thì rất lâu)
2. Có cách nào em tạo nhanh (copy nhanh một số lượng sheet biết trước và tên sheet nằm theo thứ tự không?) Ví dụ như trong bài em muốn tạo một lúc 71 sheets và đánh số thứ tự từ 1 -> 71

Anh chị xem file và rất mong được chỉ giáo
Xem kỹ file thì ý của bạn là: Tại sheet Index cột B, bắt đầu từ dòng 2 (B2) em muốn link tới tên đồ ăn tại B3 Hiện tên đồ ăn tại B3 của các sheet từ sheet:1-71 đúng không?

Nếu đúng như vậy thì: XEM FILE ĐÍNH KÈM (có sử dụng cách của anhtuan1066) dùng HyperLink và Name động
Có thể thay đổi tên sheet, thêm sheet, xóa sheet, thay đổi tùy ý dữ liệu tại ô B3 của các sheet:1->... mà không ảnh hưởng gì đến Hyperlink
 

File đính kèm

Lần chỉnh sửa cuối:
Upvote 0
Cám ơn mọi người và boyxin
Cách làm của boyxin đúng với ý của mình
Em rất vui khi được các anh chị chỉ thêm ít công thức sau
1. Indirect(ref_text, a1) => công thức này em cũng hay dùng nhưng ít khi thêm a1 vào
---> vậy a1 em nên hiểu như nào ví dụ a1 =1
2. Trong công thức address ít khi em dùng công thức đầy đủ như
Address(row_num, column_num,[abc_num],[a1], sheettext)
em chưa hiểu [abc_num] và [a1]

3. =GET.WORKBOOK(ROW(INDIRECT("A1")))
Công thức này em chưa hiểu

4.=GET.WORKBOOK(4+NOW()*0)
Công thức này em chưa hiểu

5. =INDIRECT(INDIRECT("A"&CELL("Row"))&"!F1")
công thức lấy link này em cũng chưa hiểu

6.=INDIRECT(ADDRESS(3,2,,,Index!IV8),1)
công thức link sang cell b3 này em chưa hiểu

7.=GET.WORKBOOK(ROW(INDIRECT("A16")))

Em xin lỗi vì hỏi hơi nhiều, nhưng công thức đẳng cấp trên quá nên em không hiểu


em xin cám ơn các anh chị chỉ giúp
 
Upvote 0
Dể mà... mấy cái mà bạn nói chưa hiểu ấy (GET.WORKBOOK(4+NOW()*0)....GET.WORKBOOK(ROW(INDIRECT("A16")))) thật ra chỉ là "biến tấu"... Nếu cứ viết theo nguyên mẫu thì nó sẽ ko tự cập nhật dc khi có thay đổi...
NOW() và INDIRECT() dùng trong trường hợp này với mục đích giúp nó cập nhật tự động (hoặc cập nhật khi bấm F9)...
Vậy thôi! Bạn cứ thử viết theo nguyên mẫu rồi thí nghiệm sẽ biết liền...
NOW()*0 đằng nào cũng =0... nhưng thêm vào vậy để "ép" nó phải tính theo từng giây 1... he... he...
ROW(INDIRECT("A16")) đằng nào cũng = 16 nhưng bạn ko nhớ rằng INDIRECT liên quan đến liên kết động sao? Để ý thêm 1 chuyện, nếu trong file bạn có dùng hàm INDIRECT, bạn mở file lên, ko làm gì và đóng lại nó cũng hỏi bạn "Do you want to save... "
ANH TUẤN
 
Lần chỉnh sửa cuối:
Upvote 0
He he
em hiểu 10%
anh nói giúp em vụ Get.workbook
nó chỉ dùng được trong name hay dùng được ngay cả trong cell
 
Upvote 0
He he
em hiểu 10%
anh nói giúp em vụ Get.workbook
nó chỉ dùng được trong name hay dùng được ngay cả trong cell
Nó là các hàm Marco 4... Có rất nhiều ứng dụng hay với các hàm này, tuy nhiên ta chỉ có thể dùng nó trong name rồi lấy ra xài chứ ko gõ trực tiếp trên bảng tính dc...
Bạn xem thêm tại đây:
http://www.giaiphapexcel.com/forum/showthread.php?t=202
Có file hướng dẩn ở bài #9 đấy!

Ah... bạn chú ý thêm kẻo bị rối khi nhìn 1 đóng name trong file boyxin nhé... hi.. hi...
1> Nguyên bộ 4 name: AllSh, NoSs, ShN, Wb là dùng để tạo ra tên sheet trong cột A... Kết hợp với công thức trong cột A nữa sẽ tương đương với code VBA mà bạn đang dùng
2> Còn lại thì bạn chỉ cần lưu tâm đến 3 name nữa: Index, Link và Linkb3.. đây mới chính là công thức chủ lực để tạo LINK từ nơi này sang nơi khác (rà chuột vào cell chứa link sẽ thấy 1 tooltip hiện ra, nhìn vào sẽ biết dc đó là link nào, ăn với name nào trong Define name)
ANH TUẤN
 
Lần chỉnh sửa cuối:
Upvote 0
Làm sao ta có thể có được chữ back to index từ sheet 1 đến 71 tại cell F1

trong công thức
=INDIRECT(INDIRECT("A"&CELL("Row"))&"!F1")
em thử cắt INDIRECT("A"&CELL("Row") thì kết quả bằng 1
còn cả công thức trên có ý nghĩa gì vậy anh?

tks
 
Upvote 0
Vì cell("row") trả về là chỉ số dòng tại ActiveCell, vậy nếu bạn đang ở dòng thứ 5 thì "A"&CELL("Row") = A5 , đúng ko?
INDIRECT("A"&CELL("Row") ở thời điểm này sẽ = giá trị của A5, tức là tên sheet tại dòng hiện hành (tức = 5 là sheet có tên 5)
=INDIRECT(INDIRECT("A"&CELL("Row"))&"!F1") = Tên sheet + dấu ! + F1 tương đương với link tới sheet có tên tại cột A và cell F1 (đúng ngay chử INDEX)
Còn tạo 71 link Back to... càng dể... bạn tạo 1 cái rồi copy, paste vào 70 sheet còn lại là xong (1 nhát)
 
Upvote 0
Từ sheet 1 đến sheet 71 tại ô B31 là tỷ giá USD
hiện tại trong file là 15,960
-bây giờ em muốn viết code chuyển thành 16200 thì em dùng vòng lặp như thế nào

Tks đại ca
 
Upvote 0
Từ sheet 1 đến sheet 71 tại ô B31 là tỷ giá USD
hiện tại trong file là 15,960
-bây giờ em muốn viết code chuyển thành 16200 thì em dùng vòng lặp như thế nào

Tks đại ca

Bạn tham khảo đoạn code mình viết ở bài #2 đấy, Tên thủ tục là FillValueSheets()

Sub FillValueSheets()
For
i = 1 to 71 Cái này bạn có thể thay bằng tham số tùy chọn nhé. Mình làm vậy cho nhanh.
sheets(i).range("B31").value=format("16200","#,###,###")
next i
End sub
 
Upvote 0
Ca_dafi ơi code anh chạy ngon lắm

Trong lúc em chờ mọi người em cũng lọ mọ
Dim i As Worksheets
For i = 1 To 71
Sheets(i).Range("b31").Value = 16200
Next i
Dim i as worksheets có sai không anh?
còn trong code của anh thì cấu trúc format để làm gì vậy?
có phải chuyển thành định dạng số không?

cám ơn anh
 
Lần chỉnh sửa cuối:
Upvote 0
Tôi ko hiểu tại sao vụ này lại phải dùng code?
Nếu vị trí cần sửa đều nằm ở B31 sao bạn ko chọn cả 71 sheet 1 lần rồi gõ vào 16200 là xong chứ gì
Ah... còn nữa:
For 1 = 1 to 71 chưa chắc là đúng đâu nha! Vì sheet Index chính là Sheet1 đấy!
ANH TUẤN
 
Lần chỉnh sửa cuối:
Upvote 0
Ca_dafi ơi code anh chạy ngon lắm

Trong lúc em chờ mọi người em cũng lọ mọ
Dim i as worksheets có sai không anh?
còn trong code của anh thì cấu trúc format để làm gì vậy?
có phải chuyển thành định dạng số không?

cám ơn anh

Nếu bạn khai báo i là worksheets thì làm sao gán giá trị cho i chạy từ 1 -->71 vì worksheets là object mà. trong khi 1,2,3,4....71 là dạng số.
Trong những trường hợp này dùng for thì mình không cần khai báo.

Format để định dạng lại kiểu số đúng như bạn nói, cái này là phụ thôi, không quan trọng lắm.
 
Upvote 0
For 1 = 1 to 71 chưa chắc là đúng đâu nha! Vì sheet Index chính là Sheet1 đấy!

AnhTuan1006 nói đúng đó, làm xong ta lại quay lại sửa hehe...

Nếu vị trí cần sửa đều nằm ở B31 sao bạn ko chọn cả 71 sheet 1 lần rồi gõ vào 16200 là xong chứ gì
AnhTuan1006 có thể nói rõ hơn được không
ý anh là select 71 sheet một lúc sau đó gõ 16200, enter?
-Nhưng select 71 sheet thì lấu lắm anh nhỉ?
anh bày cách không dùng code cho em với!

tks
 
Lần chỉnh sửa cuối:
Upvote 0
AnhTuan1006 có thể nói rõ hơn được không
ý anh là select 71 sheet một lúc sau đó gõ 16200, enter?
-Nhưng select 71 sheet thì lấu lắm anh nhỉ?
anh bày cách không dùng code cho em với!

tks
Sao mà lâu? Này nhé, chọn sheet 1, kéo mũi tên trên sheet tab (mũi tên ngoài cùng) rồi bấm giữa phím Shift, chọn sheet 71... tiếp theo chọn cell B31 và gõ vào 16200 là xong
Chưa dc 15 giây!
Còn code trên bạn xem kỹ lại nhé! Coi chừng cái sheet INDEX của bạn tại cell B31 cũng bi sửa thành 16200 rồi đấy... hi... hi...
ANH TUẤN
 
Upvote 0
Ah... còn nữa:
For 1 = 1 to 71 chưa chắc là đúng đâu nha! Vì sheet Index chính là Sheet1 đấy!
ANH TUẤN
Hehehe, vì thế nên em mới mở ngoặc một câu là ('Cái này bạn có thể thay bằng tham số tùy chọn nhé, mình làm vậy cho nhanh mà. Hehe...


Tôi ko hiểu tại sao vụ này lại phải dùng code?
Nếu vị trí cần sửa đều nằm ở B31 sao bạn ko chọn cả 71 sheet 1 lần rồi gõ vào 16200 là xong chứ gì.

Đúng là như thế, nhưng anh ANHTUAN thông cảm cho, em nghĩ em cũng như bạn feelingyes đang học viết code mà, nên phản xạ cứ đụng cái gì cũng muốn viết code (mục đích là tập làm quen với code thôi) giống như học tiếng Anh vậy.

Biết đâu tập viết code cho bài toán nhỏ sau này áp dụng được trong bài toán lớn hơn....Hihihi

Cảm ơn anh ANHTUAN.
 
Upvote 0
Web KT

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

Back
Top Bottom