Поиск & Замена в Excel

Язык Visual Basic на платформе .NET.

Модераторы: Ramzes, Sebas

KAPACb
Новичок
Новичок
 
Сообщения: 33
Зарегистрирован: 06.05.2006 (Сб) 10:29

Поиск & Замена в Excel

Сообщение KAPACb » 20.11.2006 (Пн) 18:40

Есть код:
Код: Выделить всё
   dim MSWord As Word.Application
   dim WDoc As Word.Document

   WDoc = MSWord.Documents.Open(CObj(FilePath))

            Dim MyFind As Word.Find

            MyFind = MSWord.ActiveWindow.Selection.Find

            MyFind.Replacement.ClearFormatting()

            With MyFind
               .Text = txtFrom
               .Replacement.Text = txtTo
               .Forward = True
               .Wrap = Word.WdFindWrap.wdFindContinue
               .Format = False
               .MatchCase = False
               .MatchWholeWord = False
               .MatchWildcards = False
               .MatchSoundsLike = False
               .MatchAllWordForms = False
            End With

            'пробуем заменить
            Try
               MyFind.Execute(Replace:=Word.WdReplace.wdReplaceAll)
            Catch ex As Exception
               MsgBox("Ошибка бла-бла-бла")
            End Try       


Соответственно, хочется полностью аналогичное по функциональности, но в Excel.

В лоб не получается (что само по себе странно, чай в одном пакете Word и Excel уже давно поставляются), покурил поиск тут и в яндексе - опять же ничего внятного.

Как сиё можно организовать в MS VS 2005 ?

lord0n
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 845
Зарегистрирован: 30.06.2005 (Чт) 9:55
Откуда: Moskow

Сообщение lord0n » 21.11.2006 (Вт) 10:16

а чем тебе не нравится просто передать екселю команду на поиск?
Теория - это когда что-то не работает и известно почему.
Практика - это когда что-то работает, но неизвестно почему.
Нам удалось совместить теорию с практикой, теперь ничего не работает и неизвестно почему.

KAPACb
Новичок
Новичок
 
Сообщения: 33
Зарегистрирован: 06.05.2006 (Сб) 10:29

Сообщение KAPACb » 21.11.2006 (Вт) 10:23

lord0n писал(а):а чем тебе не нравится просто передать екселю команду на поиск?


Как минимум тем, что я не знаю, как это сделать ;)

lord0n
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 845
Зарегистрирован: 30.06.2005 (Чт) 9:55
Откуда: Moskow

Сообщение lord0n » 21.11.2006 (Вт) 10:26

поставь макрос на запись
вызови поиск
поробуй найти ченить
посмотри код макроса :D
Теория - это когда что-то не работает и известно почему.
Практика - это когда что-то работает, но неизвестно почему.
Нам удалось совместить теорию с практикой, теперь ничего не работает и неизвестно почему.

KAPACb
Новичок
Новичок
 
Сообщения: 33
Зарегистрирован: 06.05.2006 (Сб) 10:29

Сообщение KAPACb » 21.11.2006 (Вт) 10:47

супер.
это я уже сделал, получил:

Cells.Replace What:="123", Replacement:="456", LookAt:=xlPart, _
SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
ReplaceFormat:=False

И что дальше ?

Может быть код в инит-посте не прозрачен (в смысле - при взгляде на него непонятно, чего он делает) ? Потому что на самом деле он раскидан по нескольким функциям, каждая из которых занимается строго свои делом (поэтому, собирая нужные строки, мог и забыть чего), соответственно хочется доделать эти функции, чтоб они могли работать и с Экселем.

Viper
Артефакт VBStreets
Артефакт VBStreets
Аватара пользователя
 
Сообщения: 4394
Зарегистрирован: 12.04.2005 (Вт) 17:50
Откуда: Н.Новгород

Сообщение Viper » 21.11.2006 (Вт) 11:01

Что значит, что дальше? Используй этот код.... Посморти в справке, что делает метод Replace, какие у него параметры и так далее
Весь мир матрица, а мы в нем потоки байтов!

KAPACb
Новичок
Новичок
 
Сообщения: 33
Зарегистрирован: 06.05.2006 (Сб) 10:29

Сообщение KAPACb » 21.11.2006 (Вт) 11:21

да, помощи от вас...

