Проблемы с .find и датой в разных приложениях/экземплярах Excel

Надеясь, что у кого-то может быть подсказка, могу ли я что-нибудь сделать, чтобы обойти проблему, с которой я сталкиваюсь. Может быть сложно добавить код, который я использую, так как он очень большой.

У меня есть таблица с календарными датами в первом столбце. Все они представлены в формате дд/мм/гггг. В VBA я хочу найти дату и найти номер строки в календаре, используя следующее:

FirstRow = Workbooks(WorkbookSelected.Name).Sheets("Tables").Columns(1).Find(ConfirmedDate, SearchOrder:=xlByRows, SearchDirection:=xlPrevious, LookAt:=xlWhole).Row

Подтвержденная дата хранится как переменная даты, которая также берется из календаря, но к ней добавляются дни. Я ищу в двух разных книгах, чтобы найти FirstRow. Если обе книги находятся в одном приложении/экземпляре Excel, этот код работает нормально.

Но если я открою вторую книгу в новом экземпляре Excel, возникнут ошибки, потому что дата не найдена. Что-то происходит с датой во 2-м приложении. Если я использую format(ConfirmedDate, "dd/mm/yyyy"), он найдет его во второй книге. Но этот код не будет работать в исходной книге. Код, аналогичный приведенному выше, но просто ссылающийся на экземпляр Excel, который необходимо изучить. Я получаю Runtime Error 91, когда он не находит его.

FirstRow = ExcelInstanceSelected.Workbooks(WorkbookSelected.Name).Sheets("Tables").Columns(1).Find(ConfirmedDate, SearchOrder:=xlByRows, SearchDirection:=xlPrevious, LookAt:=xlWhole).Row

FirstRow = ExcelInstanceSelected2.Workbooks(2ndWorkbookSelected.Name).Sheets("Tables").Columns(1).Find(ConfirmedDate, SearchOrder:=xlByRows, SearchDirection:=xlPrevious, LookAt:=xlWhole).Row

Я пытаюсь найти способ найти дату в календаре независимо от того, какое приложение Excel я использую. Я попытался открыть книгу с локальным значением true (не помогает). Я пробовал комбинации формата, cdate, cdbl, lookin:=xlformulas. Ничто не будет работать с обеими книгами.

Это сводит меня с ума. Я могу только предположить, что .find во второй книге меняет формат сохраненной ConfirmedDate на американский формат m/dd/yyyy. Я просто не могу найти способ убедиться, что обе даты могут быть отформатированы в дд/мм/гггг в отношении того, как они начинаются.

Большое спасибо за любую помощь.

Чел


person Celeggur    schedule 09.02.2020    source источник
comment
Зачем использовать Workbooks(WorkbookSelected.Name).Sheets, а не просто WorkbookSelected.Sheets?   -  person K.Dᴀᴠɪs    schedule 09.02.2020
comment
Это именно то, как я изначально научился использовать просмотр разных книг. Я, конечно, могу изменить его, но это не решит проблему. Это поиск правильной рабочей тетради.   -  person Celeggur    schedule 09.02.2020
comment
Я не подразумевал, что это решит проблему, просто не имело никакого смысла. Это как сказать SUM(1+2) = 3 вместо 3 = 3. Вы без необходимости используете функцию (Workbooks()) для получения объекта рабочей книги, когда у вас уже есть объект рабочей книги.   -  person K.Dᴀᴠɪs    schedule 09.02.2020
comment
Я ценю, что вы указали на это, я изменю это в своем коде.   -  person Celeggur    schedule 09.02.2020
comment
Вам действительно не нужно его менять, я просто подумал, что укажу на это. Вы не сможете научиться, если мы никогда ничего не скажем :-)   -  person K.Dᴀᴠɪs    schedule 09.02.2020
comment
Это хорошо, чтобы указать. Это значительно уменьшит размер моего кода. Часть проблемы заключается в том, чтобы просто учиться самому, я уверен, что сделал много вещей, которые не являются лучшим способом сделать это.   -  person Celeggur    schedule 09.02.2020
comment
В Excel нет типа данных дата. Даты хранятся в виде серийных номеров с 1= 1-Jan-1900 или 1-Jan-1904. VBA имеет тип данных date, и найти даты на листе Excel может быть сложно. Взгляните на Excel VBA Range.Find Date That is a Formula   -  person Ron Rosenfeld    schedule 09.02.2020
comment
@ К. Дэвис - кое-что на заметку. Я попытался изменить объекты книги, как вы предложили, к сожалению, это не сработает, если нужно выбрать приложение Excel. Но это полезно, если я использую только один экземпляр. Так что спасибо тебе.   -  person Celeggur    schedule 10.02.2020
comment
@Ron - я быстро протестировал цикл, в котором вам нужно было найти даты, хотя это сработало, я не знаю, могу ли я использовать это сейчас (временные рамки слишком короткие, чтобы исправить код). Я до сих пор не понимаю, почему поиск дат в Великобритании работает в одной книге, но дата преобразуется в формат США при поиске в новых приложениях. Я могу обойти это, изменив формат дат в таблицах, чтобы он не менялся с региональными настройками. Но для этого потребуется поместить format() в каждый .find.   -  person Celeggur    schedule 10.02.2020
comment
Поиск базового числа в Excel относительно надежен. Похоже, в любом случае вам придется изменить свой код.   -  person Ron Rosenfeld    schedule 10.02.2020