<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
	<title type="html"><![CDATA[Серый форум &mdash; VBS: Обработка всех файлов XLS в каталоге кроме списка исключений.]]></title>
	<link rel="self" href="http://forum.script-coding.com/extern.php?action=feed&amp;tid=17023&amp;type=atom" />
	<updated>2022-03-16T12:02:15Z</updated>
	<generator>PunBB</generator>
	<id>http://forum.script-coding.com/viewtopic.php?id=17023</id>
		<entry>
			<title type="html"><![CDATA[Re: VBS: Обработка всех файлов XLS в каталоге кроме списка исключений.]]></title>
			<link rel="alternate" href="http://forum.script-coding.com/viewtopic.php?pid=152590#p152590" />
			<content type="html"><![CDATA[<div class="quotebox"><cite>andypetr пишет:</cite><blockquote><p>objApp.Visible = True (и окно Экселя мелькает), я бы присвоил False</p></blockquote></div><p>Это само собой - для дебага True т.к. ряд документов нужно поправить в плане совместимости и они дополнительные сообщения выкидывают. Все отрабатывает. Спасибо большое <img src="//forum.script-coding.com/img/smilies/smile.png" width="15" height="15" /></p>]]></content>
			<author>
				<name><![CDATA[UstasBy]]></name>
				<uri>http://forum.script-coding.com/profile.php?id=42410</uri>
			</author>
			<updated>2022-03-16T12:02:15Z</updated>
			<id>http://forum.script-coding.com/viewtopic.php?pid=152590#p152590</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: VBS: Обработка всех файлов XLS в каталоге кроме списка исключений.]]></title>
			<link rel="alternate" href="http://forum.script-coding.com/viewtopic.php?pid=152588#p152588" />
			<content type="html"><![CDATA[<p><strong>UstasBy</strong>, на здоровье. <img src="//forum.script-coding.com/img/smilies/smile.png" width="15" height="15" /><br />Вывод на экран консоли:<br /></p><div class="codebox"><pre><code>cscript //nologo script.vbs</code></pre></div><p>Вывод в лог-файл (имя можно задавать произвольное):<br /></p><div class="codebox"><pre><code>cscript //nologo script.vbs &gt;&gt; test.log</code></pre></div><p>Ещё мне лично не нравится objApp.Visible = True (и окно Экселя мелькает), я бы присвоил False.</p>]]></content>
			<author>
				<name><![CDATA[andypetr]]></name>
				<uri>http://forum.script-coding.com/profile.php?id=40320</uri>
			</author>
			<updated>2022-03-16T09:19:23Z</updated>
			<id>http://forum.script-coding.com/viewtopic.php?pid=152588#p152588</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: VBS: Обработка всех файлов XLS в каталоге кроме списка исключений.]]></title>
			<link rel="alternate" href="http://forum.script-coding.com/viewtopic.php?pid=152587#p152587" />
			<content type="html"><![CDATA[<p><strong>andypetr</strong><br />Спасибо большое. Проверил - отрабатывает отлично. Еще вопрос - окно, выведенное WScript.Echo по истечение нескольких секунд как то закрывать можно? Не нашел такой возможности.<br />Или просто вместо этого - выводить в лог.<br />Если нет - просто закомментирую строки. Спасибо...</p>]]></content>
			<author>
				<name><![CDATA[UstasBy]]></name>
				<uri>http://forum.script-coding.com/profile.php?id=42410</uri>
			</author>
			<updated>2022-03-16T07:36:31Z</updated>
			<id>http://forum.script-coding.com/viewtopic.php?pid=152587#p152587</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: VBS: Обработка всех файлов XLS в каталоге кроме списка исключений.]]></title>
			<link rel="alternate" href="http://forum.script-coding.com/viewtopic.php?pid=152584#p152584" />
			<content type="html"><![CDATA[<p>Данное условие &quot;фильтрует&quot; все файлы в рабочей папке, оставляя только Экселевские.<br />Я поленился и, отрезая 3 левых символа расширения: Left(Ext, 3), проверяю на начало расширения: &quot;xls&quot;.<br />Можно перечислить все доступные расширения в массиве (уже без обрезания расширения): Array(&quot;xls&quot;, &quot;xlsm&quot;, &quot;xlsb&quot;).<br />Сегодня не за компом уже, завтра подробнее могу написать, если надо.</p>]]></content>
			<author>
				<name><![CDATA[andypetr]]></name>
				<uri>http://forum.script-coding.com/profile.php?id=40320</uri>
			</author>
			<updated>2022-03-15T15:13:50Z</updated>
			<id>http://forum.script-coding.com/viewtopic.php?pid=152584#p152584</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: VBS: Обработка всех файлов XLS в каталоге кроме списка исключений.]]></title>
			<link rel="alternate" href="http://forum.script-coding.com/viewtopic.php?pid=152582#p152582" />
			<content type="html"><![CDATA[<p><strong>andypetr</strong>, спасибо. Круто!<br />Немного не понял вот этот фрагмент:</p><div class="codebox"><pre><code>		&#039; Если расширение = xls*
		If UBound(Filter(Array(&quot;xls&quot;), Left(Ext, 3), True, vbTextCompare)) &gt;= 0 Then </code></pre></div><p>Не понял про расширение. Расширения в списке первой очереди <strong>strOpenFirst</strong>, ровно как и в <strong>strOpenNever</strong> и в остальных документах могут быть быть разные из экселевских - xlsm, xlsx или xls. Файлы в списках&nbsp; <strong>strOpenFirst</strong> и <strong>strOpenNever</strong> меняться будут редко и я вручную откорректирую по мере надобности...<br />Или <strong>Array(&quot;xls&quot;)</strong> и значит что расширение будет любое из экселевских (как в комментарии xls*) ?</p>]]></content>
			<author>
				<name><![CDATA[UstasBy]]></name>
				<uri>http://forum.script-coding.com/profile.php?id=42410</uri>
			</author>
			<updated>2022-03-15T13:17:24Z</updated>
			<id>http://forum.script-coding.com/viewtopic.php?pid=152582#p152582</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: VBS: Обработка всех файлов XLS в каталоге кроме списка исключений.]]></title>
			<link rel="alternate" href="http://forum.script-coding.com/viewtopic.php?pid=152581#p152581" />
			<content type="html"><![CDATA[<p><strong>UstasBy</strong>, добрый день.<br />Я немного переписал, по своему вкусу.<br />Тщательно не тестировал.</p><div class="codebox"><pre><code>On Error GoTo 0

&#039; Рабочая папка
strTempPath = &quot;E:\- QW -&quot;

&#039; Открываются первыми
strOpenFirst = &quot;QR1.xlsm;QR2.xlsm;QR3.xlsm&quot;
&#039; Исключения - не открываются
strOpenNever = &quot;PC.xls;PC.xlsx&quot;

Set objFSO = CreateObject(&quot;Scripting.FileSystemObject&quot;)
Set objFolder = objFSO.GetFolder(strTempPath) 
Set objApp = CreateObject(&quot;Excel.Application&quot;)
objApp.Visible = True

&#039; 1 шаг - обрабатываем файлы из strOpenFirst
&#039; 2 шаг - обрабатываем все остальные файлы (кроме strOpenNever)
For iStep = 1 To 2

	For Each objFile In objFolder.Files &#039; objFile = &quot;E:\- QW -\qr1.xlsm&quot;
	    
		strFile = objFile.Name &#039; strFile = &quot;QR1.xlsm&quot;
		Ext = objFSO.GetExtensionName(objFile) &#039; Ext = &quot;xlsm&quot;

		&#039; Если расширение = xls*
		If UBound(Filter(Array(&quot;xls&quot;), Left(Ext, 3), True, vbTextCompare)) &gt;= 0 Then 

			&#039; blnProcess = True, если файл из списка strOpenFirst
			blnProcess = (UBound(Filter(Split(strOpenFirst, &quot;;&quot;), strFile, True, vbTextCompare)) &gt;= 0)
		
			If iStep = 2 Then

				If blnProcess Then
					&#039; На 2-м шаге не обрабатываем файл из списка strOpenFirst
					blnProcess = False
				Else
					If UBound(Filter(Split(strOpenNever, &quot;;&quot;), strFile, True, vbTextCompare)) &gt;= 0 Then
						&#039; Не обрабатываем файл из списка strOpenNever
						WScript.Echo &quot;Файл&quot;, strFile, &quot;не обработан.&quot;
					Else
						blnProcess = True
					End If
				End If

			End If

			If blnProcess Then

				dOldDate = objFSO.GetFile(objFile).DateLastModified
				With objApp.Workbooks.Open(objFile)
					&#039; Открыли-закрыли, с сохранением.
					.Close True &#039;SaveChanges = True
				End With
				dNewDate = objFSO.GetFile(objFile).DateLastModified
				WScript.Echo &quot;Файл&quot;, strFile, &quot;модифицирован:&quot;, dOldDate, &quot;=&gt;&quot;, dNewDate
		
			End If

		End If

	Next &#039;objFile

Next &#039;iStep

objApp.Quit

Set objFSO = Nothing
Set objFolder = Nothing
Set objApp = Nothing

WScript.Quit(0)
</code></pre></div>]]></content>
			<author>
				<name><![CDATA[andypetr]]></name>
				<uri>http://forum.script-coding.com/profile.php?id=40320</uri>
			</author>
			<updated>2022-03-15T12:11:59Z</updated>
			<id>http://forum.script-coding.com/viewtopic.php?pid=152581#p152581</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[VBS: Обработка всех файлов XLS в каталоге кроме списка исключений.]]></title>
			<link rel="alternate" href="http://forum.script-coding.com/viewtopic.php?pid=152578#p152578" />
			<content type="html"><![CDATA[<p>День добрый. Имеется каталог (к примеру - <strong>&quot;E:\- QW -\&quot;</strong>). В нем насыпано много файлов .xls / .xlsx / .xlsm. Требуется производить обновление этих данных - по сути - открыть (при открытии макросы и запросы отработают) и сохранить. Но есть нюансы - первыми нужно открыть и сохранить несколько определенных файлов; затем все остальные в директории (там их много); но есть те, которые трогать не нужно. В подкаталоги глубже лезть не требуется. Нарисовал примерно следующее.</p><p>&quot;Конструкция&quot; несмотря на корявость частично отрабатывает, но почему-то строка &quot;<strong>If FileName &lt;&gt; &quot;PC.xls;PC.xlsx;QR1.xlsm;QR2.xlsm;QR3.xlsm&quot; Then</strong>&quot; не отрабатывает по исключениям - они все равно запускаются. Как это можно поправить и как в первой части где обрабаотываются файлы QR1.xlsm / QR2.xlsm / QR3.xlsm указать перечисление... Спасибо.</p><p>... или как вариант - брать список отрабатываемых во второй части - из внешнего текстового файла либо...</p><div class="codebox"><pre><code>
set App = CreateObject(&quot;Excel.Application&quot;)
App.visible = true
App.Workbooks.Open(&quot;E:\- QW -\QR1.xlsm&quot;)
App.ActiveWorkbook.Save
App.Workbooks.Close
App.quit

set App = CreateObject(&quot;Excel.Application&quot;)
App.visible = true
App.Workbooks.Open(&quot;E:\- QW -\QR2.xlsm&quot;)
App.ActiveWorkbook.Save
App.Workbooks.Close
App.quit

set App = CreateObject(&quot;Excel.Application&quot;)
App.visible = true
App.Workbooks.Open(&quot;E:\- QW -\QR3.xlsm&quot;)
App.ActiveWorkbook.Save
App.Workbooks.Close
App.quit

strTempPath = &quot;E:\- QW -&quot;
Set objFSO=CreateObject(&quot;Scripting.FileSystemObject&quot;) 
Set objFolder=objFSO.GetFolder(strTempPath) 

For Each objFile In objFolder.Files 
Ext = Mid(objFile, InstrRev(objFile, &quot;.&quot;) + 1)
 
If FileName &lt;&gt; &quot;PC.xls;PC.xlsx;QR1.xlsm;QR2.xlsm;QR3.xlsm&quot; Then 
set App = CreateObject(&quot;Excel.Application&quot;)
App.visible = true
App.Workbooks.Open objFile
App.ActiveWorkbook.Save
App.Workbooks.Close
App.quit
End If
Next
</code></pre></div>]]></content>
			<author>
				<name><![CDATA[UstasBy]]></name>
				<uri>http://forum.script-coding.com/profile.php?id=42410</uri>
			</author>
			<updated>2022-03-15T08:17:07Z</updated>
			<id>http://forum.script-coding.com/viewtopic.php?pid=152578#p152578</id>
		</entry>
</feed>
