Всем привет! Помогите, пожалуйста, по одному вопросу, связанному с кодовым распознанием, наличия связи в формулах. И мне нужно, что бы код не просто определял наличие связи, но и еще и то, какого масштаба связь: в рамках одного листа, одного файла или это связь на внешний другой файл. Для этого, я решил сделать следующим образом: '---------------------------------------------------------------------------- Sub ConectionRecognizeInsideFormul() strWorkBookName = "*" strSheetName = "Лист 1" strRange = "*" '--------------------------------- ConectionSimpleCase_FileInside_Type1 = "=" & strSheetName & "!" & strRange & "*" ConectionSimpleCase_FileInside_Type2 = "='" & strSheetName & "'!" & strRange & "*" '------ ConectionTextInsideCase_FileInside_Type1 = "=""*""&" & strSheetName & "!" & strRange & "*&""*""" ConectionTextInsideCase_FileInside_Type2 = "=""*""&'" & strSheetName & "'!" & strRange & "*&""*""" '------ 'ConectionSimpleCase_FileOutsideOpened_Type2 = "='[" & strWorkBookName & "]" & strSheetName & "'!" & strRange & "" ConectionSimpleCase_FileOutsideOpened_Type2 = "='[*]Лист 1'!*" ' без имени файла показывает true: "=*Лист 1'!*" '------ 'ActiveCell.FormulaR1C1 = "='[Имяфайла.xlsx]Лист 1'!R2C2" 'MsgBox ActiveCell.Formula = ConectionSimpleCase_FileOutsideOpened_Type2 MsgBox ActiveCell.Formula Like ConectionSimpleCase_FileOutsideOpened_Type2 ' ПОЧЕМУ НЕ ВЫДАЕТ True? Блин! (Структуру имени файла не воспринимает) End Sub '----------------------------------------------------------------------------
По внутренним связям (в рамках самого файла) все получается, а по связям со внешнего другого файла нет. И дело стопориться на следующем коде, при следующем, для примера тексте формулы в активной ячейке: “='[Имяфайла.xlsx]Лист 1'!$В$2":
MsgBox ActiveCell.Formula Like "='[*]Лист 1'!*"
Сообщение кода выдает результат: False Блин! Не могу понять почему?
Для указанного примера текста ячейки структура: Like"='[*]Лист 1'!*" указана правильно!
Я это уже проверил командой ActiveCell.Formula = "='[Имяфайла.xlsx]Лист 1'!$В$2" Ссылка нормально вводится при открытом файле с именем: “Имяфайла.xlsx” Так что, не могу понять, почему: Like"='[*]Лист 1'!*" для указанного текста формулы выдает: False, а по идее должна выдавать: True! Как только не пробовал, все без толку. Главное, когда в коде убираю частицу: [*] и ставлю звездочку, т.е. делаю так: Like"='*Лист 1'!*" тогда все нормально! Выдает True!
Поэтому! Ну, ничего не пойму! Че за дебилизм и кляуза этого языка VBA. Костлявого и не знаю еще какого. Или может я че то не до понимаю или не знаю? Прошу помощи у грамотных людей.
Спасибо большое! Накладка устранена! Все нормально работает. И выдает True! Надо же! Чуть не тот код и уже едва ли работало. Но символы: "[" "]" это как я понимаю, элемент обозначения языка VBA: ? - любой символ (один); #- одна цифра (0-9); [<список>] - символ, совпадающий с одним из символов списка; [!<список>] - символ, не совпадающий ни с одним из символов списка. И поэтому ошибка была в том, что у меня символы "[" "]" представляли собой не константы, а символы самого VBA. Просто как некоторые статьи пишут. Читаешь учебник или статью, а там все так скупо описано, много теории и нет практики. Не примеров, не задач! Ничего. Одна теория и просто болтовня. Все поверхностно и без важных деталей. Читал пару статей про операции со строками, пишут про команду Likeи про символ “*”, как обозначение команды, но при этом вообще не пишут про другие символы VBA, на пример "[" "]". А если пишут, то без примеров. Ну если ты пишешь про команду Likе “*”, напиши и про "[" "]". И с примерами. И дай полную картину и коротко и понятно. Кому как не тебе автору статьи не знать, что написав про Likе “*”, и не написав про "[" "]" как символы команды, изучающий неминуемо столкнется с той, с проблемой с которой я столкнулся. Теперь этот код работает на все случая наличия связи в формулах. Или почти на все. Скидываю, его если кто-то столкнется с аналогичной же проблемой.
Gigi написал: Ну если ты пишешь про команду Likе “*”, напиши и про "[" "]". И с примерами. И дай полную картину и коротко и понятно
Ну здесь Вы перегибаете явно. Никто Вам не должен доносить абсолютно все, да еще и в понятной именно Вам манере :-) Коротко и понятно для каждого по-разному звучит, поверьте. К тому же нельзя учесть абсолютно все нюансы. Плюс неизвестно где Вы и чего читали. Может человек и не пытался донести все нюансы оператора Like, а имел ввиду конкретную ситуацию. А может человек, написавший статью и сам не знал всех нюансов и просто хотел поделиться тем, что знает. Не надо быть столь критичным к другим.
Цитата
Gigi написал: но при этом вообще не пишут про другие символы VBA, на пример "[" "]"
Вы справку VBA открывали по оператору Like? Там все есть: и скобки, и звездочки, и вопр.знак. Однако конкретно Ваша ситуация там тоже не описана. Но написано следующее: To match the special characters left bracket ([), question mark (?), number sign (#), and asterisk (*), enclose them in brackets. The right bracket (]) can't be used within a group to match itself, but it can be used outside a group as an individual character.
Попробуйте для начала написать свою статью - увидите, всегда найдутся те, кому чего-то там будет не хватать. Так уж устроен мир - всегда найдется ситуация, которая еще нигде не встречалась ранее и поэтому не описана. И это хорошо ведь, согласитесь. Если бы все все знали - было бы скучно жить :-)
P.S. Для оформления кодов есть кнопочка <...>. Исправьте свои сообщения, пожалуйста. Вам об этом другой модератор уже писал, но Вы почему-то игнорируете.
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...