Xin giúp đỡ về tự crop ảnh khi chèn ảnh vào Excel

Liên hệ QC

ok95sonok

Thành viên mới
Tham gia
20/5/22
Bài viết
24
Được thích
1
Em xin chào mọi người.
Em xin nhờ nhiều chút về VBA ạ. Cụ thể là tự động Crop ảnh khi chèn vào ô trong Sheet bằng code chèn ảnh tự động.
Em giới thiệu qua là em đã có file tự động chèn ảnh của bác @batman1 giúp trước đó. Trong file đó khi bấm vào chèn ảnh, sẽ tự động chèn ảnh theo tên ảnh từ thư mục “/Anh” cùng cấp vào lần lượt các ô đã điền số từ 1~24. (Tên ảnh là các số từ 1~24)
Bây giờ em muốn Crop đi 4 cạnh của ảnh khi chèn vào ô mà ảnh vẫn center trong ô đó.
Vd: ảnh là 1500x1000 cắt trên và dưới mỗi mỗi khoảng 300, cắt hai bên đi mỗi khoảng 200. —> Target được khoảng 900x600 giữa ảnh như vùng bôi đỏ ảnh em đính kèm. F3924A7C-1ACB-4513-9984-B7CBBA69DF96.jpeg
Em đã tìm được code này có vẻ là nó nhưng năng lực của em không làm được.
Link: Link code Crop ảnh
Cuối cùng em xin nhờ sự chỉ dạy của mọi người giúp em làm như em viết ở trên hoặc có thể làm giúp em và chỉ dạy em nguyên lý của của nó với ạ.
Em xin chân thành cảm ơn!
Link: File Excel đã có code chèn ảnh tự động
 
Dùng phần mềm Microsoft Office Picture Manager cho phép chỉnh sửa hàng loạt tập tin ảnh một lúc.

Chọn các ảnh, rồi crop một phát là xong hết.

Cách tải và cài đặt Microsoft Office Picture Manager rất đơn giản, tự tìm hiểu.

1654059062387.png
 
Upvote 0
Dùng phần mềm Microsoft Office Picture Manager cho phép chỉnh sửa hàng loạt tập tin ảnh một lúc.

Chọn các ảnh, rồi crop một phát là xong hết.

Cách tải và cài đặt Microsoft Office Picture Manager rất đơn giản, tự tìm hiểu.

View attachment 276722
Em cảm ơn! Nhưng e muốn tìm không dùng phần mềm thì tốt hơn. Vì lý do công việc không cho phép tải phần mềm khác ạ.
 
Upvote 0
Em cảm ơn! Nhưng e muốn tìm không dùng phần mềm thì tốt hơn. Vì lý do công việc không cho phép tải phần mềm khác ạ.
Không thể cấm dùng phần mềm trong bộ office. Cơ quan quá máy móc.

Nhưng có những tình huống không nên dùng. Vì sao? Giả sử bạn muốn giữ ảnh gốc để dùng cho nhiều mục đích, chỉ ở một chỗ cần Crop. Cũng có thể giữ 10 ảnh gốc và tạo 10 ảnh crop nhưng như thế là nhân bản không cần thiết.
Trường hợp nữa là nếu các giá trị cắt được người dùng quyết định ở phút cuối cùng. Vả lại nếu nhiều ảnh và mỗi ảnh cắt một lượng khác nhau mà thao tác bằng tay với phần mềm thì cũng cực.

Với tôi bạn cho quá ít thông tin. Trong trường hợp tổng quát thì cắt trái, phải, trên, dưới khác nhau hay LUÔN LUÔN phải trái cắt cùng lượng a, trên dưới cắt cùng lượng b? Hoặc là không cắt cùng một lượng cho tất cả các ảnh? Nếu thế thì phải nhập trên sheet 4 giá trị. Nhập ở đâu?
 
