Не удается получить доступ к ячейке в Excel с помощью сценария VBA

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

s_WS_string = Workbooks(s_WS_Filename).Sheets(s_WS_SheetName).Range(s_WS_col & s_WS_row).Value 

Где s_WS_col и s_WS_row — это определенные строки в сценарии VBA. Эта команда успешно извлекает данные. Однако,

OURS_string = Workbooks("OURS.xlsx").Sheets("Sheet1").Range(s_OURS_col & s_OURS_row).Value

Не. s_OURS_col и s_OURS_row также являются строками. WS обозначает рабочий лист, который представляет собой переменный рабочий лист, сравниваемый со статическим листом OURS.xlsx.

Это одна и та же команда, которой передаются параметры одного и того же типа, но одна из них извлекает данные из ячейки, а другая — нет. Я нахожусь в процессе репликации в другой среде для загрузки, если до этого дойдет.

Две строки предназначены для сравнения друг с другом и, если они не совпадают, для объединения и вывода на реплицированном рабочем листе. Основываясь на моем выводе и моей собственной отладке, я обнаружил, что он найдет значение в первой электронной таблице, но в статической электронной таблице OURS.xlsx, даже когда он получит доступ к ячейке, содержащей точно такие же данные, он останется пустым, и таким образом, считается не совпадающим.

Кто-нибудь еще видел эту проблему?

Редактировать 1: Уточнены некоторые проблемы.

Редактировать 2: я понимаю, что обе книги должны быть открыты, чтобы получить к ним доступ таким образом, и я уверяю вас, что обе книги открыты во время выполнения скрипта.

Редактировать 3: я прошел скрипт до того момента, когда он передает аргументы для доступа к значениям. Я проверил значения в обеих переданных ячейках, и они совпадают, но одно из них не извлекается из рабочей книги должным образом.


person valkn0t    schedule 11.05.2012    source источник
comment
Что делает вторая команда вместо получения значения ячейки? Любое сообщение об ошибке?   -  person Tim Williams    schedule 11.05.2012
comment
Нет сообщения об ошибке. Он просто выводится, как будто там, когда я проверяю его во время отладки, есть. Я работаю над репликацией, но в процессе я сталкиваюсь с дополнительными ошибками, с которыми я имею дело, поэтому я еще не реплицировал ее. Я продолжу работу над ним и выложу листы, когда они будут у меня.   -  person valkn0t    schedule 11.05.2012


Ответы (1)


Должно быть что-то не так хотя бы с одной из ваших переменных. Я воссоздал ваш случай с двумя книгами, Book1 и Book2, и добавил значение в ячейку A1 Sheet1 в каждой. Код работает нормально.

Sub TestCellValueFromWBs()
    Dim s_WS_string, Ours_string As String
    s_WS_string = Workbooks("Book1").Sheets("Sheet1").Range("a1").Value
    MsgBox s_WS_string

    Ours_string = Workbooks("Book2").Sheets("Sheet1").Range("a1").Value
    MsgBox Ours_string
End Sub

Войдите в свой код (F8) и проверьте значения переменных и убедитесь, что они указывают на правильные объекты.

person Jon Crowell    schedule 11.05.2012
comment
Они оба указывают на две разные ячейки, которые содержат одни и те же данные, я прошел через (ctrl-f8), пока не наткнулся на конкретную передаваемую ячейку, и дважды проверил, просматривая точный адрес, передаваемый в этот конкретный момент времени, и просто один ничего не видит, а другой видит. Я почти закончил воссоздавать его, я его немного. - person valkn0t; 11.05.2012
comment
Прошу прощения за то, что не вернулся, загрузил моему другу, который устранил это для меня, и обнаружил, что было несоответствие в том, как я обращался к ячейкам, при доступе к книге, которая была открыта, но не активна, вопрос был решен . Спасибо за помощь! - person valkn0t; 21.05.2012
comment
Не беспокойтесь - рад, что вы заставили его работать. Спасибо за обновление того, что произошло. - person Jon Crowell; 21.05.2012
comment
pastebin.com/6Si6shEN — это полный код для дальнейшего использования. Все еще в стадии разработки, но вы видите общую идею. - person valkn0t; 21.05.2012