Xin hỏi mọi người cách select toàn bộ sheet phía sau 1 sheet

Liên hệ QC
Tôi tuân thủ nội quy khi đăng bài

heyhey1994

Thành viên chính thức
Tham gia
16/3/17
Bài viết
78
Được thích
18
Chào cả nhà,
Em đang làm 1 file tính, cần tạo 1 nút ấn vào sẽ select toàn bộ sheet sau sheet "FindSlabCapacity". Nhờ mọi người giúp đỡ ạ.
1688463129184.png

Cảm ơn cả nhà.
 
Select xong em sẽ dùng code này để in toàn bộ ra pdf ạ
Range("B2:K52").Select
ActiveSheet.PageSetup.PrintArea = "$B$2:$K$52"
ActiveWindow.SelectedSheets.PrintOut Copies:=1, Collate:=True
Bạn lặp qua các sheets với điều kiện tên sheet khác với sheet(không cần in) rồi chạy code của bạn thôi.
 
Upvote 0
Bạn lặp qua các sheets với điều kiện tên sheet khác với sheet(không cần in) rồi chạy code của bạn thôi.
Khi em chọn tất cả các sheet, chỉ cần run code trên là nó sẽ in toàn bộ và gộp lại chung 1 file pdf anh, nếu lặp từng sheet thì nó lại in nhiều lần. Và ở đây em biết chắc chắc các sheet cần in luôn ở sau sheet FindSlabCapacity nên muốn select 1 lần và run code trên.
Em gửi file để anh tham khảo ạ
 

File đính kèm

  • Crack Width.xls
    941 KB · Đọc: 3
Upvote 0
Khi em chọn tất cả các sheet, chỉ cần run code trên là nó sẽ in toàn bộ và gộp lại chung 1 file pdf anh, nếu lặp từng sheet thì nó lại in nhiều lần. Và ở đây em biết chắc chắc các sheet cần in luôn ở sau sheet FindSlabCapacity nên muốn select 1 lần và run code trên.
Em gửi file để anh tham khảo ạ
Mình không ngồi máy nên không thử được. Bạn thử code dưới xem được không, code này mình hỏi gpt. Đúng hơn chắc phải dùng phương thức này (đã chỉnh sửa)
Mã:
Sub SelectSheets()
    Dim ws1 As Worksheet
    Dim ws2 As Worksheet
    Dim selectedRange As Range
    
    ' Chọn Worksheet 1
    Set ws1 = ThisWorkbook.Sheets(1)
    
    ' Chọn Worksheet 2
    Set ws2 = ThisWorkbook.Sheets(2)
    
    ' Kết hợp các đối tượng Range của hai trang đã chọn
    Set selectedRange = Union(ws1.UsedRange, ws2.UsedRange)
    
    ' Chọn các trang đã kết hợp
    selectedRange.Select
    
    ' Các lệnh xử lý khác trên các trang đã chọn
    ' ...
End Sub
 
Lần chỉnh sửa cuối:
Upvote 0
Mình không ngồi máy nên không thử được. Bạn thử code dưới xem được không, code này mình hỏi gpt.
Mã:
Sub SelectSheets()
    Dim ws1 As Worksheet
    Dim ws2 As Worksheet
   
    ' Chọn Worksheet 1
    Set ws1 = ThisWorkbook.Sheets(1)
    ws1.Select
   
    ' Chọn Worksheet 2
    Set ws2 = ThisWorkbook.Sheets(2)
    ws2.Select
   
    ' Các lệnh xử lý khác trên các trang đã chọn
    ' ...
End Sub
Dạ cái em đang muốn làm là nó sẽ chọn toàn bộ toàn bộ các sheet rồi run đoạn code trên để in toàn bộ sheet chung 1 file pdf, còn nếu tạo vòng lặp hoặc liệt kê giống anh thì mỗi lần in chỉ in được 1 sheet ạ. Em có thử dùng marcro thì code nó thế này, em có thể bóc hết tên sheet sau sheet FindSlabCapacity nhưng ko biết gán vào code dưới như thế nào.

Sheets(Array("MSA1", "MSA2", "MSA3", "MSA4", "MSA5", "D12-200-0.2mm", "D12-150-0.2mm" _
, "D12-100-0.2mm", "D16-200-0.2mm", "D16-150-0.2mm", "D16-200 & D12-200-0.2mm")). _
Select

Túm lại là em chỉ muốn select nhiều sheet 1 lúc như hình em gửi ở đây thôi, nhưng lại mò hoài không ra :D


1688466723471.png
Bài đã được tự động gộp:

