Я просматривал форум и пробовал несколько идей, но проблема все еще осталась. Я использую Access 2013, в форме я нажимаю кнопку, чтобы проверить орфографию и грамматику текстового поля. Проверка выполняется правильно с помощью проверки грамматики слова. Все идет нормально. Но как только Word закрывается, я активирую Access, но он продолжает мигать на панели задач, и мне приходится щелкнуть по нему, чтобы продолжить работу. Я хочу, чтобы Access вернулся на экран и продолжал работать в обычном режиме.
Код следующий:
Private Sub Comando2_Click()
Dim objWord As Word.Application
Dim doc As Word.Document
accessid = GetCurrentProcessId
accesshwnd = Application.hWndAccessApp
Set objWord = CreateObject("Word.Application")
With objWord
Set doc = .Documents.Add
.Selection.Text = Me.Texto0
docum = doc & " - Word"
.Visible = True
VBA.AppActivate (docum)
.Visible = False
.Dialogs(wdDialogToolsSpellingAndGrammar).Show
If Len(.Selection.Text) <> 1 Then
Me.Texto0 = .Selection.Text
' spellcancell = False
Else
' spellcancell = True
End If
doc.Close wdDoNotSaveChanges
.Quit
End With
Set objWord = Nothing
AppActivate (accessid)
SetForegroundWindow accesshwnd
End Sub
Заранее спасибо за вашу помощь. С уважением
Как упоминалось выше, я хочу, чтобы Access вернулся на экран и продолжал работать в обычном режиме. Я пытался активировать его с помощью Hwnd, SetForegroundWindow и множества других идей, прочитанных на форуме... ничего не помогло.
@Luuk, спасибо, но проблема все та же. Кажется, это работает, если второе приложение открывается оболочкой. Я попробую посмотреть, смогу ли я открыть Word с помощью оболочки и пройти тест для проверки.
Не могли бы вы просто использовать DoCmd.RunCommand acCmdSpelling в Access? Примерно такая ссылка: код проверки правописания в поле формы-мс-доступа
@DarrenBartrup-Cook, попробовал, и это работает, но проверяйте только орфографию, а не грамматику. Мне нужна проверка грамматики. Спасибо, в любом случае





Вы делаете это слишком сложно и закрываете все объекты.
Это работает, как и ожидалось:
Dim objWord As Word.Application
Dim doc As Word.Document
Dim docum As String
Set objWord = CreateObject("Word.Application")
With objWord
Set doc = .Documents.Add
docum = doc.Name & " - Word"
.Visible = True
VBA.AppActivate docum
.Visible = False
.Selection.Text = Me.Texto0
.Dialogs(wdDialogToolsSpellingAndGrammar).Show
If Len(.Selection.Text) <> 1 Then
Me.Texto0 = .Selection.Text
' spellcancell = False
Else
' spellcancell = True
End If
doc.Close wdDoNotSaveChanges
Set doc = Nothing
.Quit
End With
Set objWord = Nothing
Спасибо, я протестировал два сценария: 1) замена всей моей программы на вашу, но доступ даже не активируется и не мигает на панели задач 2) замена части моего слова обработки кода вашим, в этом случае оно работает точно так же, как у меня, доступ продолжает мигать на панели задач
Ну, этот код выполняется здесь, значит, происходит что-то еще.
Привет @Густав, вы подсказываете, почему работает неправильно, к сожалению, это не дает мне решения, я использую Surface, он работает как в режиме ПК, так и в режиме планшета. Вы правы: работать в режиме ПК правильно, а вот в режиме планшета — нет. Мне нужно, чтобы он работал в режиме планшета.
Это объясняет. Посмотрим, смогу ли я найти Surface.
Привет @Gustav, спасибо, что заставил меня думать по-другому, пожалуйста, посмотрите мой ответ, чтобы найти обходной путь.
Я нашел обходной путь, он не идеален, но, по крайней мере, работает, пока я не получу лучшее решение.
Спасибо за вашу помощь, заставили меня задуматься по-другому:
AppActivate GetCurrentProcessId
SendKeys "%{TAB}", True
SendKeys "{TAB}", True
Возможно, вам придется добавить
sleep ..., как это сделано здесь: stackoverflow.com/questions/37835809/…. Это связано с тем, что Windows делает программу, которая в последний раз отправляет вывод на экран, активным окном, поэтому перед выполнениемSetForegroundWindow accesshwndвам придется подождать (некоторое время), пока Word закроется, а затем активировать Access.