Upvote 0
Cái đó thuộc Office, không cho phép thì quá lạ khi bạn đang được dùng Excel.
Nếu phải tải thì không được phép bạn ạ
Bài đã được tự động gộp:

Không thể cấm dùng phần mềm trong bộ office. Cơ quan quá máy móc.

Nhưng có những tình huống không nên dùng. Vì sao? Giả sử bạn muốn giữ ảnh gốc để dùng cho nhiều mục đích, chỉ ở một chỗ cần Crop. Cũng có thể giữ 10 ảnh gốc và tạo 10 ảnh crop nhưng như thế là nhân bản không cần thiết.
Trường hợp nữa là nếu các giá trị cắt được người dùng quyết định ở phút cuối cùng. Vả lại nếu nhiều ảnh và mỗi ảnh cắt một lượng khác nhau mà thao tác bằng tay với phần mềm thì cũng cực.

Với tôi bạn cho quá ít thông tin. Trong trường hợp tổng quát thì cắt trái, phải, trên, dưới khác nhau hay LUÔN LUÔN phải trái cắt cùng lượng a, trên dưới cắt cùng lượng b? Hoặc là không cắt cùng một lượng cho tất cả các ảnh? Nếu thế thì phải nhập trên sheet 4 giá trị. Nhập ở đâu?
Nếu phải tải thì không được ạ.
Đúng là chỉ crop ở 1 chỗ. Khi cần có thể mở về gốc chứ không cần nhân bản ạ, nếu bắt buộc có thể crop luôn đi không cần về gốc.
Có nhiều ảnh đều phải cắt và cắt cùng lượng như nhau.
Lượng cắt có thể thay đổi được ạ. Nhập vào 4 ô trong sheet đó thì tốt nhất ạ. Ô bao nhiêu thì có thể đặt trong code thì tốt để có thể thay đổi ô. Vd: để ở ô A25, B25, C25, D25
Em cảm ơn!
 
Lần chỉnh sửa cuối:
Upvote 0
Có nhiều ảnh đều phải cắt và cắt cùng lượng như nhau.
Lượng cắt có thể thay đổi được ạ. Nhập vào 4 ô trong sheet đó thì tốt nhất ạ. Ô bao nhiêu thì có thể đặt trong code thì tốt để có thể thay đổi ô. Vd: để ở ô A25, B25, C25, D25
Thêm code sau vào Module, vd. vào Module có InsertPicture.
Mã:
Sub CropAndCenter(ByVal shp As Shape, ByVal cLeft As Double, ByVal cTop As Double, ByVal cRight As Double, ByVal cBottom As Double)
Dim w As Double, h As Double, khung As range
    With shp
        Set khung = shp.Parent.range(.Name)
        .ScaleWidth 1, msoTrue
        .ScaleHeight 1, msoTrue
        With .PictureFormat
            .CropLeft = cLeft
            .CropRight = cRight
            .CropTop = cTop
            .CropBottom = cBottom
        End With
        w = khung.Width
        h = w * .Height / .Width
        If h > khung.Height Then
            h = khung.Height
            w = h * .Width / .Height
        End If
        .left = khung.left + (khung.Width - w) / 2
        .top = khung.top + (khung.Height - h) / 2
        .Width = w
        .Height = h
    End With
End Sub

Sau dòng InsertPicture ... trong tập tin của bạn thì thêm
Mã:
With ThisWorkbook.Worksheets("Sheet1")
    CropAndCenter .Shapes(cell_.Address), .range("A25").Value, .range("B25").Value, .range("C25").Value, .range("D25").Value
End With

Với A25, B25, C25, D25 = cLeft, cTop, cRight, cBottom

Trong Excel mọi kích thước tính bằng point, vậy lượng cắt cũng nên cung cấp với đơn vị là point.
 