lord0n
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 845
Зарегистрирован: 30.06.2005 (Чт) 9:55
Откуда: Moskow

Сообщение lord0n » 21.11.2006 (Вт) 11:30

здесь тебя направляют, а не думают за тебя
у меня это все работало при вызове из vb.net
хотя давненько я так не изголялся, по мне проще екселевский файл как базу открыть
Теория - это когда что-то не работает и известно почему.
Практика - это когда что-то работает, но неизвестно почему.
Нам удалось совместить теорию с практикой, теперь ничего не работает и неизвестно почему.

KAPACb
Новичок
Новичок
 
Сообщения: 33
Зарегистрирован: 06.05.2006 (Сб) 10:29

Сообщение KAPACb » 21.11.2006 (Вт) 11:40

направения лично я не вижу.
вижу глубокомысленные рассуждения на тему
"Ну... ты эта.. того ! Ты делай как надо и всё у тебя будет правильно, во-о-от !"

Насчёт извращения - полностью согласен, однако мне никто не мог ответить на вопрос как заставить CrystalReports сохранять документы в формат MSOffice правильно, поэтому приходится писать аналог с чётко необходимым функционалом самому.

Viper
Артефакт VBStreets
Артефакт VBStreets
Аватара пользователя
 
Сообщения: 4394
Зарегистрирован: 12.04.2005 (Вт) 17:50
Откуда: Н.Новгород

Сообщение Viper » 21.11.2006 (Вт) 11:49

Тяжелый случай... В Excel нужное тебе действо делает функция (метод) Replace, это есть направление мысли... Способ ее использования зависит от нюансов твоей задачи, которые нам неизвестны. Так что смотри в справке, что и как делает указанный метод. Я думаю несложно будет применить метод Replace именно так как тебе нужно.
Весь мир матрица, а мы в нем потоки байтов!

KAPACb
Новичок
Новичок
 
Сообщения: 33
Зарегистрирован: 06.05.2006 (Сб) 10:29

Сообщение KAPACb » 21.11.2006 (Вт) 12:18

[о господи, за што ты ниспослал на меня орды суренов ?]

Да уж я наверное как-нибудь сам догадался, что необходимые мне действия производит метод Replace.

Я уже второй день спрашиваю, как его использовать применительно к MS VS 2005 VB.NET

Мне не интересно, ка его использовать в макросах VBA под оный эксель.
Мне не интересно, как его использовать из ворда для поиска по экселю.
Мне не интересно, как его использовать в VB 4.0 под 95-е винды
Мне не интересно, как его использовать в Visual Studio VB6.0
Мне не интересно, как его использовать в MS VS 2005: C#.NET

Мне интересно, как его использовать применительно к MS VS 2005 VB.NET

Для лучшего усвоения этого факта я приписал внизу инит поста соответствующую надпись и привёл код применительно именно к этой среде разработки.

Это что, так сложно понять ?

Для милицонеров поясняю ещё раз - в MS VS 2005 VB.NET по неизвестной мне причине отсутствует метод Microsoft.Office.Interop.Excel.Replace

И написать:

Dim MyFind As Excel.Find
MyFind = MSExcel.ActiveWindow.Selection.Find

тоже хрен получится.

Соответственно, весь этот пафосный отсыл к методу Replace превращается в пук в лужу из-за отсутствия указаний где его можно найти.
dixi

GSerg
Шаман
Шаман
 
Сообщения: 14286
Зарегистрирован: 14.12.2002 (Сб) 5:25
Откуда: Магадан

Сообщение GSerg » 21.11.2006 (Вт) 12:30

KAPACb, ты самый главный милиционер. Если ты ещё не понял, что в word есть объект find, а в excel есть метод replace, то может стихи тебе писать, а не программированием заниматься? Тебе который раз говорят - напиши код в Excel и посмотри!

Где его найти, блин... Сам же написал - http://bbs.vbstreets.ru/viewtopic.php?p=6640044#6640044, и после этого всё равно "где его найти"?
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

KAPACb
Новичок
Новичок
 
Сообщения: 33
Зарегистрирован: 06.05.2006 (Сб) 10:29

Сообщение KAPACb » 21.11.2006 (Вт) 13:13

Может быть уважаемым господам советчикам сначала самим хоть что-нибудь написать у себя (по данному вопросу, стественно) а потом советовать ?

это я к тому, что написав например:

