Xét sự tồn tại của 1 Sheet

Liên hệ QC

themorzer

Thành viên chính thức
Tham gia
24/5/13
Bài viết
95
Được thích
1
Chào mọi người, mình có đoạn code sau
Mã:
Dim ws As Worksheet
For Each ws In Worksheets
If Worksheets("A") Is Empty Then
D=B+C "gia tri trong Work Sheet D=B+C"
Else
D=A+B+C "gia tri trong Work Sheet D=A+B+C"
End If
Next ws
mình không biết điều kiện để xác định Sheet đó có tồn tại hay không nên code bị lỗi Subcript out of range
cám ơn
 

File đính kèm

Chào mọi người, mình có đoạn code sau
Mã:
Dim ws As Worksheet
For Each ws In Worksheets
If Worksheets("A") Is Empty Then
D=B+C "gia tri trong Work Sheet D=B+C"
Else
D=A+B+C "gia tri trong Work Sheet D=A+B+C"
End If
Next ws
mình không biết điều kiện để xác định Sheet đó có tồn tại hay không nên code bị lỗi Subcript out of range
cám ơn
Công thức tại cell B1 ở sheet D bạn đang dùng là:
Mã:
=A!A1+B!A1+'C'!A1
Công thức này sẽ bị lỗi nếu sheet A, B hoặc C bị xóa
Vậy tại sao bạn không dùng:
Mã:
=SUM('A:C'!A1)
Dù bạn xóa hoặc chèn thêm sheet thì công thức vẫn cập nhật đúng
-----------------------
Còn liên quan đến việc xác định sự tồn tại của một sheet, bạn dùng hàm này:
Mã:
Function SheetExist(ByVal wksName As String) As Boolean
  On Error Resume Next
  SheetExist = Not Sheets(wksName) Is Nothing
End Function
 
Upvote 0
Công thức tại cell B1 ở sheet D bạn đang dùng là:
Mã:
=A!A1+B!A1+'C'!A1
Công thức này sẽ bị lỗi nếu sheet A, B hoặc C bị xóa
Vậy tại sao bạn không dùng:
Mã:
=SUM('A:C'!A1)
Dù bạn xóa hoặc chèn thêm sheet thì công thức vẫn cập nhật đúng
-----------------------
Còn liên quan đến việc xác định sự tồn tại của một sheet, bạn dùng hàm này:
Mã:
Function SheetExist(ByVal wksName As String) As Boolean
  On Error Resume Next
  SheetExist = Not Sheets(wksName) Is Nothing
End Function
chào thầy, cái file em đính kèm là mẫu nên em dùng công thức trên để cho mọi người hiểu là nếu Sheet A không tồn tại thì Sheet D= B+C ngược lại nếu Sheet A tồn tại thì Sheet D = A+B+C nên em cộng như vậy thôi
Vì chương trình chính của em có rất nhiều Sheet, nên nếu có Sheet tồn tại thì công thức khác so với không tồn tại
Nên em mới sử dụng code của em để lọc Sheet không tồn tại đó mà chưa dc
 
Upvote 0
chào thầy, cái file em đính kèm là mẫu nên em dùng công thức trên để cho mọi người hiểu là nếu Sheet A không tồn tại thì Sheet D= B+C ngược lại nếu Sheet A tồn tại thì Sheet D = A+B+C nên em cộng như vậy thôi
Thì tôi gợi ý bạn công thức =SUM('A:C'!A1) rồi đấy. Với công thức này, bạn đâu cần quan tâm đến sheet A có tồn tại hay không. Thâm chí khi gõ lên bảng tính, bạn có thể gõ tắt thế này =SUM('*'!A1) <--- Mặc kệ sheet tên gì
 
Upvote 0
chào thầy, cái file em đính kèm là mẫu nên em dùng công thức trên để cho mọi người hiểu là nếu Sheet A không tồn tại thì Sheet D= B+C ngược lại nếu Sheet A tồn tại thì Sheet D = A+B+C nên em cộng như vậy thôi
Thì tôi gợi ý bạn công thức =SUM('A:C'!A1) rồi đấy. Với công thức này, bạn đâu cần quan tâm đến sheet A có tồn tại hay không. Thâm chí khi gõ lên bảng tính, bạn có thể gõ tắt thế này =SUM('*'!A1) <--- Mặc kệ sheet tên gì
À em xin lỗi thầy, thầy không cần quan tâm đến công thức trong file đính kèm em, em chỉ cần sửa code trên #1 sao cho ở Sheet D nếu Có Sheet A thì D=A+B+C ngước lại nếu delete Sheet A D=B+C
 

File đính kèm

Upvote 0
À em xin lỗi thầy, thầy không cần quan tâm đến công thức trong file đính kèm em, em chỉ cần sửa code trên #1 sao cho ở Sheet D nếu Có Sheet A thì D=A+B+C ngước lại nếu delete Sheet A D=B+C
Muốn code thì có code:
Mã:
Sub Test()
  MsgBox Evaluate("SUM('*'!A1)")
End Sub
 
Upvote 0
Muốn code thì có code:
Mã:
Sub Test()
  MsgBox Evaluate("SUM('*'!A1)")
End Sub
em cám ơn sự giúp đỡ của thầy
Mã:
Dim ws As Worksheet

If Not Worksheets("A") Is Nothing Then
D=B+C "gia tri trong Work Sheet D=B+C"
Else
D=A+B+C "gia tri trong Work Sheet D=A+B+C"
End If
em muốn xử lý Sheet khi delete 1 Sheet theo hướng của code này
 
Upvote 0
em cám ơn sự giúp đỡ của thầy
Mã:
Dim ws As Worksheet

If Not Worksheets("A") Is Nothing Then
D=B+C "gia tri trong Work Sheet D=B+C"
Else
D=A+B+C "gia tri trong Work Sheet D=A+B+C"
End If
em muốn xử lý Sheet khi delete 1 Sheet theo hướng của code này
Thì tôi cũng đã cho bạn hàm tự tạo ở trên rồi còn gì. Thay vì:
Mã:
If Not Worksheets("A") Is Nothing Then
Bạn dùng:
Mã:
If SheetExist("A") Then
Vậy thôi
 
Upvote 0
Muốn thử sự tồn tại của 1 sheet (chỉ worksheet, không áp dụng được cho chartsheet) thì dùng code như sau
VBA:
Evaluate("ISREF('" & sheetName & "'!A1)"), hoặc:
Not Evaluate("IsError(" & sheetName & "!1:1)")
Worksheet:
=ISREF(INDIRECT("SheetName!A1"))
 
Upvote 0
Web KT

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

Back
Top Bottom