Upvote 0
Giờ em mới có thời gian. Cảm ơn anh rất nhiều ạ!
Anh ơi em làm như anh hướng dẫn thì gặp lỗi này và ảnh đã được chèn như ý muốn của em. Em xem trong Locals window nhưng nhiều quá không hiểu được nó sai ở đâu. Tìm trên google không có thông tin giải đáp :cc_surrender:.
Anh giúp em xem lại code với ạ.
Mã:
Sub chen_anh()
Const dong_dau = 5
Const cot_dau = "B"
Const so_cot = 4
Dim lastRow As Long, vung As Range, cell_ As Range
    With ThisWorkbook.Worksheets("Sheet1")
        lastRow = .Cells(Rows.Count, cot_dau).End(xlUp).Row ' dong cuoi cung co du lieu trong cot B
        If lastRow < dong_dau Then Exit Sub
        Set vung = .Range(cot_dau & dong_dau).Resize(lastRow - dong_dau + 1, so_cot)
    End With
    For Each cell_ In vung
        InsertPicture ThisWorkbook.Path & "\Anh\" & cell_.Value & ".jpg", cell_, False, True, False
  
        With ThisWorkbook.Worksheets("Sheet1")
        CropAndCenter .Shapes(cell_.Address), .Range("A25").Value, .Range("B25").Value, .Range("C25").Value, .Range("D25").Value
        End With
    Next cell_
End Sub
Sub CropAndCenter(ByVal shp As Shape, ByVal cLeft As Double, ByVal cTop As Double, ByVal cRight As Double, ByVal cBottom As Double)
Dim w As Double, h As Double, khung As Range
    With shp
        Set khung = shp.Parent.Range(.Name)
        .ScaleWidth 1, msoTrue
        .ScaleHeight 1, msoTrue
        With .PictureFormat
            .CropLeft = cLeft
            .CropRight = cRight
            .CropTop = cTop
            .CropBottom = cBottom
        End With
        w = khung.Width
        h = w * .Height / .Width
        If h > khung.Height Then
            h = khung.Height
            w = h * .Width / .Height
        End If
        .Left = khung.Left + (khung.Width - w) / 2
        .Top = khung.Top + (khung.Height - h) / 2
        .Width = w
        .Height = h
    End With
End Sub

1654135348409.png
1654131890911.png
 

File đính kèm

  • New folder.rar
    268.9 KB · Đọc: 9
Lần chỉnh sửa cuối:
Upvote 0
@ Thớt:
Cái này để chọn số đẹp à bạn?
Dạ không. Đây là ảnh dummy em làm ví dụ thôi ạ (ví dụ ở đây em để 24 ảnh, có thể ít hơn hoặc nhiều hơn). như đầu bài em viết. em muốn chèn ảnh vào 4 cột và tên ảnh em đặt theo số từ 1~24 được chèn vào đúng 24 ô có tên của từng ảnh ạ.
 
Upvote 0
Thêm code sau vào Module, vd. vào Module có InsertPicture.
Mã:
Sub CropAndCenter(ByVal shp As Shape, ByVal cLeft As Double, ByVal cTop As Double, ByVal cRight As Double, ByVal cBottom As Double)
Dim w As Double, h As Double, khung As range
    With shp
        Set khung = shp.Parent.range(.Name)
        .ScaleWidth 1, msoTrue
        .ScaleHeight 1, msoTrue
        With .PictureFormat
            .CropLeft = cLeft
            .CropRight = cRight
            .CropTop = cTop
            .CropBottom = cBottom
        End With
        w = khung.Width
        h = w * .Height / .Width
        If h > khung.Height Then
            h = khung.Height
            w = h * .Width / .Height
        End If
        .left = khung.left + (khung.Width - w) / 2
        .top = khung.top + (khung.Height - h) / 2
        .Width = w
        .Height = h
    End With
End Sub

Sau dòng InsertPicture ... trong tập tin của bạn thì thêm
Mã:
With ThisWorkbook.Worksheets("Sheet1")
    CropAndCenter .Shapes(cell_.Address), .range("A25").Value, .range("B25").Value, .range("C25").Value, .range("D25").Value
