ROZWIĄZANY: Błąd został spowodowany poprzez manipulowanie właściwości znaleźć w innym miejscuExcel VBA Abnormal Behavior of Cells.Find na scalonych komórek
jestem bardzo nowy w świecie VBA i miałem pytanie o jakimś nienormalnym zachowaniem funkcja Range .Find
, której doświadczam. Mam kod, który wywołuję podprogramem jak poniżej.
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
pullDataPckg
i section
są dwie tablice ciąg, dataSheet
jest obiektem arkusz i kod jest zlokalizowane w Sub
że nazywam się ciągnąć wartości danych z arkusza.
Nieprawidłowe zachowanie mam przeżywa to, że Find
zawsze zwraca komórkę jako Nothing
na moim drugim wywołaniu sub (Komórki wyszukiwane są wszystkie połączone komórki, które znam są w arkuszu i gdybym wtedy rozdzielić komórki metoda find jest w stanie zlokalizować komórkę).
Jeśli jednak zamiast tego użyję dataSheet.Range("A1:R999").Find(What:=section(j))
, metoda pomyślnie znajdzie komórkę. Tak więc problem zdawał się być z właściwością Cells
, gdy jest używany z połączonymi komórkami.
Wywołuję podrzędny dwukrotnie na tym samym arkuszu roboczym, więc dodałem wywołanie dataSheet.Cells.Find(What:="Known Value in section array of Second Sub Call")
i stwierdziłem, że ten sam kod po wykonaniu w pierwszym wywołaniu podrzędnym pomyślnie odnalazł scaloną komórkę, podczas gdy po wywołaniu w drugim wywołaniu podrzędnym nie powiodło się. znajdź scaloną komórkę (jeśli komórka została odłączona, zadziałała dla obu połączeń).
Miałem nadzieję, że ktoś może rzucić trochę światła na to, dlaczego metoda znalezienia się nie powiedzie, gdy zostanie wywołana do właściwości Cells
tylko w drugim wywołaniu podrzędnym i tylko z połączonymi komórkami. Ponieważ wartość testu jest zakodowana na stałe, można ją znaleźć za pomocą właściwości Range
/rozłączając komórkę, a ja przekazuję ten sam arkusz do obu wywołań Naprawdę drapię się w głowę, jak metoda Find
mogła zawodzić tylko podczas wyszukiwania scalonego komórka w drugim wywołaniu.
Edycja: nie są 5 połączone komórki, z których każda ma szerokość, która rozciąga się na: R i wysokość 2. Przed rozpoczęciem pętli jest wywołanie Sub zapełnia Tablica pullDataPckg
otwierając skoroszytu , przenoszenie informacji ze skoroszytu do tablicy, a następnie zamykanie skoroszytu. Podczas pobierania informacji z nowego skoroszytu wzywam Find() 3 razy.
nie może replikować wyniki (XL2013) szukana wartość. Pomiędzy wywołaniem twojego sub-pierwszego i drugiego czasu, używasz Find() do czegokolwiek innego? Byłoby pomocne, gdybyś mógł opublikować dokładne kroki w celu odtworzenia tego, co widzisz (np. - jakie zakresy scalono i jak wiele itd.). –
Nie mogłem tego odtworzyć. Ale uwaga dodatkowa dla każdego, kto bada: Nie dodawaj zegarka dla "Komórek" w VBE, aby sprawdzić, czy ma jakieś nieoczekiwane właściwości.Wydaje się, że przekonuje to VBE, że musi pobrać i przechować wartości każdej komórki w arkuszu (lub coś podobnego). Po prostu udało mi się zablokować komputer, wykorzystując 100% wykorzystanie pamięci ... – Mikegrann
Połączone zakresy mają szerokość (A: R) i wysokość (2). W powyższym podsiecie mam wywołanie innego subwołu tuż przed pętlą, która otwiera skoroszyt pobiera dane z niego do tablicy pullDataPckg, a następnie zamyka skoroszyt. Podczas pobierania danych ze skoroszytu używam funkcji Znajdź(). – wallabe