Imports Microsoft.Office.Interop
Imports Microsoft.Office.Interop.Excel
Imports Microsoft.Office.Interop.Word
...
Cells.Replace(What:="123", Replacement:="456", LookAt:=xlPart, SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, ReplaceFormat:=False)

я получу ошибку "'Replace' is not a member of 'Microsoft.Office.Interop.Word.Cells'."

Патамушта у Microsoft.Office.Interop.Excel нету метода Cell.
И Replace тоже нет. Господа, сколько раз вам это нужно повторить ?

А ежели вы такие умные все, так чего строем не ходите не напишите пару строчек сюда ?

Абстрактно рассуждать "ну там где-нибудь есть этот метод, ты типа сам поищи, не маленький" я тоже могу...

GSerg
Где его найти, блин... Сам же написал - http://bbs.vbstreets.ru/viewtopic.php?p=6640044#6640044, и после этого всё равно "где его найти"?

Тов. Главный Милиционер различает среду разработки MSO Excel:VBA и MS VS 2005 VB.NET ?

Тов. Главный Милиционер способен понять, что код, приведённый мной, был написан в и для MSO Excel:VBA, а мне он нужен для MS VS 2005 VB.NET ?

Thomas
Бывалый
Бывалый
Аватара пользователя
 
Сообщения: 246
Зарегистрирован: 12.11.2005 (Сб) 0:17
Откуда: "Сказочное королевство"

Сообщение Thomas » 21.11.2006 (Вт) 13:20

KAPACb
Вы писали
мне никто не мог ответить на вопрос как заставить CrystalReports сохранять документы в формат MSOffice правильно

Могу посоветовать только одно, найти у себя вот эту папку
C:\Program Files\Microsoft Visual Studio 8\Crystal Reports\Samples\en\Code
там есть файл TutorialSampleCodeProjects.msi
установите этот туториал в отдельную папку (к примеру в другом логическом диске) и посмотрите вниметельно какие примеры использования предлагают сами создатели CrystalReport.