End With

Với A25, B25, C25, D25 = cLeft, cTop, cRight, cBottom

Trong Excel mọi kích thước tính bằng point, vậy lượng cắt cũng nên cung cấp với đơn vị là point.
Anh đọc bình luận trên giúp em được không ạ?
Trả lời mà quên không nhắc tên anh. Một thiếu sót thực sự
 
Upvote 0
Anh ơi em làm như anh hướng dẫn thì gặp lỗi này và ảnh đã được chèn như ý muốn của em.
Code xác định dòng cuối có dữ liệu ở cột B bị sai do thêm dữ liệu ở A25: D26. Nhớ là không thêm gì ở dưới vùng ảnh.

Xóa dữ liệu A25: D26 và chuyển tới F1:I2. Và trong code sửa thành

Mã:
CropAndCenter .Shapes(cell_.Address), .Range("F1").Value, .Range("G1").Value, .Range("H1").Value, .Range("I1").Value

Anh đọc bình luận trên giúp em được không ạ?
Trả lời mà quên không nhắc tên anh. Một thiếu sót thực sự
Bạn nên kiên nhẫn đợi. 08:12 giờ ở Việt Nam thì ở chỗ tôi mới 03:12, tôi mới đi ngủ được 1 tiếng.
 
Upvote 1
Code xác định dòng cuối có dữ liệu ở cột B bị sai do thêm dữ liệu ở A25: D26. Nhớ là không thêm gì ở dưới vùng ảnh.
Xóa dữ liệu A25: D26 và chuyển tới F1:I2. Và trong code sửa thành

Mã:
CropAndCenter .Shapes(cell_.Address), .Range("F1").Value, .Range("G1").Value, .Range("H1").Value, .Range("I1").Value
Dạ em cảm ơn anh. Thế là bây giờ không được thêm bất kì thứ gì dưới vùng ảnh hay là do A25:D26 nó nằm trong code thì không được thêm thôi ạ.
Vì ảnh em chèn vào form có rất nhiều dữ liệu dưới vùng ảnh. Và code chưa có crop vẫn sử dụng bình thường ạ.
Em đang trả lời bằng điện thoại chưa có PC để thử nên em hỏi ạ.
Bạn nên kiên nhẫn đợi. 08:12 giờ ở Việt Nam thì ở chỗ tôi mới 03:12, tôi mới đi ngủ được 1 tiếng.
Em rất xin lỗi. Em chỉ nghĩ là anh không hiện thông báo do em chưa trả lời bình luận của anh hoặc nhắc tên thôi ạ. Em không có ý dục.
Em tò mò thêm là anh đang ở châu âu ạ? :good::good:
 
Upvote 0
Vì ảnh em chèn vào form có rất nhiều dữ liệu dưới vùng ảnh. Và code chưa có crop vẫn sử dụng bình thường ạ.

Em tò mò thêm là anh đang ở châu âu ạ? :good::good:
Tôi ở Ba Lan.

Code xác định dòng cuối có dữ liệu trong cột B bằng cách đi từ ô trong cột B ở dòng > 1 triệu và đi lên trên - END(xlUp) nên nó gặp dòng cuối cùng có dữ liệu ở B26. Theo như code của bạn thì bạn xét từng ô của vùng tới dòng 26 và chèn ảnh cho cả những ô tới dòng 26. Code chèn ảnh không lỗi vì InsertPicture kiểm tra xem có ảnh trên đĩa không. Còn code Crop ... có lỗi vì không có ảnh cho những ô từ dòng 11 trở đi. Cách khắc phục có rất nhiều, nhưng có lẽ tốt nhất là xử lý lỗi không có ảnh để Crop
Sửa thành
Mã:
With ThisWorkbook.Worksheets("Sheet1")
    On Error Resume Next
    CropAndCenter .Shapes(cell_.Address), .Range("F1").Value, .Range("G1").Value, .Range("H1").Value, .Range("I1").Value
    On Error GoTo 0
