Đổi tên ảnh trong Excel (1 người xem)

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

Người dùng đang xem chủ đề này

bebeen

Thành viên thường trực
Tham gia
13/2/12
Bài viết
213
Được thích
24
Em có ý tưởng này không biết có làm được không nữa? Em đưa lên đây nhờ mọi người cho em giải pháp thực hiện nó nhé!?
 
Lần chỉnh sửa cuối:
Bạn chắc cũng biết về VBA vậy bạn thử với Code sau, áp dụng cho tên picture tại cột A và ảnh tại cột B, bạn có thể tự tuỳ biến
Mã:
Sub RenamePic()
    On Error Resume Next
    Dim Pic As Shape
    Dim i As Long
    For i = 2 To Range("A65536").End(3).Row
        For Each Pic In ActiveSheet.Shapes
            If Pic.Top >= Cells(i, 2).Top Then
                If Pic.Left >= Cells(i, 2).Left Then
                    If Pic.Width <= Cells(i, 2).Width Then
                        If Pic.Height <= Cells(i, 2).Height Then
                            Pic.Name = Cells(i, 1)
                        End If
                    End If
                End If
            End If
        Next
    Next
End Sub
 
Upvote 0
Tham khảo code này xem:
[gpecode=vb]
Sub Button5_Click()
Dim Shp As Shape, iR As Byte
For Each Shp In ActiveSheet.Shapes
iR = iR + 1
If Shp.TopLeftCell.Address(0, 0) = "B" & iR + 1 _
Then Shp.Name = Cells(iR + 1, "A")
Next Shp
End Sub
[/gpecode]
 
Upvote 0
Bạn chắc cũng biết về VBA vậy bạn thử với Code sau, áp dụng cho tên picture tại cột A và ảnh tại cột B, bạn có thể tự tuỳ biến
Mã:
Sub RenamePic()
    On Error Resume Next
    Dim Pic As Shape
    Dim i As Long
    For i = 2 To Range("A65536").End(3).Row
        For Each Pic In ActiveSheet.Shapes
            If Pic.Top >= Cells(i, 2).Top Then
                If Pic.Left >= Cells(i, 2).Left Then
                    If Pic.Width <= Cells(i, 2).Width Then
                        If Pic.Height <= Cells(i, 2).Height Then
                            Pic.Name = Cells(i, 1)
                        End If
                    End If
                End If
            End If
        Next
    Next
End Sub
Cho em hỏi thêm 1 chút là nếu các bức ảnh có tên bất kì (Không phải là picture 1, picture 2, picture 3, ...) nhưng vẫn được sắp xếp theo thứ tự trong các ô từ trên xuống dưới trong cùng 1 cột giống như trên thì liệu có đổi được tên không ạ?
Nếu có mong anh giúp đỡ!
 
Upvote 0
Cho em hỏi thêm 1 chút là nếu các bức ảnh có tên bất kì (Không phải là picture 1, picture 2, picture 3, ...) nhưng vẫn được sắp xếp theo thứ tự trong các ô từ trên xuống dưới trong cùng 1 cột giống như trên thì liệu có đổi được tên không ạ?
Nếu có mong anh giúp đỡ!
Tên hình bất kỳ, miễn là nó nằm trong ô được xác định vị trí Top và Left.
Có thể không cần phải xác định thêm vị trí Width và Height.
 
Upvote 0
Tên hình bất kỳ, miễn là nó nằm trong ô được xác định vị trí Top và Left.
Có thể không cần phải xác định thêm vị trí Width và Height.
Vâng đúng như anh nói. Tại em chưa test trước đã đi hỏi rồi.
Cho em hỏi là em muốn đổi tên ảnh nhưng tên là số tự nhiên. VD: 1; 2; 3; 4; ....
thì code trên phải sửa như thế nào vậy anh?
 
Upvote 0
Vâng đúng như anh nói. Tại em chưa test trước đã đi hỏi rồi.
Cho em hỏi là em muốn đổi tên ảnh nhưng tên là số tự nhiên. VD: 1; 2; 3; 4; ....
thì code trên phải sửa như thế nào vậy anh?
Thì sửa lại chút kết quả thôi:
Mã:
If Shp.TopLeftCell.Address(0, 0) = "B" & iR + 1 _
            Then Shp.Name = iR