А в VB.NET привутствует [url=http://msdn.microsoft.com/library/rus/default.asp?url=/library/rus/vblr7/html/vafctreplace.asp]Replace
[/url]

Плюс можно самому воспользоваться поиском в MSDN.
Met vriendelijke groetjes
VS2008 Pro FW3.5 SP1

KAPACb
Новичок
Новичок
 
Сообщения: 33
Зарегистрирован: 06.05.2006 (Сб) 10:29

Сообщение KAPACb » 21.11.2006 (Вт) 13:28

Thomas писал(а):Могу посоветовать только одно, найти у себя вот эту папку
C:\Program Files\Microsoft Visual Studio 8\Crystal Reports\Samples\en\Code
там есть файл TutorialSampleCodeProjects.msi
установите этот туториал в отдельную папку (к примеру в другом логическом диске) и посмотрите вниметельно какие примеры использования предлагают сами создатели CrystalReport.


Всё это было внимательно рассмотрено и изучено в своё время, решения проблемы там нет.
Проблема состоит в том, что отчёт сохранённый в MSWord формат например искажается - размер шрифта становистя меньше на 0,5 пункта и соответственно всё форматирование летит в жопу. "Нам такой хоккей не нужен"

Thomas писал(а):А в VB.NET привутствует Replace
Плюс можно самому воспользоваться поиском в MSDN.


За отменное чуство юмора - мой вам респект, давно я так не смеялся...

GSerg
Шаман
Шаман
 
Сообщения: 14286
Зарегистрирован: 14.12.2002 (Сб) 5:25
Откуда: Магадан

Сообщение GSerg » 21.11.2006 (Вт) 13:30

KAPACb писал(а):Может быть уважаемым господам советчикам сначала самим хоть что-нибудь написать у себя (по данному вопросу, стественно) а потом советовать ?

Может бы тебе читать то, что тебе пишут, вместо того, чтобы долбить одну и ту же бессмыслицу?

KAPACb писал(а):я получу ошибку "'Replace' is not a member of 'Microsoft.Office.Interop.Word.Cells'."

Может быть ты откроешь глаза и увидишь слово WORD в ссылке Microsoft.Office.Interop.Word.Cells? Может быть тогда начнут появляться зачаточные мысли о том, что тебе нужен Microsoft.Office.Interop.Excel?

KAPACb писал(а):Тов. Главный Милиционер различает среду разработки MSO Excel:VBA и MS VS 2005 VB.NET ?

Тов. Главный Милиционер способен понять, что код, приведённый мной, был написан в и для MSO Excel:VBA, а мне он нужен для MS VS 2005 VB.NET ?

Ты правда думаешь, что есть отличия?.. Давно программируешь?.. Секунд пятнадцать?.. Иного варианта нет, раз ты не понимаешь, что объектная модель Office не зависит от среды, которая её использует.


[Added]

Блин, прямо эмоций не хватает...
Знаний ноль. Спутал класс word.cells со свойством excel.cells (уже достаточно характеризует...), которое имеет тип Range, ни черта не хочет разбираться ни в чём, но однако же всех назначил милиционерами...
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

KAPACb
Новичок
Новичок
 
Сообщения: 33
Зарегистрирован: 06.05.2006 (Сб) 10:29

Сообщение KAPACb » 21.11.2006 (Вт) 13:59

Может бы тебе читать то, что тебе пишут, вместо того, чтобы долбить одну и ту же бессмыслицу?


Я вас уверяю, что очень внимательно прочитываю все коменты.

Возможно, я плохо сформулировал проблему.

Итак, ещй раз.

Необходимо програмно открыть xls файл, выполнить там несколько действий "найти и заменить", сохранить его и закрыть.

С операциями открытия, сохранения и закрытия я уж справлюсь как-нибудь сам, ибо где они лежат я уже давно нашёл - по аналогии с Word'ом.

Подчёркиваю - программно. Так что не нужно мне рассказывать как 2 раза щёлкают на файле и где находится комбинация Ctrl+F. Точно так же мне не нужно рассказывать про богатство возможностей макросов в экселе. ПАТАМУШТО программа пишется на MS VS 2005 VB.NET, а вовсе даже не на MSO Excel:VBA и вовсе даже не на скриптах виндов.

Может быть ты откроешь глаза и увидишь слово WORD в ссылке Microsoft.Office.Interop.Word.Cells? Может быть тогда начнут появляться зачаточные мысли о том, что тебе нужен Microsoft.Office.Interop.Excel?


Я был о вас лучшего мнения.

Естественно, когда я написал это к студии (чтоб получить точный текст ошибки), я естественно обратил внимание, что он бухтит про Word. Именно потому я и дописал сверху
"Imports Microsoft.Office.Interop
Imports Microsoft.Office.Interop.Excel
Imports Microsoft.Office.Interop.Word"

чтобы показать наблюдательным людям, что Microsoft.Office.Interop.Excel тоже подключен. И референсах я вас уверяю - тоже обе библиотечки добавлены.

А на ворд он ругается патамушта существует interface Microsoft.Office.Interop.Word.Cell, однако в ём отсуствует метод Replace. Конечно, сообразить это великим гениям не под силу, такое доступно только тупицам, уже целых 15 секунд программирующим в студии.

Ты правда думаешь, что есть отличия?

Более того, я даже готов доказать это.
Порядок примерно такой:

- на тестовом компьютере создаётся макрос (через запись действий) операции "найти и заменить"
- полученный sub копируется в модуль в MS VS 2005 VB.NET
- производится попытка запустить программу.

Если программа успешно запустится и будет выполнять ровно те же действия, что и макрос в Excel, то я выплачиваю вам сумму, равную 100 $
Если программа не запустится, либо запустившись, будет выполнять действия неидентичные макросу, то вы мне выплачиваете сумму, равную 100 $

По желанию сторон, сумма может бытть увеличина.
Наблюдатели приветствуются.

Прошу указать удобное место и время проведения эксперимента.

KAPACb
Новичок
Новичок
 
Сообщения: 33
Зарегистрирован: 06.05.2006 (Сб) 10:29

Сообщение KAPACb » 21.11.2006 (Вт) 14:06

Знаний ноль. Спутал класс word.cells со свойством excel.cells (уже достаточно характеризует...), которое имеет тип Range, ни черта не хочет разбираться ни в чём

Да, здоровая самокритика - это хорошо, это мы одобрямс.

GSerg
Шаман
Шаман
 
Сообщения: 14286
Зарегистрирован: 14.12.2002 (Сб) 5:25
Откуда: Магадан

Сообщение GSerg » 21.11.2006 (Вт) 14:17

KAPACb писал(а):Именно потому я и дописал сверху
"Imports Microsoft.Office.Interop
Imports Microsoft.Office.Interop.Excel
Imports Microsoft.Office.Interop.Word"

чтобы показать наблюдательным людям, что Microsoft.Office.Interop.Excel тоже подключен. И референсах я вас уверяю - тоже обе библиотечки добавлены.

И какое же это имеет значение?
Или сам факт подключения библиотеки чудесным образом стал исправлять корявый код?
Если ты написал просто cells.replace, чего ты хочешь?..
Ты мне сначала покажи, как эта cells объявлена, и как ты её инициализируешь.
Потому что из сообщения об ошибке (после комментирования которого ты почему-то стал обо мне иного мнения) мне стало понятно, перечисленные в предыдущем предложении пункты тобой выполняются очень спорно.

А на ворд он ругается патамушта существует interface Microsoft.Office.Interop.Word.Cell, однако в ём отсуствует метод Replace. Конечно, сообразить это великим гениям не под силу, такое доступно только тупицам, уже целых 15 секунд программирующим в студии.

Word ругается не потому, что интерфейс существует, а потому, что ты указываешь использовать именно его (именно ты, именно ручками указываешь), хотя должен указывать использовать совсем другое.
Если ты не понимаешь этого и ссылаешься на то, что ах, интерфейс существует и вот, то конечно, 15 секунд и далее по тексту.


Ты правда думаешь, что есть отличия?

Более того, я даже готов доказать это.

- на тестовом компьютере создаётся макрос (через запись действий) операции "найти и заменить"
- полученный sub копируется в модуль в MS VS 2005 VB.NET
- производится попытка запустить программу.

И после этого перла ты пытаешься здесь кого-то убедить, что программируешь больше 15 секунд?.. Я в цитаты, наверное, скопирую это. Есть у нас такой топик в Трёпе, для особых образцов словесности...

Даже не знаю как начать...
Хм...
Ты не поймёшь, скорее всего, но я всё равно повторю сказанное выше всеми участниками и мной в том числе.
Неизменна объектная модель. Ты понимаешь, KAPACb, объектная модель - не код, заметь, а объектная модель. Это значит (внимание!), что если в коде макроса excel у объекта типа A есть метод по имени B, то этот же метод будет у объекта A и в столь обожаемом тобой VB .net 2005.

Я понимаю, что ты ни черта не умеешь пользоваться кнопкой F2 для нахождения объектов и их методов. Но всё же, наверное, стоило предположить именно это, а не то, что все вокруг милиционеры? Посмотри приписку [Added] в моём предыдущем посте. Тебе нужен microsoft.office.interop.excel.range.replace. Открой сам Excel. Нажми ещё и там F2, и убедись, что метод Replace в том же самом месте, у объекта Range.

Жаль, звание Дятил RayShade уже назначил, чесслово...
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

KAPACb
Новичок
Новичок
 
Сообщения: 33
Зарегистрирован: 06.05.2006 (Сб) 10:29

Сообщение KAPACb » 21.11.2006 (Вт) 14:34

Или сам факт подключения библиотеки чудесным образом стал исправлять корявый код?


Быват...
Вот например ежели я сейчас уберу библиотеку ворда, то среда разработки мне вывалит ворох ошибок.
А поставлю я её на место - сразу ашипки исчезнут. ;)