Dạ tiện em gửi luôn code em lấy sheet name vào 1 array, nhờ anh xem thử có lồng được vào cái code sheets(Array(...) không ạ
C++:
Sub AssignSheetNamesToArray()
    Dim wb As Workbook
    Dim listSheet() As String
    Dim sheetCount As Integer
    Dim i As Integer
    
    Set wb = ThisWorkbook
    
    sheetCount = wb.Sheets.Count
    ReDim listSheet(1 To sheetCount)
    

    For i = 1 To sheetCount
        If wb.Sheets(i).Index >= wb.Sheets("FindSlabCapacity").Index Then
            listSheet(i) = wb.Sheets(i).Name
        End If
    Next i
    
End Sub
 
Upvote 0
Dạ cái em đang muốn làm là nó sẽ chọn toàn bộ toàn bộ các sheet rồi run đoạn code trên để in toàn bộ sheet chung 1 file pdf, còn nếu tạo vòng lặp hoặc liệt kê giống anh thì mỗi lần in chỉ in được 1 sheet ạ. Em có thử dùng marcro thì code nó thế này, em có thể bóc hết tên sheet sau sheet FindSlabCapacity nhưng ko biết gán vào code dưới như thế nào.

Sheets(Array("MSA1", "MSA2", "MSA3", "MSA4", "MSA5", "D12-200-0.2mm", "D12-150-0.2mm" _
, "D12-100-0.2mm", "D16-200-0.2mm", "D16-150-0.2mm", "D16-200 & D12-200-0.2mm")). _
Select

Túm lại là em chỉ muốn select nhiều sheet 1 lúc như hình em gửi ở đây thôi, nhưng lại mò hoài không ra :D


View attachment 292343
Bài đã được tự động gộp:

Dạ tiện em gửi luôn code em lấy sheet name vào 1 array, nhờ anh xem thử có lồng được vào cái code sheets(Array(...) không ạ
C++:
Sub AssignSheetNamesToArray()
    Dim wb As Workbook
    Dim listSheet() As String
    Dim sheetCount As Integer
    Dim i As Integer
   
    Set wb = ThisWorkbook
   
    sheetCount = wb.Sheets.Count
    ReDim listSheet(1 To sheetCount)
   

    For i = 1 To sheetCount
        If wb.Sheets(i).Index >= wb.Sheets("FindSlabCapacity").Index Then
            listSheet(i) = wb.Sheets(i).Name
        End If
    Next i
   
End Sub
Thay các sheet muốn select vào Array.
Mã:
Sheets(Array("MSA1", "MSA2", "MSA3", "MSA4", "MSA5")).Select
 
Upvote 0
Dạ cái em đang muốn làm là nó sẽ chọn toàn bộ toàn bộ các sheet rồi run đoạn code trên để in toàn bộ sheet chung 1 file pdf, còn nếu tạo vòng lặp hoặc liệt kê giống anh thì mỗi lần in chỉ in được 1 sheet ạ. Em có thử dùng marcro thì code nó thế này, em có thể bóc hết tên sheet sau sheet FindSlabCapacity nhưng ko biết gán vào code dưới như thế nào.

Sheets(Array("MSA1", "MSA2", "MSA3", "MSA4", "MSA5", "D12-200-0.2mm", "D12-150-0.2mm" _
, "D12-100-0.2mm", "D16-200-0.2mm", "D16-150-0.2mm", "D16-200 & D12-200-0.2mm")). _
Select

Túm lại là em chỉ muốn select nhiều sheet 1 lúc như hình em gửi ở đây thôi, nhưng lại mò hoài không ra :D


View attachment 292343
Bài đã được tự động gộp:

Dạ tiện em gửi luôn code em lấy sheet name vào 1 array, nhờ anh xem thử có lồng được vào cái code sheets(Array(...) không ạ
C++:
Sub AssignSheetNamesToArray()
    Dim wb As Workbook
    Dim listSheet() As String
    Dim sheetCount As Integer
    Dim i As Integer
  
    Set wb = ThisWorkbook
  
    sheetCount = wb.Sheets.Count
    ReDim listSheet(1 To sheetCount)
  

    For i = 1 To sheetCount
        If wb.Sheets(i).Index >= wb.Sheets("FindSlabCapacity").Index Then
            listSheet(i) = wb.Sheets(i).Name
        End If
    Next i
  
End Sub
Thay code này vào thế cho đoạn code của bạn
Đôi khi vấn đề không khó nhưng ta cứ loay hoay vì thiếu có tí xíu
Chú ý nếu phía sau cái sheet kia mà không có sheet nào thì đi hoang nhé
Mã:
Sub AssignSheetNamesToArray()
    Dim wb As Workbook
    Dim listSheet()
    Dim i As Integer
    Dim n As Long
    Set wb = ThisWorkbook
    For i = 1 To wb.Sheets.Count
        If wb.Sheets(i).Index > wb.Sheets("FindSlabCapacity").Index Then
            n = n + 1
            ReDim Preserve listSheet(1 To n)
            listSheet(n) = wb.Sheets(i).Name
        End If
    Next i
    Sheets(listSheet).Select
End Sub
 
Upvote 0
Thay code này vào thế cho đoạn code của bạn
Đôi khi vấn đề không khó nhưng ta cứ loay hoay vì thiếu có tí xíu
Chú ý nếu phía sau cái sheet kia mà không có sheet nào thì đi hoang nhé
Mã:
Sub AssignSheetNamesToArray()
    Dim wb As Workbook
    Dim listSheet()
    Dim i As Integer
    Dim n As Long
    Set wb = ThisWorkbook
    For i = 1 To wb.Sheets.Count
        If wb.Sheets(i).Index > wb.Sheets("FindSlabCapacity").Index Then
            n = n + 1
            ReDim Preserve listSheet(1 To n)
            listSheet(n) = wb.Sheets(i).Name
        End If
    Next i
    Sheets(listSheet).Select
End Sub
Cái này tui nghỉ chạy từ
Mã:
Wb.ActiveSheet.Index + 1
thì nó sẽ đỡ một câu lệnh IF.
 
Upvote 0
Dạ em đã làm được rồi, cảm ơn tất cả mọi người ạ :D
 
Upvote 0
Web KT

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

Back
Top Bottom