Code Đặt lại tên ảnh hàng loạt trong file Excel

Liên hệ QC

lenolim

Thành viên hoạt động
Tham gia
8/9/15
Bài viết
179
Được thích
19
Nhờ mọi người giúp đỡ theo yêu cầu trong file đính kèm.
Xin chân thành cảm ơn !
 

File đính kèm

  • Dat lai ten ANH hang loat.xlsx
    63.5 KB · Đọc: 31
Nhờ mọi người giúp đỡ theo yêu cầu trong file đính kèm.
Xin chân thành cảm ơn !
Góp ý cho bạn:
1/ Bạn muốn làm cái gì thì nên nêu rỏ ràng, cụ thể vấn đề cần chứ không nên đưa cái ảnh ngang xương như thế thì chả thành viên nào hiểu.
2/ Thông thường người ta chứa ảnh trong Folder nào đó, muốn thay tên ảnh hàng loạt thì người ta lấy tên File vào 1 cột nào đó trên sheet và thay tên ảnh ở cột kế bên.
3/ Cần có 1 sheet danh mục với mã hàng, tên hàng, mô tả hàng hóa (nếu cần), khi chọn 1 loại trong danh mục thì nó sẽ tự động gán hình vào.
 
Góp ý cho bạn:
1/ Bạn muốn làm cái gì thì nên nêu rỏ ràng, cụ thể vấn đề cần chứ không nên đưa cái ảnh ngang xương như thế thì chả thành viên nào hiểu.
2/ Thông thường người ta chứa ảnh trong Folder nào đó, muốn thay tên ảnh hàng loạt thì người ta lấy tên File vào 1 cột nào đó trên sheet và thay tên ảnh ở cột kế bên.
3/ Cần có 1 sheet danh mục với mã hàng, tên hàng, mô tả hàng hóa (nếu cần), khi chọn 1 loại trong danh mục thì nó sẽ tự động gán hình vào.

1. Vâng. Tôi xin được giải thích rõ hơn là: ở đây Ảnh đã được coppy vào trong file excel như vậy. Bố cục của dữ liệu chỉ có như vậy.
2. Mục đích là: Với việc tên ảnh đang có tên không theo thứ tự như thế:
Khi ta cần chèn thêm số dòng hoặc coppy thêm ảnh để vào 1 ô bất kỳ. Thì ta sẽ đặt lại tên ảnh cho trùng với con số ở dòng tương ứng, nhìn cho trực quan hơn.
3. Hay với yêu cầu như vậy. Thì tôi cần trình bày bố cục như thế nào cho mọi người dễ hiểu và dễ thực hiện.
4. Xin cảm ơn mọi người đã quan tâm.
 
Tôi không hiểu cái trực quan này, và cũng không hiểu sao nó lại quan trọng thế. Pinture 1 hay 2, 3, 4, 5 thì bạn cũng có nhìn thấy đâu? Chỉ khi bạn chọn thì mới nhìn thấy. Sao lại bắt buộc phải theo thứ tự? Mà nó làm bạn nóng mắt? Tại sao?

Nếu cần có text thì nên ghi tên ảnh, chú giải, tên sản phẩm ...

Nếu tôi nhìn không lầm thì còn thiếu trường hợp: có ảnh nhưng không có số. Giải quyết thế nào? Để nguyên, rút thăm hoặc lấy từ lô đề? :D
 
Lần chỉnh sửa cuối:
Tôi không hiểu cái trực quan này, và cũng không hiểu sao nó lại quan trọng thế. ...
Tại bác suy nghĩ khách quan cho nên không hiểu. Cứ thay đổi lối suy nghĩ của mình theo chủ quan thì sẽ thấy bất cứ cái gì mình muốn làm đều là trực quan tuốt.
 
Tôi không hiểu cái trực quan này, và cũng không hiểu sao nó lại quan trọng thế. Pinture 1 hay 2, 3, 4, 5 thì bạn cũng có nhìn thấy đâu? Chỉ khi bạn chọn thì mới nhìn thấy. Sao lại bắt buộc phải theo thứ tự? Mà nó làm bạn nóng mắt? Tại sao?

Nếu cần có text thì nên ghi tên ảnh, chú giải, tên sản phẩm ...

Nếu tôi nhìn không lầm thì còn thiếu trường hợp: có ảnh nhưng không có số. Giải quyết thế nào? Để nguyên, rút thăm hoặc lấy từ lô đề? :D

Đúng là xem yêu cầu thì có vẽ rắc rối. Xin được trả lời Anh những vấn đề mà anh đang thắc mắc:
1. Về chuyện Picture 1 hay 2, 3, ...... . Đúng là khi kích vào ảnh thì mới biết được tên của nó. Mục đích chính là đây. (Kiểm soát từng ảnh xem nó có trùng với con số ở ô tương ứng không)
2. Trường hợp: Có ảnh mà không có số thì không xảy ra (Vì ở cột C những ô có số thì ta mới coppy ảnh đặt vào)
Cảm ơn Anh đã quan tâm.
Trân trọng nhận được sự giúp đỡ từ anh !
 