Если ты написал просто cells.replace, чего ты хочешь?..
Ты мне сначала покажи, как эта cells объявлена, и как ты её инициализируешь.


вай-вай, с ног на голову.
Вообще-то это я хотел именно это от вас узнать. Однакож окромя стройного хора "пиши cells.range и будет щастье" я ничего не дождался, пришлось написать и показать, что щастья не будет. А теперь по этому поводу ко мне же и претенции.

И после этого перла ты пытаешься здесь кого-то убедить, что программируешь больше 15 секунд?


Я тут никого ни в чём не пытаюсь убедить, я пытаюсь получить ответ на вопрос. Разница очучается ?

Неизменна объектная модель. Ты понимаешь, KAPACb, обектная модель - не код, заметь, а объектная модель.


Прогресс идёт семимильными шагами, чесслово. Сначала я пытаюсь убедить вас, что тупым copy-paste'ом из excel'я ничего путного не получится. А теперь вы, значится, объясняете это в обратку мне... "Спасибо, я в курсе" (с)
Правда, к чему тогда слова о том, что различий не существует непонятно, но это замнём для ясности

Тебе нужен microsoft.office.interop.excel.range.replace


Супер. Вместо того, чтобы писать простыни, достаточно было написать лишь это.

Спасибо.

ЗЫ. эксперимента, я так понял, не состоится ? Жаль, жаль, мне бы 100$ пригодились бы...

