Lander 0 / 0 / 0 Регистрация: 23.10.2009 Сообщений: 51 |
||||
1 |
||||
19.06.2011, 01:02. Показов 8967. Ответов 9 Метки нет (Все метки)
в общем тема такая: вот код формирования отчета:
0 |
Заблокирован |
|
19.06.2011, 07:58 |
2 |
формируется отчет в ворде.. а из какой программы Microsoft Office запускается код? Что за ошибка?
0 |
toiai 3217 / 966 / 223 Регистрация: 29.05.2010 Сообщений: 2,085 |
||||
19.06.2011, 09:21 |
3 |
|||
Ошибка возникает из уже использованного шаблона для открытого приложения, необходимо закрыть приложение полностью или проверять на наличие открытого приложения…
0 |
Lander 0 / 0 / 0 Регистрация: 23.10.2009 Сообщений: 51 |
||||
19.06.2011, 09:57 [ТС] |
4 |
|||
все равно он второй раз не формирует…
0 |
toiai 3217 / 966 / 223 Регистрация: 29.05.2010 Сообщений: 2,085 |
||||||||
19.06.2011, 10:12 |
5 |
|||||||
Попробуй заменить
на
и в других местах также соответственно
0 |
0 / 0 / 0 Регистрация: 23.10.2009 Сообщений: 51 |
|
19.06.2011, 10:24 [ТС] |
6 |
то же самое..только один раз работает. при формировании второй раз отчета…вылетает…пишет ту же самую ошибку.
0 |
0 / 0 / 0 Регистрация: 23.10.2009 Сообщений: 51 |
|
19.06.2011, 12:31 [ТС] |
7 |
а что если попробовать после формирования отчета сразу же выгдужать и загружать обратно прогу. пока пользователь просматривает отчет? но как это правильно сделать?
0 |
Заблокирован |
||||
19.06.2011, 15:23 |
8 |
|||
Lander, Вот так пишите размеры:
0 |
toiai 3217 / 966 / 223 Регистрация: 29.05.2010 Сообщений: 2,085 |
||||
19.06.2011, 18:04 |
9 |
|||
Из Excel я открываю Word кодом:
Ошибка возникала если Word не закрывал.
0 |
Alex77755 11482 / 3773 / 677 Регистрация: 13.02.2009 Сообщений: 11,145 |
||||
20.06.2011, 07:17 |
10 |
|||
эту строку попробуй вынести из процедуры формирования отчёта. Например в активацию формы. При деактивации ворд закрывай
1 |
Различные инструменты, предлагаемые после этого Microsoft Офис позволяют не только создавать документы, но и создавать функции. Конечно, это для программистов, знакомых с приложениями Visual Basic VBA. Но мы упростим вам задачу и в этой статье мы научитесь закрывать Word из кода или скрипта VBA — легко и быстро.
Но сначала мы раскроем вопрос о том, что такое Приложения Visual Basic и это не более чем приложение, интегрированное в пакет Microsoft Office.
Это позволяет программировать на листах любого документа, будь то Word, Excel, PowerPoint, Access, и поскольку он не может быть скомпилирован, он становится макросом и распространяется путем простого копирования документа.
Хотя это действие широко используется программистами, оно не мешает никому из смертных научиться создавать функции с использованием сценариев VBA. И мы возьмем задачу научить его быстро и легко. Поскольку некоторые термины могут показаться запутанными и несколько пугающими, например, при попытке преобразовать документ OpenOffice в Word .
Одно из основных его применений — автоматизация повторяющихся или часто используемых задач, таких как открытие или закрытие документа, созданного в Word .
Вот шаги, которые необходимо выполнить, чтобы закрыть Word из кода VBA или скрипт . И для начала мы заходим в приложение с рабочего стола или где бы мы его не сохранили.
Следующий шаг важен, потому что вы должны иметь Вкладка разработчика в главном меню, если эта вкладка или вкладка не отображается, необходимо выполнить следующие операции. Наведите указатель мыши на значок Microsoft Office и щелкните. Это действие вызовет окно с различными параметрами, и вам нужно перейти в его нижнюю часть и выбрать Параметры Word.
Теперь будет отображаться поле, в левой части которого вам нужно выбрать вариант Наиболее частые, а в правой части из основных параметров для работы Слово.
Вы найдете опцию Показать вкладку разработчика в Рубана и когда вы найдете его, вам нужно установить флажок слева, чтобы выбрать его.
Шаги по закрытию Word из кода или сценария VBA — быстро и легко
Когда на ленте появится вкладка Разработчик, вы можете продолжить выполнение инструкций, которые позволят вам закрыть Слово к из кода или сценария VBA.
Следующим шагом является доступ к главному меню и выбор Вкладка разработчика . Затем в разделе «Код», который находится слева, вы выбираете опцию Visual Basic.
Следующим шагом будет написание или вставка следующего кода в конец строки Set objWord = CreateObject («Word.Application») Set objDoc = objWord.Documents.Close («c: scripts test.doc ‘) objWord Следующим шагом будет перейти в левый верхний угол и щелкнуть значок Microsoft Office
Затем вам нужно выбрать опцию Сохранить, и вы сделаете это со следующим именем тест.doc это с кодом VBA который вы будете использовать, чтобы закрыть приложение Word.
Вы можете увидеть, насколько быстро и легко выполнять задачи программиста. И используйте язык программирования Basic, который имеет большое сходство с другим офисным программным обеспечением, таким как OpenOffice и StarBasic.
И с этим языком программирования мы закончили с учебником, но вы, возможно, захотите узнать больше о том, как чьи Коды источники программирования находятся вставлен в документе. И чтобы вы могли больше узнать об этом небольшом изученном пункте программы Word.
I know it is too late, but I found this topic because I had the same problem.
And my solution may help other people.
The solution above didnt work well because it killed every running instance of Word, though it wasn’t opened by the c# program but the user.
So this was not that userfriendly.
My code checks the processes before/after the creation of the Word.Application
Object in c# and writes the IDs of the WINWORD
Processes in List<int>
then it compares the values in both List<int>
.
When a processID
is not found in both List<int>
it kills the process with this ID.
public List<int> getRunningProcesses()
{
List<int> ProcessIDs = new List<int>();
//here we're going to get a list of all running processes on
//the computer
foreach (Process clsProcess in Process.GetProcesses())
{
if (Process.GetCurrentProcess().Id == clsProcess.Id)
continue;
if (clsProcess.ProcessName.Contains("WINWORD"))
{
ProcessIDs.Add(clsProcess.Id);
}
}
return ProcessIDs;
}
Run this twice (one time before the creation of the Word.Application and once after).
List<int> processesbeforegen = getRunningProcesses();
// APP CREATION/ DOCUMENT CREATION HERE...
List<int> processesaftergen = getRunningProcesses();
Then run killProcesses(processesbeforegen, processesaftergen);
private void killProcesses(List<int> processesbeforegen, List<int> processesaftergen)
{
foreach (int pidafter in processesaftergen)
{
bool processfound = false;
foreach (int pidbefore in processesbeforegen)
{
if (pidafter == pidbefore)
{
processfound = true;
}
}
if (processfound == false)
{
Process clsProcess = Process.GetProcessById(pidafter);
clsProcess.Kill();
}
}
}
- Remove From My Forums
-
Question
-
A novice at automating MS Office, I’m programming Word from Visual FoxPro, and have run into the problem that if a user tries to open a document that’s already open, nothing appears to happen since it encounters a «File in use» error, which the
user can’t see since it opens behind another window. In this particular application it would be satisfactory simply to close any open documents each time an attempt is made from the menu to open another document regardless of whether there’s a conflict. And
that’s better anyway since otherwise users will be confused.Here is my initial test of the method I thought might accomplish that:
oWord = GETOBJECT(, «Word.Application»)
? oWord.Documents.Count
FOR i=1 TO oWord.Documents.Count
? oWord.Documents(i).Name
oWord.Documents(i).Close()
ENDFORAnd that worked, at first, although oWord.Documents.Count was always = 1 since the already opened documents belonged to separate instances of Word, being opened by the code below. But at least I was able to run the above code again and again to close each
remaining document one at a time, so the method seemed promising.NMBRLTRS=ALEN(ARC_LETRS)
FOR I = 1 TO NMBRLTRS
oWord = CREATEOBJECT( «Word.Application» )
oWord.Visible = .T.
FULLPATH=ACDBF + ‘Correspondence’ + ARC_LETRS(I)
sDoc = FULLPATH
oWord.Documents.Open( sDoc, 0, 0 ) && parm 3 read only = not
RELEASE oWord
ENDFORTo improve the situation, I re-wrote the code just above to open all the previously opened docs in the same Word instance, but then the little program for closing them stopped working, reporting oWord.Documents.Count as 0 each time I tried it. And that happened
even when I put back the code just above.So now I’m mystified.
Am I going about this the wrong way anyway?
Thanks in advance for your help.
Peyton
-
Edited by
Thursday, October 31, 2013 9:49 PM
-
Edited by
Answers
-
Hi Peyton
I believe this article explains why this is happening
http://support.microsoft.com/kb/238975/en-us
In the .NET world, it’s possible to work with processes, which makes it simpler to get to these things. Not sure if/how you can do that with VFP — it would certainly involve the Windows API…
Cindy Meister, VSTO/Word MVP,
my blog-
Marked as answer by
Luna Zhang — MSFT
Monday, November 11, 2013 9:04 AM
-
Marked as answer by
Задача: при запуске приложения найти все открытые документы Word и закрыть их с сохранением изменений не выводя диалог о подтверждении сохранения.
Как через процессы их все убить понятно, а вот как все сохранить то что было открыто до запуска самого приложения не понятно…
Kromster
13.5k12 золотых знаков42 серебряных знака72 бронзовых знака
задан 2 сен 2016 в 7:16
4
Можно используя Office.Interop
.
var myApp = System.Runtime.InteropServices.Marshal.GetActiveObject("Word.Application") as Word.Application;
myApp.Save();
Тут похожий вопрос про Exel
.
ответ дан 3 сен 2016 в 6:29
IldarIldar
2,14720 серебряных знаков53 бронзовых знака
2
try
{
var myApp = System.Runtime.InteropServices.Marshal.GetActiveObject("Word.Application") as Word.Application;
myApp.Documents.Close(Word.WdSaveOptions.wdSaveChanges);
myApp.Application.Quit();
}
catch { };
Application.Exit();
Вот что мне требовалось.
ответ дан 5 сен 2016 в 16:46
АлександрАлександр
3531 золотой знак3 серебряных знака15 бронзовых знаков
1