End With
Bây giờ thì tha hồ chèn dữ liệu dưới vùng ảnh.
 
Upvote 0
Tôi ở Ba Lan.

Code xác định dòng cuối có dữ liệu trong cột B bằng cách đi từ ô trong cột B ở dòng > 1 triệu và đi lên trên - END(xlUp) nên nó gặp dòng cuối cùng có dữ liệu ở B26. Theo như code của bạn thì bạn xét từng ô của vùng tới dòng 26 và chèn ảnh cho cả những ô tới dòng 26. Code chèn ảnh không lỗi vì InsertPicture kiểm tra xem có ảnh trên đĩa không. Còn code Crop ... có lỗi vì không có ảnh cho những ô từ dòng 11 trở đi. Cách khắc phục có rất nhiều, nhưng có lẽ tốt nhất là xử lý lỗi không có ảnh để Crop
Sửa thành
Mã:
With ThisWorkbook.Worksheets("Sheet1")
    On Error Resume Next
    CropAndCenter .Shapes(cell_.Address), .Range("F1").Value, .Range("G1").Value, .Range("H1").Value, .Range("I1").Value
    On Error GoTo 0
End With
Bây giờ thì tha hồ chèn dữ liệu dưới vùng ảnh.
Quá tuyệt vời anh ơi. Để em thử.
 
Upvote 0
Tôi ở Ba Lan.

Code xác định dòng cuối có dữ liệu trong cột B bằng cách đi từ ô trong cột B ở dòng > 1 triệu và đi lên trên - END(xlUp) nên nó gặp dòng cuối cùng có dữ liệu ở B26. Theo như code của bạn thì bạn xét từng ô của vùng tới dòng 26 và chèn ảnh cho cả những ô tới dòng 26. Code chèn ảnh không lỗi vì InsertPicture kiểm tra xem có ảnh trên đĩa không. Còn code Crop ... có lỗi vì không có ảnh cho những ô từ dòng 11 trở đi. Cách khắc phục có rất nhiều, nhưng có lẽ tốt nhất là xử lý lỗi không có ảnh để Crop
Sửa thành
Mã:
With ThisWorkbook.Worksheets("Sheet1")
    On Error Resume Next
    CropAndCenter .Shapes(cell_.Address), .Range("F1").Value, .Range("G1").Value, .Range("H1").Value, .Range("I1").Value
    On Error GoTo 0
End With
Bây giờ thì tha hồ chèn dữ liệu dưới vùng ảnh.
Anh ơi khi ứng dụng vào công việc em gặp sự cố rồi.
Ô cần chèn ảnh của em được gộp từ nhiều cột và nhiều hàng. (Mỗi loại sẽ khác nhau, có loại 5 cột hay 10 cột gộp lại và hàng cũng vậy)
Như vd ảnh em gửi dưới đây thì code bắt đầu chèn từ cột B và chèn 4 cột.
Ô cần chèn ảnh thì được gộp từ 3 cột B-C-D, 3 hàng 4-5-6
Khi chèn ảnh vào thì ảnh số 1 sẽ chỉ hiển thị ở B5 chứ không to hết cái ô gộp
Còn cái chỉ hiện thị 4 cột em nghĩ tăng số cột trong code lên là được.
Lúc nào anh có thời gian giúp em vấn đề này với ạ.
Có những from nhiều cột và hàng gộp lại nhưng không thể sửa được ạ, vì bên dưới vùng ảnh sẽ chia làm nhiều ô nhỏ để nhập thông tin trong ảnh. Xong còn phải giữ khuôn để in ra nữa.
Em cảm ơn!
 

File đính kèm

  • 9F19BB26-E006-47E0-9C79-E09655A716A9.jpeg
    9F19BB26-E006-47E0-9C79-E09655A716A9.jpeg
    137.6 KB · Đọc: 9
