2016-08-11 18 views
5

QUYẾT: Lỗi là do thao tác tính find của nơi khácExcel VBA Hành vi bất thường của tế bào Cells.Find trên Merged

Tôi rất mới với thế giới của VBA và tôi đã có một câu hỏi về một số hành vi bất thường của phạm vi .Find chức năng tôi đã trải qua. Tôi có một số mã mà tôi gọi trong một chương trình con như dưới đây.

For i = 2 To UBound(pullDataPckg) 
     For j = 1 To UBound(section) 
      Set cell = dataSheet.Cells.Find(What:=section(j)) 
      'Below returns nothing on call 2, works for call 1 
      'Set cell = dataSheet.Cells.Find(What:="Value from section(j) in second call") 

      If Not cell Is Nothing Then 
       'Do some stuff 
      End If 
     Next 
Next 

pullDataPckgsection là hai mảng chuỗi, dataSheet là một đối tượng bảng và mã được tất cả nằm trong một Sub mà tôi gọi là để kéo giá trị dữ liệu từ một bảng tính.

Hành vi bất thường mà tôi gặp phải là Find luôn trả về ô là Nothing trên cuộc gọi thứ hai của phụ của tôi. phương pháp tìm kiếm có thể xác định vị trí ô).

Tuy nhiên, nếu thay vào đó tôi sử dụng dataSheet.Range("A1:R999").Find(What:=section(j)) thì phương pháp sẽ tìm thành công ô đó. Vì vậy, vấn đề dường như là với thuộc tính Cells khi được sử dụng với các ô đã phối.

Tôi gọi phụ hai lần trên cùng một trang tính vì vậy tôi đã thêm một cuộc gọi dataSheet.Cells.Find(What:="Known Value in section array of Second Sub Call") và thấy rằng cùng một mã khi được thực hiện trong cuộc gọi phụ đầu tiên tìm thấy thành công ô đã hợp nhất, trong khi thực hiện trong cuộc gọi phụ thứ hai, nó không thành công tìm ô đã hợp nhất (Nếu ô được bỏ gắn kết, nó hoạt động cho cả hai cuộc gọi). Tôi đã hy vọng một người nào đó có thể làm sáng tỏ một số lý do tại sao phương pháp tìm kiếm thất bại khi được gọi trên thuộc tính Cells chỉ trong cuộc gọi phụ thứ hai và chỉ với các ô đã hợp nhất. Vì giá trị thử nghiệm được mã hóa cứng, có thể được tìm thấy bằng cách sử dụng thuộc tính Range/hủy hợp nhất ô và tôi vượt qua cùng một trang tính cho cả hai cuộc gọi, tôi thực sự gãi đầu về cách phương thức Find có thể không thành công khi tìm kiếm sáp nhập trong cuộc gọi thứ hai.

EDIT: Có 5 sáp nhập các tế bào mà mỗi người đều có một chiều rộng kéo dài A: R và chiều cao 2. Ngay trước khi vòng lặp bắt đầu có một cuộc gọi đến một phụ các populates pullDataPckg mảng bằng cách mở một workbook , kéo thông tin từ sổ làm việc vào mảng, và sau đó đóng sổ làm việc. Khi nhận được thông tin từ sổ làm việc mới, tôi gọi Find() 3 lần.

+2

Không thể sao chép kết quả của bạn (XL2013) sử dụng một tiểu đơn giản và một khu vực sáp nhập có chứa giá trị đang được tìm kiếm. Ở giữa việc gọi phụ của bạn lần đầu tiên và lần thứ hai, bạn có đang sử dụng Tìm() cho bất kỳ điều gì khác không? Nó sẽ giúp đỡ nếu bạn có thể đăng các bước chính xác để tái tạo những gì bạn đang nhìn thấy (ví dụ - những gì phạm vi sáp nhập và bao nhiêu vv vv) –

+2

Tôi cũng không thể tái sản xuất này. Nhưng một lưu ý phụ cho bất cứ ai khác điều tra: Đừng thêm một chiếc đồng hồ cho 'Cells' trong VBE để kiểm tra xem nó có bất kỳ thuộc tính bất ngờ nào không.Rõ ràng, điều này thuyết phục VBE rằng nó cần phải lấy và lưu trữ các giá trị của mỗi tế bào trong bảng (hoặc một cái gì đó như thế). Chỉ cần quản lý để khóa máy tính của tôi bằng cách nhấn 100% mức sử dụng bộ nhớ ... – Mikegrann

+0

Phạm vi được hợp nhất có chiều rộng (A: R) và chiều cao (2). Trong sub đề cập ở trên tôi có một cuộc gọi đến một phụ khác ngay trước khi vòng lặp mở ra một bảng tính kéo dữ liệu từ nó vào mảng pullDataPckg và sau đó đóng sổ làm việc. Khi lấy dữ liệu từ sổ làm việc, tôi sử dụng Find(). – wallabe

Trả lời

1

Mọi cài đặt Find() liên tục giữa các cuộc gọi (giống như khi bạn sử dụng tìm qua giao diện người dùng).

Nếu việc sử dụng khác của bạn là Find, hãy thay đổi bất kỳ thông số nào khác ngoài What, bạn phải chắc chắn đặt lại các thông số đó trong bất kỳ cuộc gọi tiếp theo nào.

Nói chung nó luôn luôn tốt nhất để một cách rõ ràng bao gồm tất cả các đối số cho Find mà có thể ảnh hưởng đến kết quả (ví dụ như LookAt, LookIn vv)

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