Xin lỗi, iR
 
Lần chỉnh sửa cuối:
Upvote 0
Thì sửa lại chút kết quả thôi:
Mã:
If Shp.TopLeftCell.Address(0, 0) = "B" & i + 1 _
            Then Shp.Name = i
Anh ơi hình như anh nhầm thì phải, em đâu thấy anh khai báo biến i đâu ạ?
Em thử sửa lại thành:
Sub Button5_Click()
Dim Shp As Shape, iR As Long
For Each Shp In ActiveSheet.Shapes
iR = iR + 1
If Shp.TopLeftCell.Address(0, 0) = "B" & iR + 1 _
Then Shp.Name = iR
Next Shp
End Sub
Nhưng nó vẫn không đổi được tên ảnh sang kiểu số ạ!
 

File đính kèm

Lần chỉnh sửa cuối:
Upvote 0
Em muốn hỏi thêm:
Câu hỏi cụ thể trong file ảnh đính kèm đó....!!
 

File đính kèm

  • cau hoi.JPG
    cau hoi.JPG
    132.4 KB · Đọc: 66
Upvote 0
Upvote 0
Bạn chắc cũng đang tìm hiểu VBA vậy bạn nhìn code và chú ý 2 thông số là sửa được theo ý ngay

1/ Cells(i, 2) => số 2 tương ứng cột B thay đổi sang 3 là C, 1 là A.... tương tự cho các số khác
2/ Pic.Name = Cells(i, 1) => đây là cách gán tên cho Pictuture

=> Bạn có thể dùng 2 vòng lặp và thay đổi các thông số sao cho phù hợp là được
 
Upvote 0
Bạn chắc cũng đang tìm hiểu VBA vậy bạn nhìn code và chú ý 2 thông số là sửa được theo ý ngay

1/ Cells(i, 2) => số 2 tương ứng cột B thay đổi sang 3 là C, 1 là A.... tương tự cho các số khác
2/ Pic.Name = Cells(i, 1) => đây là cách gán tên cho Pictuture

=> Bạn có thể dùng 2 vòng lặp và thay đổi các thông số sao cho phù hợp là được

Cái này thì em hiểu rùi. Nhưng còn vòng lặp nữa thì... em chưa làm được. Anh hướng dẫn em thêm cho em tham khao nhe!
 