Upvote 0
Anh ơi khi ứng dụng vào công việc em gặp sự cố rồi.
Ô cần chèn ảnh của em được gộp từ nhiều cột và nhiều hàng. (Mỗi loại sẽ khác nhau, có loại 5 cột hay 10 cột gộp lại và hàng cũng vậy)
Như vd ảnh em gửi dưới đây thì code bắt đầu chèn từ cột B và chèn 4 cột.
Ô cần chèn ảnh thì được gộp từ 3 cột B-C-D, 3 hàng 4-5-6
Khi chèn ảnh vào thì ảnh số 1 sẽ chỉ hiển thị ở B5 chứ không to hết cái ô gộp
Còn cái chỉ hiện thị 4 cột em nghĩ tăng số cột trong code lên là được.
Lúc nào anh có thời gian giúp em vấn đề này với ạ.
Có những from nhiều cột và hàng gộp lại nhưng không thể sửa được ạ, vì bên dưới vùng ảnh sẽ chia làm nhiều ô nhỏ để nhập thông tin trong ảnh. Xong còn phải giữ khuôn để in ra nữa.
Em cảm ơn!
Phải biết cấu trúc để viết code.
Tại sao không đồng bộ, tại sao khung 1 có 2 cột B: D còn mỗi khung 2, 3, 4 chỉ có 1 cột? 1, 2, 3, 4 có 3 hàng trong khi các khing còn lại chỉ có 1 dòng?

Hãy trả lời các câu hỏi sau.
1. khung 1, 2, 3, 4 LUÔN LUÔN có 3 dòng hay số dòng có thể thay đổi?
2. các khung còn lại LUÔN LUÔN chỉ có 1 dòng hay có thể thay đổi?
3. LUÔN LUÔN chỉ có 24 khung được xếp thành 6 hàng, 4 cột hay số khung có thể lớn hơn / nhỏ hơn 24.
4. Những khung ở cột 1 LUÔN LUÔN chiếm 3 cột của sheet hay có thể thay đổi?
5. Mỗi khung LUÔN LUÔN là merge nhiều ô hay hổ lốn - có khung do merge nhiều ô có khung chỉ chiếm 1 ô? Tại sao phải hổ lốn như vậy mà không đồng bộ - mỗi khung đều gộp từ a dòng và b cột?

Tóm lại, hãy mô tả lại cấu trúc dữ liệu. Nếu tôi hiểu được thì tôi giúp còn không bạn tự làm. Mà phải đính kèm tập tin chứ tôi không làm việc với ảnh.
 
Upvote 0
Phải biết cấu trúc để viết code.
Tại sao không đồng bộ, tại sao khung 1 có 2 cột B: D còn mỗi khung 2, 3, 4 chỉ có 1 cột? 1, 2, 3, 4 có 3 hàng trong khi các khing còn lại chỉ có 1 dòng?

Hãy trả lời các câu hỏi sau.
1. khung 1, 2, 3, 4 LUÔN LUÔN có 3 dòng hay số dòng có thể thay đổi?
2. các khung còn lại LUÔN LUÔN chỉ có 1 dòng hay có thể thay đổi?
3. LUÔN LUÔN chỉ có 24 khung được xếp thành 6 hàng, 4 cột hay số khung có thể lớn hơn / nhỏ hơn 24.
4. Những khung ở cột 1 LUÔN LUÔN chiếm 3 cột của sheet hay có thể thay đổi?
5. Mỗi khung LUÔN LUÔN là merge nhiều ô hay hổ lốn - có khung do merge nhiều ô có khung chỉ chiếm 1 ô? Tại sao phải hổ lốn như vậy mà không đồng bộ - mỗi khung đều gộp từ a dòng và b cột?

