Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Требуется помощь / 11 сообщений из 11, страница 1 из 1
26.02.2011, 22:23
    #37137761
Ironweed
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Требуется помощь
Задача! Из Excel втащить содержимое файла word внутрь и надругаться над ним.
Но хотелось бы перед втаскиванием данных в запущенном word`e проделать несколько операция для облегчения жизни в дальнейшем. Вариантов этих действия несколько.
Я не большой специалист в VB и потому не понимаю где ошибаюсь... код примерно такой:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
Function CaseVariantParsing() As String
    Dim wdApp As Object
    Dim wdDoc As Object
    Set wdApp = CreateObject("Word.Application")
    wdApp.Options.CheckSpellingAsYouType = False
    
    fileToOpen = Application.GetOpenFilename("Text Files (*.doc), *.doc")
    If fileToOpen = False Then
      Exit Function
    End If
    
    Set wdDoc = wdApp.Documents.Open(Filename:=fileToOpen, ConfirmConversions:= _
            False, ReadOnly:=False, AddToRecentFiles:=False, PasswordDocument:="", _
            PasswordTemplate:="", Revert:=False, WritePasswordDocument:="", _
            WritePasswordTemplate:="", XMLTransform:="", Format:= 0 )
    'wdOpenFormatAuto,

wdApp.Visible = True

    wdApp.ActiveWindow.Selection.Find.Text = "^p^t"
    CountPT = wdApp.ActiveWindow.Selection.Find.Execute
    
    If CountPT = True Then
        CaseVariantParsing = "PT Found"
        wdApp.Selection.Find.ClearFormatting
        wdApp.Selection.Find.Replacement.ClearFormatting
        With wdApp.Selection.Find
            .Text = "^p^t"
            .Replacement.Text = ChrW( 9830 )
            .Forward = True
            .Wrap = wdFindContinue
            .Format = True
            .MatchCase = False
            .MatchWholeWord = False
            .MatchWildcards = False
            .MatchSoundsLike = False
            .MatchAllWordForms = False
        End With
        wdApp.ActiveWindow.Selection.Find.Execute Replace:=wdReplaceAll
         wdDoc.SaveAs fileToOpen + ".tmp"
    End If

В файле который сохраняю нет замены которая прописана.
В чем дело не могу понять ... помогите. плз ...
...
Рейтинг: 0 / 0
26.02.2011, 23:54
    #37137839
Требуется помощь
Ironweed,
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
' {skipped}

' wdApp.Visible = True
' зачем делать Ворд видимым - подразнить пользователя?

'    wdApp.ActiveWindow.Selection.Find.Text = "^p^t"
'    CountPT = wdApp.ActiveWindow.Selection.Find.Execute
'    искать-заменять будем в только что открытом документе,
'    а не в мифическом wdApp.ActiveWindow.Selection

    With wdDoc.Content.Find
      .ClearFormatting
    
      If .Execute(FindText:="^p^t", ReplaceWith:=ChrW( 9830 ), Replace:=wdReplaceAll) Then
          wdDoc.SaveAs fileToOpen + ".tmp"
      Else
          MsgBox "Не удалось найти сочетание знак абзаца+знак табуляции."
      End If
    With wdDoc.Content.Find
' ЗЫ: дело также может быть в .Format = True
...
Рейтинг: 0 / 0
27.02.2011, 00:27
    #37137860
Ironweed
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Требуется помощь
пробуй камнемIronweed,
' wdApp.Visible = True
' зачем делать Ворд видимым - подразнить пользователя?

' wdApp.ActiveWindow.Selection.Find.Text = "^p^t"
' CountPT = wdApp.ActiveWindow.Selection.Find.Execute
' искать-заменять будем в только что открытом документе,
' а не в мифическом wdApp.ActiveWindow.Selection

' ЗЫ: дело также может быть в .Format = True

1. :) нет, сам смотрел, забыл убить когда выкладывал
2. попробую
3. нее, точно не в этом ... true, false ... разницы нет...
...
Рейтинг: 0 / 0
27.02.2011, 00:34
    #37137864
Ironweed
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Требуется помощь
Ironweed,

не пашет :(
...
Рейтинг: 0 / 0
27.02.2011, 00:38
    #37137871
Ironweed
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Требуется помощь
пробуй камнем,

не пашет вариант, файл создается с раширением "tmp"? но вот содержимое идентично исправляемому файлу :(
...
Рейтинг: 0 / 0
27.02.2011, 02:49
    #37137923
Требуется помощь
Ironweed,
странно. И чем дальше, тем страннее(с).
Перед тем, как публиковать пост, проверил код на работоспособность в MSO Word 2003 (11.6359.6360) SP1.

Корень зла в отсутствии директивы Option Explicit . Если бы она была, Excel бы ругнулся на не описанную переменную wdReplaceAll

Добавьте описание константы
Код: plaintext
Const wdReplaceAll =  2 
и будет Вам щасте(с)
...
Рейтинг: 0 / 0
27.02.2011, 02:57
    #37137924
Требуется помощь
Ironweed,
дико извиняюсь, но в моем примере грубейшая ошбка
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
    With wdDoc.Content.Find
      .ClearFormatting
    
      If .Execute(FindText:="^p^t", ReplaceWith:=ChrW( 9830 ), Replace:=wdReplaceAll) Then
          wdDoc.SaveAs fileToOpen + ".tmp"
      Else
          MsgBox "Не удалось найти сочетание знак абзаца+знак табуляции."
      End If
    ' With wdDoc.Content.Find      ' <-- скопипастил вместо End With
    End With
...
Рейтинг: 0 / 0
27.02.2011, 11:43
    #37138022
Ironweed
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Требуется помощь
пробуй камнем,

Сотни ... нет даже ТЫСЯЧИ благодарностей!!!!!!!!
Или ещё больше ... :) Спасибо огромное!!!! Вы правы, :) у меня наступило счастье!!!!!
Спасибо за потраченное время!!

Ошибку то я ещё вчера нашел, фигня это а не ошибка!!
...
Рейтинг: 0 / 0
27.02.2011, 11:52
    #37138029
Ironweed
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Требуется помощь
пробуй камнем,

если не сложно(будет время/желание), не могли бы Вы подвести (объяснить) теорию ...
...
Рейтинг: 0 / 0
27.02.2011, 20:43
    #37138485
Требуется помощь
Ironweed,
теорию чего ?
Если Option Explicit, то все банально: данная директива требует, чтобы все переменные были описаны(инициализированы) до их использования, в противном случае получите ошибку при компилляции.
При отсутствии данной директивы компиллятор(?) инициализирует все "незнакомые" переменные с типом Variant.

В своем коде Вы использовали "константу" wdReplaceAll, которая является членом перечисления Word.WdReplace и там равна 2. Так как у Вас в проекте нет ссылки на библиотеку Word, то компиллятор встретив неописанную переменную wdReplaceAll не растерялся и сам инициализировал ее с типом Variant.Long. Новорожденная переменная получила значение 0&, что эквивалентно использованию константы wdReplaceNone (не производить замен).
...
Рейтинг: 0 / 0
28.02.2011, 06:59
    #37138740
Ironweed
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Требуется помощь
пробуй камнем,

спасибо. Я просто не очень понял, что происходит...теперь стало получше ...
...
Рейтинг: 0 / 0
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Требуется помощь / 11 сообщений из 11, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]