heyhey1994
Thành viên chính thức
- Tham gia
- 16/3/17
- Bài viết
- 78
- Được thích
- 18
Select và tiếp theo để làm gì bạn?!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 đỡ ạ.
View attachment 292341
Cảm ơn cả nhà.
Select xong em sẽ dùng code này để in toàn bộ ra pdf ạSelect và tiếp theo để làm gì bạn?!
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.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
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.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.
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)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 ạ
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
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.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
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.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
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
Sheets(Array("MSA1", "MSA2", "MSA3", "MSA4", "MSA5")).Select
Thay code này vào thế cho đoạn code của bạnDạ 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
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
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ừ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
Wb.ActiveSheet.Index + 1