Tóm lại, hãy mô tả lại cấu trúc dữ liệu. Nếu tôi hiểu được thì tôi giúp còn không bạn tự làm. Mà phải đính kèm tập tin chứ tôi không làm việc với ảnh.
Dạ !
1. Đây là em làm ví dụ nhiều trường hợp. Còn thực tế tất cả các khung 1, 2, 3, 4 luôn luôn có 3 cột hoặc 3 dòng. (Như em đã nói ở trên có form các khung luôn 5 cột hoặc hơn nhưng phải đồng bộ)
2. Các khung còn lại cũng là Luôn Luôn đồng bộ như vậy.
3. KHÔNG LUÔN LUÔN, có thể là 16 khung 4 cột, 4 hàng, có thể 12 khung 6 cột 2 hàng. Tuỳ vào từng form nhưng trong form đó các khung phải giống nhau.
4. Cũng tuỳ vào từng form ạ, có thể thay đổi.
5. Mỗi khung đều merge từ nhiều ô và các khung đều đồng bộ. Kia là ảnh nó tự hổ lốn đó anh ạ. Tức là nó chỉ hiển thị ở ô bé đó thôi chứ không hết khung khi chèn.

Máy tính ở công ty em không vào được mạng bên ngoài ạ. Em rất xin lỗi về vấn đề này.
Bài đã được tự động gộp:

Phải biết cấu trúc để viết code.
Tại sao không đồng bộ, tại sao khung 1 có 2 cột B: D còn mỗi khung 2, 3, 4 chỉ có 1 cột? 1, 2, 3, 4 có 3 hàng trong khi các khing còn lại chỉ có 1 dòng?

Hãy trả lời các câu hỏi sau.
1. khung 1, 2, 3, 4 LUÔN LUÔN có 3 dòng hay số dòng có thể thay đổi?
2. các khung còn lại LUÔN LUÔN chỉ có 1 dòng hay có thể thay đổi?
3. LUÔN LUÔN chỉ có 24 khung được xếp thành 6 hàng, 4 cột hay số khung có thể lớn hơn / nhỏ hơn 24.
4. Những khung ở cột 1 LUÔN LUÔN chiếm 3 cột của sheet hay có thể thay đổi?
5. Mỗi khung LUÔN LUÔN là merge nhiều ô hay hổ lốn - có khung do merge nhiều ô có khung chỉ chiếm 1 ô? Tại sao phải hổ lốn như vậy mà không đồng bộ - mỗi khung đều gộp từ a dòng và b cột?

Tóm lại, hãy mô tả lại cấu trúc dữ liệu. Nếu tôi hiểu được thì tôi giúp còn không bạn tự làm. Mà phải đính kèm tập tin chứ tôi không làm việc với ảnh.
Em ví dụ ở đây là mỗi khung được gộp từ 6 cột và 6 hàng. Như ảnh bên dưới khi chèn vào nó chỉ hiển thị ở D5 chứ không to hết khung và center
Các khung đồng bộ và khác form có thể thay đổi số hàng và số cột/khung
Nếu được anh co thể tải giúp em file đính kèm ở #8 và gộp cột và hàng thành khung như ảnh em gửi dưới đây được không ạ?
 

File đính kèm

  • F7829B99-9AEF-4BC6-99FE-22C8DBB03156.jpeg
    F7829B99-9AEF-4BC6-99FE-22C8DBB03156.jpeg
    134.9 KB · Đọc: 11
Lần chỉnh sửa cuối:
Upvote 0
1. Đây là em làm ví dụ nhiều trường hợp. Còn thực tế tất cả các khung 1, 2, 3, 4 luôn luôn có 3 cột hoặc 3 dòng. (Như em đã nói ở trên có form các khung luôn 5 cột hoặc hơn nhưng phải đồng bộ)
2. Các khung còn lại cũng là Luôn Luôn đồng bộ như vậy.
3. KHÔNG LUÔN LUÔN, có thể là 16 khung 4 cột, 4 hàng, có thể 12 khung 6 cột 2 hàng. Tuỳ vào từng form nhưng trong form đó các khung phải giống nhau.
5. Mỗi khung đều merge từ nhiều ô và các khung đều đồng bộ. Kia là ảnh nó tự hổ lốn đó anh ạ. Tức là nó chỉ hiển thị ở ô bé đó thôi chứ không hết khung khi chèn.
Tốt nhất bạn nhập vào 3 ô, vd. A27 - tên ô mà ở đó khung 1 bắt đầu, B27 - số khung ở hàng ngang, C27 - số khung ở hàng dọc. Vd. B5, 4, 6.

