Tổng hợp sheet có chọn lọc bằng vb (1 người xem)

Liên hệ QC

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

khakha258

Thành viên mới
Tham gia
4/6/12
Bài viết
9
Được thích
1
Mình đang muốn tổng hợp các sheet lại thành một sheet tổng hợp, ngoại trừ 1 sheet tên là "PS". Cho hỏi code mình viết như vậy có đúng không
Mã:
dim i,j as interger
i = sheets.count
j = 1
  Do while (j<=i)
     If (sheets(j).Name = "PS") then
          Exit Do
          j=j+1
     else
           tổng hợp sheet
     end if
  Loop
Mình đã thử nhưng nó vẫn tổng hợp sheet "PS". Một điều nữa là sheets đó trên excel thì là "PS" trong khi view code thì bên porperties hiện name là "Sheet 11". Hay là mình phải thay = sheet 11 thay vì "PS" ?
 
Mình đang muốn tổng hợp các sheet lại thành một sheet tổng hợp, ngoại trừ 1 sheet tên là "PS". Cho hỏi code mình viết như vậy có đúng không
Mã:
dim i,j as interger
i = sheets.count
j = 1
  Do while (j<=i)
     If (sheets(j).Name = "PS") then
          Exit Do
          j=j+1
     else
           tổng hợp sheet
     end if
  Loop
Mình đã thử nhưng nó vẫn tổng hợp sheet "PS". Một điều nữa là sheets đó trên excel thì là "PS" trong khi view code thì bên porperties hiện name là "Sheet 11". Hay là mình phải thay = sheet 11 thay vì "PS" ?
Viết vậy sai rồi... vầy mới đúng:
PHP:
Dim i As Long, j As Long
i = Sheets.Count
j = 1
Do While (j <= i)
  If (Sheets(j).Name = "PS") Then Exit Do
  ''Tổng hợp sheet
  j = j + 1
Loop
Ngoài ra cũng có thể viết vầy sẽ dễ hiểu hơn
PHP:
Dim wks As Worksheet
For Each wks In ThisWorkbook.Worksheets
  If wks.Name <> "PS" Then
    ''Tổng hợp sheet
  End If
Next
Đây cũng chỉ là vòng lập duyệt các sheet thôi... vấn đề quan trong vẫn là code tổng hợp sheet được viết thế nào
 
Upvote 0
Trong VB không dùng If...Then...Else được hả bạn? Vì C# quen rồi nên qua đây thấy nhiều cái hơi lạ. Vậy là thay Esle bằng dấu ' ' à?
 
Upvote 0
Trong VB không dùng If...Then...Else được hả bạn? Vì C# quen rồi nên qua đây thấy nhiều cái hơi lạ. Vậy là thay Esle bằng dấu ' ' à?

Đương nhiên được, nhưng vấn đề nằm ở giải thuật (hướng đi) ---> Giải thuật của bạn sai, nói cho code làm theo, nó làm sai luôn
 
Upvote 0
Nếu được bạn xem giùm mình code đi, đã làm theo cách của bạn nhưng không đc, nó vẫn chép 1 đoạn của sheet "PS"
Mã:
Sub Macro1()    Dim i, j, r, h As Integer
    Dim row, note As Long
    Dim wrksht As Worksheet
    Dim vung, day, shtname, x, y As String
    i = Sheets.Count
    j = 1
    r = 1
    h = 1
    row = 15
    note = 2
    Sheets.Add after:=Sheets(Sheets.Count)
    Sheets(i + 1).Name = "Total"
    Sheets("Total").Select
    Cells(1, 1) = "Region"
        For Each wrksht In ThisWorkbook.Worksheets
            If (wrksht.Name <> "PS") Then
        Do While (j <= i)
            Do While (Sheets(j).Cells(r, 2) = "")
                    r = r + 1
                Loop
            Do While (Sheets(j).Cells(r, h) <> "")
                    h = h + 1
                Loop
            If (j > i) Then
                Sheets(j).Select
                x = Cells(r, 1).Address
                y = Cells(r, h).Address
                Range(x & ":" & y).Select
                Selection.Copy
                Sheets("Total").Select
                day = "B" & note
                Range(day).Select
                Selection.PasteSpecial Paste:=xlPasteValues
                note = note + 1
            End If
        Do While (Sheets(j).Cells(row, 3) <> "")
        row = row + 1
        Loop
            Sheets(j).Select
            x = Cells(r + 1, 1).Address
            y = Cells(row - 1, h - 1).Address
            Range(x & ":" & y).Select
            Selection.Copy
            Sheets("Total").Select
            day = "B" & note
            Range(day).Select
            Selection.PasteSpecial Paste:=xlPasteValues
            day = "A" & note
            Range(day) = Sheets(j).Name
            shtname = day & ":A" & note + row - (r + 1)
            Range(shtname).Select
            Selection.FillDown
            note = note + row - r
            row = 15
            j = j + 1
        Loop
        End If
        Next
        Sheets("Total").Select
        ActiveCell.SpecialCells(xlLastCell) = ""
        Columns(3).SpecialCells(xlCellTypeBlanks).EntireRow.Delete
        Cells.Select
        Cells.EntireColumn.AutoFit
        Cells.EntireRow.AutoFit
        Range("A1").Select
End Sub
 
Upvote 0
Web KT

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

Back
Top Bottom