GSerg
Шаман
Шаман
 
Сообщения: 14286
Зарегистрирован: 14.12.2002 (Сб) 5:25
Откуда: Магадан

Сообщение GSerg » 21.11.2006 (Вт) 14:41

KAPACb, я вообще понимать перестаю - у тебя русский язык родной? :roll: Ты хоть понимал смысл того, что тебе говорили в этом топике?.. Тебе с самого начала говорили - запиши макрос, чтобы узнать, какой метод какого объекта использовать. Cells - это объект типа Range, KAPACb, это сразу же ясно любому программисту, настолько, что никому в этом топике не пришло в голову это объяснять, понимаешь?.. Ты должен был записать макрос в Excel, увидеть вызов метода Replace у объекта типа Range, и всё!.. Вместо этого ты загнул такую х..ню, обвиняя всех в том, что тебе отвечают не то, что ты хочешь?.. И даже в последнем посте, ты всё равно продолжил этот бред, о совпадении кода - причём продолжил, процитировав мои слова о совпадении объектной модели?..

Ты так и не понял, что тебе с самого начала все говорили то, что надо, и что объектная модель совпадает?.. При чём здесь копипаст из excel'а, KAPACb?.. Хоть адекватность в поступках должна какая-то быть?..
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

Viper
Артефакт VBStreets
Артефакт VBStreets
Аватара пользователя
 
Сообщения: 4394
Зарегистрирован: 12.04.2005 (Вт) 17:50
Откуда: Н.Новгород

Сообщение Viper » 21.11.2006 (Вт) 14:46

В очередной раз поражаюсь терпению GSerg! Топик целиком в цитаты, или прицепить... Такого упорствования в своих заблуждениях давненько не было...

Итак, проявим спокойтвие и таки спросим, а что же надо найти и заменить на Экселевском листе? И что мы имеем из написанного кода на данный момент?

З.Ы. Чую, что ответа от автора здесь уже не будет... будем ждать на соседних форумах...
Весь мир матрица, а мы в нем потоки байтов!

KAPACb
Новичок
Новичок
 
Сообщения: 33
Зарегистрирован: 06.05.2006 (Сб) 10:29

Сообщение KAPACb » 21.11.2006 (Вт) 15:01

Ты хоть понимал смысл того, что тебе говорили в этом топике?.. Тебе с самого начала говорили - запиши макрос, чтобы узнать, какой метод какого объекта использовать.


Никоим образом. Я процитирую, что именно мне советовали:

1) просто передать екселю команду на поиск
2) поставь макрос на запись
вызови поиск
поробуй найти ченить
посмотри код макроса
3) Посморти в справке, что делает метод Replace, какие у него параметры и так далее
4) смотри в справке, что и как делает указанный метод
5) напиши код в Excel и посмотри

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

Так что не надо ля-ля.

Ты должен был записать макрос в Excel, увидеть вызов метода Replace у объекта типа Range, и всё!..


Простите, где здесь вы видите слово "Range":

Sub Макрос1()
'
Cells.Replace What:="1123", Replacement:="1233", LookAt:=xlPart, _
SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
ReplaceFormat:=False
End Sub

Вместо этого ты загнул такую х..ню


А зачем её сразу после этих слов загнули вы ?

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

Итак, проявим спокойтвие и таки спросим, а что же надо найти и заменить на Экселевском листе?


А что, большая разница есть что именно искать ?

И что мы имеем из написанного кода на данный момент?


первую часть каждый желающий может лицезреть выше.
Необходиое дополнение уже написано (впрочем, без вашей неоценимой помощи) и выглядит так:
Try
MSExcel.ActiveWindow.RangeSelection.Replace(CObj(txtFrom), CObj(txtTo), _
XlLookAt.xlPart, XlSearchOrder.xlByRows, CObj(False), CObj(False), _
CObj(False), CObj(False))
Catch
MsgBox("Ошибка бла-бла-бла")
End Try