Tôi nói hổ lốn vì tôi nhìn vào khung chứ không nhìn vảo ảnh. Rõ ràng các khung ở hàng 2, 3, 4, ... đều chỉ có 1 hàng là 8, 9, 10 - rõ ràng 1 hàng, đúng không?

Lúc thì khung bắt đầu từ B5, lúc như bài này thì bắt đầu từ D5. Thế này thì code chịu rồi. Lúc thì xếp thành 4 cột 6 hàng, lúc thì 6 cột 2 hàng. Thế này thì code chịu rồi. Code phải đi dò xem khung 1 bắt đầu từ đâu trong hàng nghìn cột, hàng triệu dòng? Rồi dò xem chúng được xếp thành mấy cột mấy dòng? Cũng được thôi nhưng phải nêu qui tắc để code có thể lấy làm tiêu chí để dò. BẮT ĐẦU từ hàng cột này này này, các khung đều là merge của > 1 ô, còn các ô không được gộp thì CHẮC CHẮN không thuộc về khung. Nếu đảm bảo thế thì code cũng dò được: tính từ ô BẮT ĐẦU đi sang ngang tới khi gặp ô không được merge thì dừng (có được số khung theo hàng ngang), sau đó đi từ ô BẮT ĐẦU xuống dưới tới khi gặp ô không được merge thì kết thúc (có được số khung theo hàng dọc).

Bạn đảm bảo được như trên? Nếu thế thì định kèm tập tin Excel.
 
Lần chỉnh sửa cuối:
Upvote 0
Tốt nhất bạn nhập vào 3 ô, vd. A27 - tên ô mà ở đó khung 1 bắt đầu, B27 - số khung ở hàng ngang, C27 - số khung ở hàng dọc. Vd. B5, 4, 6.

Tôi nói hổ lốn vì tôi nhìn vào khung chứ không nhìn vảo ảnh. Rõ ràng các khung ở hàng 2, 3, 4, ... đều chỉ có 1 hàng là 8, 9, 10 - rõ ràng 1 hàng, đúng không?

Lúc thì khung bắt đầu từ B5, lúc như bài này thì bắt đầu từ D5. Thế này thì code chịu rồi. Lúc thì xếp thành 4 cột 6 hàng, lúc thì 6 cột 2 hàng. Thế này thì code chịu rồi. Code phải đi dò xem khung 1 bắt đầu từ đâu trong hàng nghìn cột, hàng triệu dòng? Rồi dò xem chúng được xếp thành mấy cột mấy dòng? Cũng được thôi nhưng phải nêu qui tắc để code có thể lấy làm tiêu chí để dò. BẮT ĐẦU từ hàng cột này này này, các khung đều là merge của > 1 ô, còn các ô không được gộp thì CHẮC CHẮN không thuộc về khung. Nếu đảm bảo thế thì code cũng dò được: tính từ ô BẮT ĐẦU đi sang ngang tới khi gặp ô không được merge thì dừng (có được số khung theo hàng ngang), sau đó đi từ ô BẮT ĐẦU xuống dưới tới khi gặp ô không được merge thì kết thúc (có được số khung theo hàng dọc).

Bạn đảm bảo được như trên? Nếu thế thì định kèm tập tin Excel.
Dạ. Để em về nhà rồi đính kèm tệp sau. Chứ em chụp ảnh lung tung quá. Rất xin lỗi anh và vẫn mong nhận được sự giúp đỡ của anh.
 
Upvote 0
Web KT

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

Back
Top Bottom