Bạn vào Selection Pane ở mục Page Layout sẽ thấy toàn bộ Tên của Ảnh
(Vào Bố Trí Trang -> Ngăn lựa chọn)

Còn việc code để đạt được yêu cầu của bạn, quá nhiều giải thuật, nên tôi không thể giúp bạn.
 
Bạn vào Selection Pane ở mục Page Layout sẽ thấy toàn bộ Tên của Ảnh
(Vào Bố Trí Trang -> Ngăn lựa chọn)

Còn việc code để đạt được yêu cầu của bạn, quá nhiều giải thuật, nên tôi không thể giúp bạn.

Cảm ơn sự quan tâm của bạn.
Chúc vui vẻ và thành công.
 
2. Trường hợp: Có ảnh mà không có số thì không xảy ra (Vì ở cột C những ô có số thì ta mới coppy ảnh đặt vào)
Nếu tôi hiểu chút về cuộc sống thì không có gì là không thể. Vd. làm việc mà đầu óc cứ bay bổng trên mây, nghĩ tới buổi tối đi chơi lần đầu tiên với bạn gái, hoặc lòng như lửa đốt vì mẹ chồng ở quê lên chơi đang lạc ngoài bến xe, hoặc sắp phải lên thảm quì ở phòng giám đốc v...v

Mà cũng vì lý do trên nên có thể gõ trong ô số đã tồn tại.

Nhưng thôi, tôi không quan tâm nữa chuyện bạn định làm gì, có nghĩa hay không.

Lưu ý:
1. Code viết cho các shape trong cột C, từ dòng 15 trở xuống. Nếu khác thì tự sửa code.

2. Nếu có 2 ô cùng số thì chỉ 1 Picture được đổi tên.

3. Các shape phải có ít nhất là góc trên bên trái nằm trong ô của mình. Hiện tại Picture 5 cho ô C15 có góc trên bên trái nằm ở ô C14.

4. Tôi chỉ test 1 lần duy nhất vì không có hứng.
Mã:
Sub doi_ten()
Dim k As Long, count As Long, text As String, shp As Shape, item, dic As Object, sh As Worksheet
    Set dic = CreateObject("Scripting.Dictionary")
    Set sh = ThisWorkbook.Worksheets("Sheet1")
    dic.CompareMode = vbTextCompare
    For Each shp In sh.Shapes
        If shp.TopLeftCell.Row > 14 And shp.TopLeftCell.Column = 3 Then
            If shp.Name = "Picture " & shp.TopLeftCell.Value Then
                dic.Add shp.Name, ""
            Else
                count = count + 1
                shp.Name = "hichic" & count
                dic.Add shp.Name, "Picture " & shp.TopLeftCell.Value
            End If
        End If
    Next shp
    For k = 1 To count
        text = "hichic" & k
        item = dic.item(text)
        If Not dic.exists(item) Then
            sh.Shapes(text).Name = item
            dic.Add sh.Shapes(item).Name, ""
        End If
    Next k
   
    Set dic = Nothing
End Sub
 
Lần chỉnh sửa cuối:
Nhìn lại code thấy viết không suy nghĩ kỹ.

Nên đổi
Mã:
If (shp.Name = "Picture " & shp.TopLeftCell.Value Then

thành
Mã:
If LCase(shp.Name) = "picture " & shp.TopLeftCell.Value Then

Thay
Mã:
dic.Add sh.Shapes(item).Name, ""

bằng
Mã:
dic.Add item, ""

Code cũ không sai nhưng hơi buồn cười. Hình sh.Shapes(item) thì dĩ nhiên có tên là item rồi (sh.Shapes(item).Name = item). Cũng như bác Hiển thì dĩ nhiên có tên là Hiển rồi.
 
Lần chỉnh sửa cuối:
Nhìn lại code thấy viết không suy nghĩ kỹ.

Nên đổi
Mã:
If (shp.Name = "Picture " & shp.TopLeftCell.Value Then

thành
Mã:
If LCase(shp.Name) = "picture " & shp.TopLeftCell.Value Then

Thay
Mã:
dic.Add sh.Shapes(item).Name, ""

bằng
Mã:
dic.Add item, ""

Code cũ không sai nhưng hơi buồn cười. Hình sh.Shapes(item) thì dĩ nhiên có tên là item rồi (sh.Shapes(item).Name = item). Cũng như bác Hiển thì dĩ nhiên có tên là Hiển rồi.

Cảm ơn anh rất nhiều.
Mình tự hỏi đang làm gì lúc 02:08. Còn người khác làm gì lúc 02:08.
Em kiểm tra lại thử. Có thắc mắc gì, lại nhờ đến anh.
Một lần nữa, xin được cảm ơn anh !
 
Web KT
Back
Top Bottom