Upvote 0
Cái này thì em hiểu rùi. Nhưng còn vòng lặp nữa thì... em chưa làm được. Anh hướng dẫn em thêm cho em tham khao nhe!
Bạn mới tiếp cận VBA nên làm từng bước 1 sẽ dễ hiểu hơn nhé. Cụ thể như sau:
- Với Code bài #2 thì đó áp dụng cho Mã tại cột A và ảnh tại cột B, các thông số so sánh tôi đã ghi đầy đủ bao gồm so sánh vị trí top, left, chiều rộng, chiều cao của ảnh so với ô mà ảnh đang đứng. Nếu thoả mãn thì sẽ tiến hành thay thế tên.
- Bây giờ sẽ sửa nhé:
+/ Tất cả những chữ: Cells(i, 2) là ứng cho cột B ( bài #2 là cột ảnh) giờ sẽ sửa 1 vòng lặp đầu tiên áp dụng cho mã tại cột A ảnh tại cột C thì sửa tất cả những chữ Cells(i, 2) thành Cells(i, 3) => Bạn đã sửa xong cho mã cột A ảnh cột C
+/ Sửa cho mã cột B ảnh cột D: bạn copy toàn bộ code đó sang bùng phía dưới đổi tên Sub thành RenamePic1 (hoặc gì cũng được. Sau đó sửa Cells(i, 2) thành Cells(i, 4) (đây là vị trí cột chứa ảnh) và sửa dòng lệnh Pic.Name = Cells(i, 1) thành Pic.Name = Cells(i, 2) (đây là vị trí chứa tên ảnh cột B)

Bạn mới nên tôi khuyên tách thành 2 sub để khi nào hiểu hết thì hãy gộp thành 1 sub cho dễ hình dung. Hy vọng bạn sẽ sửa được theo ý mình
 
Upvote 0
Mong anh dhn46 giúp em sửa code để có thể chèn tên ảnh là các số với ạ!
 
Upvote 0
Upvote 0
Em sửa rồi nhưng vẫn không được anh ạ.
Có phải như vậy không anh?
Nếu đổi tên Shape bất kỳ trên sheet thành số tự nhiên thì không cần xác định vị trí hình ảnh.
[gpecode=vb]
Sub RenameShape()
Dim Shp As Shape, iR As Byte
For Each Shp In ActiveSheet.Shapes
iR = iR + 1
Shp.Name = iR
Next Shp
End Sub
[/gpecode]
 
Upvote 0
Mong anh dhn46 giúp em sửa code để có thể chèn tên ảnh là các số với ạ!
Không biết bạn định học VBA hay bạn muốn gì với topic của bạn bebeen
Nếu để học thì bạn thay thế như sau với code bài #2

Sửa đoạn
Mã:
[B][COLOR=#000000]Pic.Name = Cells(i, 2)
[/COLOR][/B]

thành

Mã:
[/COLOR][B][COLOR=#000000]
[/COLOR][/B][COLOR=#000000]k=k+1
Pic.Name = k[/COLOR][B][COLOR=#000000]
[/COLOR][/B]


 
Lần chỉnh sửa cuối:
Upvote 0
Không biết bạn định học VBA hay bạn muốn gì với topic của bạn bebeen
Nếu để học thì bạn thay thế như sau với code bài #2

Sửa đoạn
Mã:
[B][COLOR=#000000]Pic.Name = Cells(i, 2)
[/COLOR][/B]

thành

Mã:
[B][COLOR=#000000]
[/COLOR][/B][COLOR=#000000]k=k+1
Pic.Name = k[/COLOR][B][COLOR=#000000]
[/COLOR][/B]


Thực ra học thì là phụ thôi. Em định ứng dụng vào trong công việc là chính ạ!
Em nghĩ đặt tên ảnh bằng số sẽ nhanh hơn.

Nếu đổi tên Shape bất kỳ trên sheet thành số tự nhiên thì không cần xác định vị trí hình ảnh.
[gpecode=vb]
Sub RenameShape()
Dim Shp As Shape, iR As Byte
For Each Shp In ActiveSheet.Shapes
iR = iR + 1
Shp.Name = iR
Next Shp
End Sub
[/gpecode]
Em thử code của anh rồi nhưng vẫn không được ạ!
 
Chỉnh sửa lần cuối bởi điều hành viên:
Upvote 0
Vâng đúng là chạy được anh ạ. Nhưng anh cho em hỏi là em muốn đặt tên ảnh theo số thứ tự bên cột A có được không ạ?
 
Upvote 0
Vâng đúng là chạy được anh ạ. Nhưng anh cho em hỏi là em muốn đặt tên ảnh theo số thứ tự bên cột A có được không ạ?
Thật sự là không hiểu bạn đang muốn gì luôn.
Bài #2, bài #3 là để sửa lại tên hình ảnh theo cột A, bạn muốn số thì sửa cột A thành số rồi dùng code #2 hoặc #3 là được mà?
Với lại, tốt nhất là bạn gửi file của bạn lên, người khác sẽ hiểu bạn muốn làm gì trong đó.
 
Upvote 0
Thật sự là không hiểu bạn đang muốn gì luôn.
Bài #2, bài #3 là để sửa lại tên hình ảnh theo cột A, bạn muốn số thì sửa cột A thành số rồi dùng code #2 hoặc #3 là được mà?
Với lại, tốt nhất là bạn gửi file của bạn lên, người khác sẽ hiểu bạn muốn làm gì trong đó.
Mình làm rồi nhưng không được bạn ạ! Bạn xem File đính kèm!
 

File đính kèm

Upvote 0
Mình làm rồi nhưng không được bạn ạ! Bạn xem File đính kèm!
Bạn đưa code bài #3, muốn thay đổi số theo cột A mà sửa lại kết quả trả về iR?
[gpecode=vb]
Sub Button5_Click()
Dim Shp As Shape, iR As Byte
For Each Shp In ActiveSheet.Shapes
iR = iR + 1
If Shp.TopLeftCell.Address(0, 0) = "B" & iR + 1 _
Then Shp.Name = Cells(iR + 1, "A")
Next Shp
End Sub
[/gpecode]
 

File đính kèm

Upvote 0
Bạn đưa code bài #3, muốn thay đổi số theo cột A mà sửa lại kết quả trả về iR?
[gpecode=vb]
Sub Button5_Click()
Dim Shp As Shape, iR As Byte
For Each Shp In ActiveSheet.Shapes
iR = iR + 1
If Shp.TopLeftCell.Address(0, 0) = "B" & iR + 1 _
Then Shp.Name = Cells(iR + 1, "A")
Next Shp
End Sub
[/gpecode]
Vậy là code trong File này khác với code lúc trước anh bảo em mà.
Code lúc trước:
Sub Button5_Click()
Dim Shp As Shape, iR As Byte
For Each Shp In ActiveSheet.Shapes
iR = iR + 1
If Shp.TopLeftCell.Address(0, 0) = "B" & iR + 1 _
Then Shp.Name = iR
Next Shp
End Sub

Bạn đưa code bài #3, muốn thay đổi số theo cột A mà sửa lại kết quả trả về iR?
[gpecode=vb]
Sub Button5_Click()
Dim Shp As Shape, iR As Byte
For Each Shp In ActiveSheet.Shapes
iR = iR + 1
If Shp.TopLeftCell.Address(0, 0) = "B" & iR + 1 _
Then Shp.Name = Cells(iR + 1, "A")
Next Shp
End Sub
[/gpecode]
Em vẫn không chạy được anh ạ! Lạ thật đấy. Làm phiền anh nhiều quá nhưng mà đúng là vẫn chưa được.
Nó báo lỗi ở dòng này ạ:loi.JPG
 
Chỉnh sửa lần cuối bởi điều hành viên:
Upvote 0
Em vẫn không chạy được anh ạ! Lạ thật đấy. Làm phiền anh nhiều quá nhưng mà đúng là vẫn chưa được.
Nó báo lỗi ở dòng này ạ:
Vậy thì bó tay rồi, nhờ các Thầy xem thôi. Trên máy mình vẫn bình thường.
[video=youtube;s6jVmoyYTbo]https://www.youtube.com/watch?v=s6jVmoyYTbo&amp;feature=youtu.be[/video]
 
Upvote 0
Bạn đưa code bài #3, muốn thay đổi số theo cột A mà sửa lại kết quả trả về iR?
[gpecode=vb]
Sub Button5_Click()
Dim Shp As Shape, iR As Byte
For Each Shp In ActiveSheet.Shapes
iR = iR + 1
If Shp.TopLeftCell.Address(0, 0) = "B" & iR + 1 _
Then Shp.Name = Cells(iR + 1, "A")
Next Shp
End Sub
[/gpecode]

Với ảnh và các "nút" đã có như trong bài #26 thì nhấn nút "leonguyen" chắc chắn sẽ đổi tên ảnh theo cột A, tức tên là số.

Nếu tôi không lầm thì code như thế không được. Nó đòi hỏi khi ta thiết kế sheet thì phải làm theo thứ tự: đặt tất cả các ảnh cần thiết vào các ô của cột B, tiếp theo mới đặt các Button nếu có (nút leonguyen, dnh, Show Form, Play Video v...v). Nếu trước tiên ta đặt các Button leonguyen, dnh, Show Form, Play Video v...v rồi mới Insert ảnh thì code tèo. Vì sao?
Trong 4 vòng FOR đầu thì dĩ nhiên điều kiện không thỏa cho 4 Button leonguyen, dnh, Show Form, Play Video. Trong các vòng tiếp theo thì iR = 5, 6, 7, ... nên dĩ nhiên sẽ không = B2, B3, B4 tương ứng với ảnh trong cột B. Kết quả là không có ảnh nào được đổi tên.

Cho dù ta có Insert vd. 5 ảnh (B2, ..., B6) trước sau đó mới đặt vd. 2 Button (cho việc nào đó) thì rất có thể trong tương lai khi vd. thêm sản phẩm ta phải Insert thêm vd. 3 ảnh (vào B7, B8, B9) thì 3 ảnh cuối này sẽ không được đổi tên. Vì sao? Vì với vòng FOR thứ 8 thì iR = 8 trong khi ảnh là ở B7 vậy điều kiện không thỏa. Tương tự với vòng FOR thứ 9, 10.

Tôi đề nghị code bất kỳ, ý nghĩ đầu tiên. Vd. ảnh ở cột B từ dòng 2, số ở cột A từ dòng 2

Mã:
Sub Rectangle1_Click()
Dim Shp As Shape, cell_ As String
    For Each Shp In ActiveSheet.Shapes
        cell_ = Shp.TopLeftCell.Address(0, 0)
        If Left(cell_, 1) = "B" Then Shp.Name = Range(cell_).Offset(, -1).Value
    Next Shp
End Sub
----------
Tất nhiên nên kiểm tra điều kiện chặt hơn đề phòng có những ảnh khác ở cột BA, BB, BC, ...
 
Lần chỉnh sửa cuối:
Upvote 0
Với ảnh và các "nút" đã có như trong bài #26 thì nhấn nút "leonguyen" chắc chắn sẽ đổi tên ảnh theo cột A, tức tên là số.

Nếu tôi không lầm thì code như thế không được. Nó đòi hỏi khi ta thiết kế sheet thì phải làm theo thứ tự: đặt tất cả các ảnh cần thiết vào các ô của cột B, tiếp theo mới đặt các Button nếu có (nút leonguyen, dnh, Show Form, Play Video v...v). Nếu trước tiên ta đặt các Button leonguyen, dnh, Show Form, Play Video v...v rồi mới Insert ảnh thì code tèo. Vì sao?
Trong 4 vòng FOR đầu thì dĩ nhiên điều kiện không thỏa cho 4 Button leonguyen, dnh, Show Form, Play Video. Trong các vòng tiếp theo thì iR = 5, 6, 7, ... nên dĩ nhiên sẽ không = B2, B3, B4 tương ứng với ảnh trong cột B. Kết quả là không có ảnh nào được đổi tên.

Cho dù ta có Insert vd. 5 ảnh (B2, ..., B6) trước sau đó mới đặt vd. 2 Button (cho việc nào đó) thì rất có thể trong tương lai khi vd. thêm sản phẩm ta phải Insert thêm vd. 3 ảnh (vào B7, B8, B9) thì 3 ảnh cuối này sẽ không được đổi tên. Vì sao? Vì với vòng FOR thứ 8 thì iR = 8 trong khi ảnh là ở B7 vậy điều kiện không thỏa. Tương tự với vòng FOR thứ 9, 10.

Tôi đề nghị code bất kỳ, ý nghĩ đầu tiên. Vd. ảnh ở cột B từ dòng 2, số ở cột A từ dòng 2

Mã:
Sub Rectangle1_Click()
Dim Shp As Shape, cell_ As String
    For Each Shp In ActiveSheet.Shapes
        cell_ = Shp.TopLeftCell.Address(0, 0)
        If Left(cell_, 1) = "B" Then Shp.Name = Range(cell_).Offset(, -1).Value
    Next Shp
End Sub
Đúng như thầy nói ở mấy lần đổi đầu tiên thì OK nhưng mấy lần sau là không được nữa ạ!(Tức là mỗi lần nhấn nút chạy code đó ạ!). Chỗ em vừa mới có điện em sẽ Test thử code của thầy luôn ạ!

Sub Rectangle1_Click()
Dim Shp As Shape, cell_ As String
For Each Shp In ActiveSheet.Shapes
cell_ = Shp.TopLeftCell.Address(0, 0)
If Left(cell_, 1) = "B" Then Shp.Name = Range(cell_).Offset(, -1).Value
Next Shp
End Sub
Em đã Test thử code này và kết quả như sau:
+ Mấy lần bấm nút đầu tiên để đổi tên thì code chạy rất tốt.
+ Khoảng từ lần thứ 5 hay 6 gì đó trở đi là nó báo lỗi màu vàng trong đoạn code sau ạ:
Shp.Name = Range(cell_).Offset(, -1).Value
 
Chỉnh sửa lần cuối bởi điều hành viên:
Upvote 0
Em đã Test thử code này và kết quả như sau:
+ Mấy lần bấm nút đầu tiên để đổi tên thì code chạy rất tốt.
+ Khoảng từ lần thứ 5 hay 6 gì đó trở đi là nó báo lỗi màu vàng trong đoạn code sau ạ:
Shp.Name = Range(cell_).Offset(, -1).Value

Tôi đã quan sát khá nhiều bài hỏi chen ngang của bạn tại nhiều topic. Với kinh nghiệm học VBA và Excel cơ bản của mình tôi tự hỏi: "liệu bạn đã nắm được gì sau 1 loạt câu hỏi mà chả đi đâu tới đâu? Thích thì chen?"

Quá trình tìm hiểu thì phải có thời gian phải, ngấm chắc gì bạn đã hiểu hết vấn đề mà Test. Ví thử các code có kèm theo On Error resume next ?

Vậy nên tôi nghĩ để làm được yêu cầu của bạn chắc các Code cũng đã quá đủ, thêm "On Error resume next" nữa thì đố bạn tìm được dòng code nào màu vàng, còn để mà học thì tôi nghĩ bạn nên chọn 1 hướng tiếp cận khác.

Chúc bạn thành công!
 
Upvote 0
Tôi đã quan sát khá nhiều bài hỏi chen ngang của bạn tại nhiều topic. Với kinh nghiệm học VBA và Excel cơ bản của mình tôi tự hỏi: "liệu bạn đã nắm được gì sau 1 loạt câu hỏi mà chả đi đâu tới đâu? Thích thì chen?"

Quá trình tìm hiểu thì phải có thời gian phải, ngấm chắc gì bạn đã hiểu hết vấn đề mà Test. Ví thử các code có kèm theo On Error resume next ?

Vậy nên tôi nghĩ để làm được yêu cầu của bạn chắc các Code cũng đã quá đủ, thêm "On Error resume next" nữa thì đố bạn tìm được dòng code nào màu vàng, còn để mà học thì tôi nghĩ bạn nên chọn 1 hướng tiếp cận khác.

Chúc bạn thành công!
Vâng thực sự là em có chen ngang, nhưng các câu hỏi của em cũng có cùng nội dung của Topic đó chứ ạ! Em cũng chỉ đưa ra các thắc mắc thôi mà.
Nếu các câu hỏi của em đã làm loãng nội dung của topic này thì em xin dừng tại đây ạ!
Có gì mong BQT lượng thứ!
 
Upvote 0
Vâng thực sự là em có chen ngang, nhưng các câu hỏi của em cũng có cùng nội dung của Topic đó chứ ạ! Em cũng chỉ đưa ra các thắc mắc thôi mà.
Nếu các câu hỏi của em đã làm loãng nội dung của topic này thì em xin dừng tại đây ạ!
Có gì mong BQT lượng thứ!
Bạn cứ hỏi, đừng hỏi lạc đề tài là được. Nhưng đừng viết bài kiểu 2, 3 bài liên tục. Nghĩ cho kỹ, đọc cho kỹ, rồi viết 1 bài cho đủ ý, đừng viết 1 câu, rồi suy nghĩ lại viết thêm bài khác 1 câu, bài nào cũng trích dẫn thậm thượt.

Tôi chán phải xóa bớt bài của bạn, cũng như chán phải gộp 2, 3 bài thành 1 lắm rồi.
 
Upvote 0
Chỗ em vừa mới có điện em sẽ Test thử code của thầy luôn ạ!

Em đã Test thử code này và kết quả như sau:
+ Mấy lần bấm nút đầu tiên để đổi tên thì code chạy rất tốt.
+ Khoảng từ lần thứ 5 hay 6 gì đó trở đi là nó báo lỗi màu vàng trong đoạn code sau ạ:
Shp.Name = Range(cell_).Offset(, -1).Value

Bản thân Excel khi có lỗi thì bao giờ cũng hiển thị thông báo. Vậy thông báo thế nào?
Trong vòng lặp ta duyệt tập ActiveSheet.Shapes nên chắc chắn Shp tồn tại.
Dòng Shp.Name = Range(cell_).Offset(, -1).Value thực ra chả có gì cả.
Tôi nhấn nút mỏi tay mà không có được cái mà bạn cho là lỗi nên chịu không biết trả lời bạn thế nào.

Ngay cả code của leonguyenz tôi chạy cũng thấy bình thường (nhược điểm như tôi nói), nhưng bạn chạy thì bị lỗi. Tôi bó tay thôi.
 
Upvote 0
Mình tải file về chạy code thử, không có lỗi gì cả. Có thể máy tính của bạn đang bị gì đó. Không ai bị gì cả, chỉ mình bạn bị thôi.
Vâng ạ! Có lẽ là vậy anh ạ! Máy em có cài office 2003 bộ cài rút gọn chỉ khoảng 200MB thôi(sau khi cài vào máy). Có lẽ nó bị thiếu 1 số thành phần nào đó nên code báo lỗi chăng?
 
Upvote 0
Vâng thực sự là em có chen ngang, nhưng các câu hỏi của em cũng có cùng nội dung của Topic đó chứ ạ! Em cũng chỉ đưa ra các thắc mắc thôi mà.
Nếu các câu hỏi của em đã làm loãng nội dung của topic này thì em xin dừng tại đây ạ!
Có gì mong BQT lượng thứ!
Từ những câu hỏi của bạn, nhiều người tìm ra nhiều vấn đề và được học hỏi thêm, mình cũng vậy, tuy nhiên bạn tránh spam (như Thầy ptm0412 đã nói).
Tôi đề nghị code bất kỳ, ý nghĩ đầu tiên. Vd. ảnh ở cột B từ dòng 2, số ở cột A từ dòng 2
Mã:
Sub Rectangle1_Click()
Dim Shp As Shape, cell_ As String
    For Each Shp In ActiveSheet.Shapes
        cell_ = Shp.TopLeftCell.Address(0, 0)
        If Left(cell_, 1) = "B" Then Shp.Name = Range(cell_).Offset(, -1).Value
    Next Shp
End Sub
----------
Tất nhiên nên kiểm tra điều kiện chặt hơn đề phòng có những ảnh khác ở cột BA, BB, BC, ...
Em mạn phép dùng code của Thầy, sửa một chút nếu bạn chuot0106 có dùng.
[gpecode=vb]
Sub RePic()
Dim Shp As Shape, cell_ As String
For Each Shp In ActiveSheet.Shapes
cell_ = Shp.TopLeftCell.Address
If Left(cell_, 3) = "$B$" And Shp.Type = msoPicture _
Then Shp.Name = Range(cell_).Offset(, -1).Value
Next Shp
End Sub
[/gpecode]
Xác định chỉ sửa tên Shape nằm ở cột B và Shape là dạng hình ảnh.
 

File đính kèm

Upvote 0
Mình luôn xài mấy cái đơn giản thôi. Bố trí cột A là tên hình hiện tại, cột B là tên hình cần thay.
Khỏi xác định hắn là hình gì
PHP:
Sub RenameShape()
    Dim Shp As Shape,  Tim
    For Each Shp In ActiveSheet.Shapes
        Set Tim = [A:A].Find(Shp.Name, , , 1)
        If Not Tim Is Nothing Then
            Shp.Name = Tim.Offset(, 1)
        End If
    Next Shp
End Sub
 
Upvote 0

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

Back
Top Bottom