GSerg
Шаман
Шаман
 
Сообщения: 14286
Зарегистрирован: 14.12.2002 (Сб) 5:25
Откуда: Магадан

Сообщение GSerg » 21.11.2006 (Вт) 15:20

KAPACb писал(а):Никоим образом. Я процитирую, что именно мне советовали:

1) просто передать екселю команду на поиск
2) поставь макрос на запись
вызови поиск
поробуй найти ченить
посмотри код макроса
3) Посморти в справке, что делает метод Replace, какие у него параметры и так далее
4) смотри в справке, что и как делает указанный метод
5) напиши код в Excel и посмотри

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

Так что не надо ля-ля.

Господа, те, кто не участвовал в этом топике ещё, посмотрите пожалуйста на этот (ещё один) перл незамыленным взглядом и скажите, что это. Я вижу в нём, как не совсем адекватный человек утверждает, что 1+1 никоим образом не равно 2. Я что, совсем ничего не понимаю?..


KAPACb писал(а):Простите, где здесь вы видите слово "Range"

Sub Макрос1()
'
Cells.Replace What:="1123", Replacement:="1233", LookAt:=xlPart, _
SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
ReplaceFormat:=False
End Sub

Не надоело расписываться в собственном бессилии и некомпетентности?.. Если ты не понимаешь разницы между объектом и свойством объекта - о чём вообще речь? Если угодно, Cells в этом коде можно рассматривать как имя переменной. Ты никогда не писал ничего типа Dim A as Long? И если потом в коде ты видишь строчку, где используется A, ты будешь долбиться лбом в стенку, утверждая, что никоим образом не известно, что A - это Long, поскольку, дескать, в выражении A=5 слова Long нет?..


KAPACb писал(а):Я на протяжении всего топика недоумеваю, зачем мне предлагают копировать код, а теперь выясняется, что эту как вы выразились х..ню оказывается предложил я.

Процитируй, пожалуйста, место, где тебе предлагали копировать код. Тебе предлагали его понять, KAPACb. Но это невозможно. Поэтому давай, давай, процитируй то место, где тебе предлагают его копировать. Мы ждём.
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

KAPACb
Новичок
Новичок
 
Сообщения: 33
Зарегистрирован: 06.05.2006 (Сб) 10:29

Сообщение KAPACb » 21.11.2006 (Вт) 16:24

утверждая, что никоим образом не известно, что A - это Long, поскольку, дескать, в выражении A=5 слова Long нет?


Лично мне было неизвестно, что Cell это есть переменная типа Range, и что ? Я разве где-то писал, что я супер гуру VBA ?

А из выражения A=5 вовсе даже не следует, что чуть пораньше А объявили как Long. ;)

Процитируй, пожалуйста, место, где тебе предлагали копировать код.


говно вопрос, как говорится:

"Тов. Главный Милиционер способен понять, что код, приведённый мной, был написан в и для MSO Excel:VBA, а мне он нужен для MS VS 2005 VB.NET ?

Ты правда думаешь, что есть отличия?"

GSerg
Шаман
Шаман
 
Сообщения: 14286
Зарегистрирован: 14.12.2002 (Сб) 5:25
Откуда: Магадан

Сообщение GSerg » 21.11.2006 (Вт) 16:31

KAPACb писал(а):Лично мне было неизвестно, что Cell это есть переменная типа Range, и что ? Я разве где-то писал, что я супер гуру VBA ?

Разумеется писал, только не словами "Я супер гуру VBA", а путём, во-первых, назначения всех милиционерами, и во-вторых, полного игнора слов тех, кто говорил тебе то, что делать надо.

KAPACb писал(а):А из выражения A=5 вовсе даже не следует, что чуть пораньше А объявили как Long. ;)

А поставь курсор на A и нажми Shift+F2.


KAPACb писал(а):
Процитируй, пожалуйста, место, где тебе предлагали копировать код.


говно вопрос, как говорится:

"Тов. Главный Милиционер способен понять, что код, приведённый мной, был написан в и для MSO Excel:VBA, а мне он нужен для MS VS 2005 VB.NET ?

Ты правда думаешь, что есть отличия?"

Я силюсь понять, но не вижу смысла в этом отрывке. Ты процитировал свои слова. В ответ на просбу процитировать, где тебя просили копировать код. Ты всё ещё утверждаешь, что понимаешь русский язык? :roll:


