2015-08-27 13 views
5

Bất kỳ ý tưởng nào tại sao chèn điểm ngắt và dừng không còn dừng mã vba của tôi chạy nữa?Điểm VBA Excel Break và Stop không hoạt động

Mã chạy ok đến cuối (tôi đã thử nghiệm) nhưng bỏ qua các điểm ngắt và Dừng.

Đồng thời, bước vào chỉ làm cho mã chạy hoàn toàn, bỏ qua các điểm ngắt và dừng.

Khi tôi đóng sổ làm việc nơi sự cố có vẻ bắt nguồn từ cùng một vấn đề xảy ra trong các sổ làm việc macro khác.

nếu tôi đóng hoàn toàn excel và mở lại bằng sổ làm việc macro thông thường, vấn đề không xảy ra cho đến khi tôi mở lại sổ làm việc vấn đề.

tôi thêm breakpoint trên:

TotP1 = 0 

của đoạn mã sau:

Option Explicit 

Private Country As String 
Private Measure As String 
Private P1 As String 
Private P2 As String 
Private TotP1 As Double 
Private TotP2 As Double 


Sub VennDisplayIt() 

Dim SI() As String 
Dim SICount As Integer 
Dim x As Integer 
Dim OSh As Worksheet 
Dim BrandListBox As Object 
Dim VennGroup As Shape 

TotP1 = 0 
TotP2 = 0 


Set OSh = ThisWorkbook.Sheets("Venn") 

Set BrandListBox = OSh.OLEObjects("BrandListBox").Object 

ReDim SI(2, 0) 

For x = 0 To BrandListBox.ListCount - 1 

    If BrandListBox.Selected(x) = True Then 
     'If UBound(SI) < 4 Then 
      ReDim Preserve SI(2, UBound(SI, 2) + 1) 

      SI(1, UBound(SI, 2)) = BrandListBox.List(x) 
      SI(2, UBound(SI, 2)) = x + 1 
     'End If 

    End If 

Next x 


If UBound(SI, 2) < 2 Then 
    BrandListBox.Selected(BrandListBox.ListIndex) = True 
    Exit Sub 
ElseIf UBound(SI, 2) > 4 Then 
    BrandListBox.Selected(BrandListBox.ListIndex) = False 
    Exit Sub 
End If 

For x = 1 To UBound(SI, 2) 
    OSh.Range("o8").Offset(x, 0).Value = SI(1, x) 
    OSh.Range("o8").Offset(x + 5, 0).Value = SI(1, x) 
Next x 

For x = UBound(SI, 2) + 1 To 4 
    OSh.Range("o8").Offset(x, 0).Value = "" 
    OSh.Range("o8").Offset(x + 5, 0).Value = "" 
Next x 


SICount = UBound(SI, 2) 

For x = 1 To OSh.Shapes.Count 
    If Right(OSh.Shapes(x).Name, 5) = "Group" Then 
    If LCase(OSh.Shapes(x).Name) = SICount & "waygroup" Then 
     Set VennGroup = OSh.Shapes(x) 
     OSh.Shapes(x).Visible = True 
    Else 
     OSh.Shapes(x).Visible = False 
    End If 
    End If 

Next x 

For x = 1 To SICount 

    VennGroup.GroupItems.Item(SICount & "WayBrand" & x).DrawingObject.Text = SI(1, x) 

Next x 


Country = ThisWorkbook.Sheets("Venn").Range("D4").Value 
Measure = ThisWorkbook.Sheets("Venn").Range("E32").Value 
P2 = ThisWorkbook.Sheets("Venn").Range("E31").Value 
P1 = ThisWorkbook.Sheets("Selections").Range("B5").Value 


End Sub 
+1

Bạn có thể hiển thị mã và nơi đặt các điểm ngắt không? –

+0

Tôi vừa thêm mã. –

+2

Tôi chạy mã của bạn với một breakpoint trên 'TotP1 = ​​0' và nó đã phá vỡ có chính xác như nó phải. Vì vậy, tôi đoán là có thực sự là một cái gì đó bị hỏng trong bảng tính đó. –

Trả lời

1

Nếu breakpoint là trong mã của bạn, sau đó mã nên ngừng chạy ngay sau khi nó chạm dòng đó. Nguyên nhân có thể gây ra sự cố của bạn:

a) Mã không bao giờ được chuyển đến điểm ngắt. Dường như bạn không thể nhìn thấy khi bạn đang phá vỡ dòng đầu tiên của mã. Có lẽ bước qua tiểu (F8) chỉ để kiểm tra xem nó có chạy không.

b) Điểm ngắt của bạn đã bị xóa. Bất kỳ dòng nào có điểm ngắt sẽ hiển thị như được đánh dấu bằng màu đỏ trên IDE của bạn. Điểm ngắt của bạn có thể dễ dàng bị xóa qua, ví dụ: đóng và mở sổ làm việc (ảnh chụp màn hình sẽ thực sự hữu ích).