[Added]

После длительных размышлений я понял, что автором пропущены теги quote, из-за чего получается несколько каша.
KAPACb, так покажи мне отличия... Покажи мне отличия в объектной модели, об отсутсвии которых говорил как я, так и все в этом топике. Ты же написал на .net точно так же, cells.replace, где cells - что-то (неважно что), имеющее тип range. Или у тебя replace перешёл в объект comment?
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

KAPACb
Новичок
Новичок
 
Сообщения: 33
Зарегистрирован: 06.05.2006 (Сб) 10:29

Сообщение KAPACb » 21.11.2006 (Вт) 16:42

Разумеется писал, только не словами "Я супер гуру VBA", а путём, во-первых, назначения всех милиционерами, и во-вторых, полного игнора слов тех, кто говорил тебе то, что делать надо.


Есть благородный дон внимательно посмотрит, то он увидит, что милиционерами я стал назначать только после того, как убедился, что окромя "посмотри код макроса" я больше ничего не увижу, а объяснять подробнее мне никто не намерен: "здесь тебя направляют, а не думают за тебя".
Поскольку медитировать я не умею, то пользы от тупого и бесмысленного смотрения на 3 строки кода абсолютно не вижу.

А поставь курсор на A и нажми Shift+F2.


Опять не срастается: пишут, что "Cannot jump to 'Cells'" because it is hidden... ;)

Я силюсь понять, но не вижу смысла в этом отрывке.


Поясняю. В этом отрывке можно убедится, что благородный дон не видит отличия между кодом, написанным в разных средах разработки.
Подчеркну, что разговор идёт именно о коде, а не об объектной модели. Сответственно, раз отличия нет, то код можно спокойно переносить.

Viper
Артефакт VBStreets
Артефакт VBStreets
Аватара пользователя
 
Сообщения: 4394
Зарегистрирован: 12.04.2005 (Вт) 17:50
Откуда: Н.Новгород

Сообщение Viper » 21.11.2006 (Вт) 16:45

А вот интересно чем принципиально код полученный при помощи ЗАПИСИ МАКРОСА:
Код: Выделить всё
Cells.Replace What:="123", Replacement:="456", LookAt:=xlPart, _
SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
ReplaceFormat:=False


отличается от вот этого кода:
Код: Выделить всё
Try
MSExcel.ActiveWindow.RangeSelection.Replace(CObj(txtFrom), CObj(txtTo), _
XlLookAt.xlPart, XlSearchOrder.xlByRows, CObj(False), CObj(False), _
CObj(False), CObj(False))
Catch
MsgBox("Ошибка бла-бла-бла")
End Try


Не говорит ли автору сходство этих двух кусков кода об идентичности применения объектоной модели как в VBA таки в VB.NET?

Дискуссия начинает мне напоминать общение с пользователем по имени IVAN008 в феврале сего года...

З.Ы. а на кой здесь преобразование всего в Object совершенно непонятно...
Весь мир матрица, а мы в нем потоки байтов!

Viper
Артефакт VBStreets
Артефакт VBStreets
Аватара пользователя
 
Сообщения: 4394
Зарегистрирован: 12.04.2005 (Вт) 17:50
Откуда: Н.Новгород

Сообщение Viper » 21.11.2006 (Вт) 16:49

[quote="KAPACb
А поставь курсор на A и нажми Shift+F2.


Опять не срастается: пишут, что "Cannot jump to 'Cells'" because it is hidden... ;)[/quote]

ты в каком месте то на Shift+F2 жмешь то?
Весь мир матрица, а мы в нем потоки байтов!

Viper
Артефакт VBStreets
Артефакт VBStreets
Аватара пользователя
 
Сообщения: 4394
Зарегистрирован: 12.04.2005 (Вт) 17:50
Откуда: Н.Новгород

Сообщение Viper » 21.11.2006 (Вт) 16:51

[quote="KAPACb
А поставь курсор на A и нажми Shift+F2.


Опять не срастается: пишут, что "Cannot jump to 'Cells'" because it is hidden... ;)[/quote]

ты в каком месте то на Shift+F2 жмешь то?
Весь мир матрица, а мы в нем потоки байтов!

След.

Вернуться в Visual Basic .NET

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 73

    TopList