c) sổ làm việc của bạn bị hỏng theo một cách nào đó. Nó sẽ không thể phá vỡ một cái gì đó như là cơ bản như dừng lại ở breakpoint và vẫn hoạt động bình thường. Bạn có chắc là mã của bạn thực sự đang chạy không?

+0

Xin chào, Dường như là C). Tôi không thể bước qua mã như là một phần của vấn đề. tuy nhiên điểm break của tôi chắc chắn là đúng chỗ và được đánh dấu màu đỏ. mã chắc chắn đang chạy khi tôi đặt một quyền kiểm tra ở cuối để sửa đổi một ô và nó hoạt động. Tôi vừa mới chuyển mọi thứ sang một sổ làm việc mới và có vẻ như nó đang hoạt động tốt trong thời gian này. –

+0

Được rồi, vui mừng được giúp đỡ :) – Kaz

4

Tôi chưa bao giờ nghe nói về Stop không hoạt động, nhưng tôi đã nghe nói và trải nghiệm điều breakpoint nhiều lần. Khi bạn biên dịch VBA, nó tạo ra một mã p, được sử dụng bởi trình thông dịch. Bạn có lớp cú pháp VBA mà bạn có thể thấy và lớp mã p mà bạn không thể nhìn thấy. Khi các điểm dừng ngừng hoạt động, đó là do mã p bị hỏng. Tôi không biết tại sao nó lại xảy ra, nhưng nó đã xảy ra.

Khắc phục là xuất, xóa và nhập lại tất cả các mô-đun của bạn. Việc xuất chúng tạo ra một tệp .bas (văn bản thuần túy, thực sự). Khi bạn nhập lại, mã p được tạo lại từ đầu. Nếu bạn có nhiều hơn một vài mô-đun, hãy lấy CodeCleaner (bổ trợ miễn phí) và nó sẽ xuất và tự động nhập lại.

+1

Không chỉ có tôi không bao giờ có kinh nghiệm 'Stop' (như được viết trong mã) không làm việc, nhưng bất cứ khi nào tôi có (thường xuyên) vấn đề của breakpoints không vi phạm thực hiện và/hoặc mã các cập nhật không hiển thị khi thực thi, thêm một 'Ngừng' giải quyết nó ngay lập tức. Vì không có văn bản 'Stop' thực sự trong mã @OliverHumphreys, tôi tự hỏi liệu anh ta có thực sự nói về 'Stop' hay suy nghĩ về' F9' breakpoints/breakpoint có điều kiện không. – Tibo

0

Nếu một trong các cài đặt được bỏ chọn thì điểm ngắt sẽ không hoạt động. Bạn nên kiểm tra "Tùy chọn ứng dụng/tệp/Cơ sở dữ liệu/Ứng dụng/khóa đặc biệt hiện tại"

1

Chỉ để 'bình luận' Tibo: Tôi gặp vấn đề khi tôi có biểu mẫu với khoảng 5 chương trình con khác nhau. Một trong số chúng (gắn liền với một sự kiện nút) sẽ không dừng lại khi tôi đặt điểm ngắt. trong 10 năm viết VBA, tôi chưa bao giờ thấy điều đó xảy ra. Điều thú vị là, các điểm ngắt làm việc trên tất cả các chương trình con khác trong biểu mẫu đó. Sau nhiều lần gãi đầu và tìm kiếm, tôi đã nhận được bài viết này và bình luận của Tibo. Tôi đã thêm lệnh "Stop" vào chương trình con bị ảnh hưởng, chạy thủ tục (nó dừng lại vì nó cần phải có) và sau đó các điểm ngắt bắt đầu hoạt động trở lại! Mong rằng điều này sẽ giúp ai đó trong tương lai.

1

Chỉ chia sẻ một điều buồn cười đã xảy ra với tôi trong trường hợp nó giúp ai đó. Sai lầm tôi đã làm là tôi chỉ đơn giản là lấy mã phương thức của ai đó có nghĩa là cho sự kiện mở sổ làm việc và dán nó trên Sheet1 khu vực mã đối tượng excel. Vì vậy, không có khả năng phương pháp Workbook_Open bị sa thải bao giờ hết.

Private Sub Workbook_Open() 
    Stop 
    On Error Resume Next 
    Call ActiveSheet.Worksheet_Activate 
    On Error GoTo 0 
End Sub 

gì tôi phải làm là dán phương pháp này sau khi nhấp kép ThisWorkbook nút dưới Microsoft Excel Objects trong cửa sổ Project như hình dưới đây:

enter image description here

Note: Tác dụng phụ của sao chép dán những người khác mã có thể được freaky ở lần.

Các vấn đề liên quan