<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
	<title type="html"><![CDATA[Серый форум &mdash; VBA: Макрос на кнопку, проход по папкам, сравнение с наименованием, со]]></title>
	<link rel="self" href="http://forum.script-coding.com/extern.php?action=feed&amp;tid=17739&amp;type=atom" />
	<updated>2023-04-18T08:55:03Z</updated>
	<generator>PunBB</generator>
	<id>http://forum.script-coding.com/viewtopic.php?id=17739</id>
		<entry>
			<title type="html"><![CDATA[Re: VBA: Макрос на кнопку, проход по папкам, сравнение с наименованием, со]]></title>
			<link rel="alternate" href="http://forum.script-coding.com/viewtopic.php?pid=157670#p157670" />
			<content type="html"><![CDATA[<p><strong>ivandor421</strong><br />Если на excelworld форуме, ваше же сообщение и тз, то могу предложить на материальной основе выполнить ваше задание. Можете написать здесь или там в личные сообщения или на почту <a href="mailto:vbadevelope@yandex.ru">vbadevelope@yandex.ru</a>, или в группу vk <a href="https://vk.com/vbadevelope">https://vk.com/vbadevelope</a></p>]]></content>
			<author>
				<name><![CDATA[VBAdevelope]]></name>
				<uri>http://forum.script-coding.com/profile.php?id=43111</uri>
			</author>
			<updated>2023-04-18T08:55:03Z</updated>
			<id>http://forum.script-coding.com/viewtopic.php?pid=157670#p157670</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: VBA: Макрос на кнопку, проход по папкам, сравнение с наименованием, со]]></title>
			<link rel="alternate" href="http://forum.script-coding.com/viewtopic.php?pid=157669#p157669" />
			<content type="html"><![CDATA[<p>Подправил код. Вот для двух каталогов (1 входящий - вставляется в L; 2 - исходящий, вставляется в K). Из ячейки берётся sCode - с правого края текст формата &quot;-символы-символы&quot; без первого тире.<br /></p><div class="codebox"><pre><code>Sub GetHyperlinksForFilesWithCodeNameFromB()
Dim oWB As Workbook
Dim rCell As Range, rSearchRange As Range
Dim sFolder$, sCode$, sFileName$, sSheetName$, sVal$
Dim oFso As Object
Dim oFolder As Object

Set oWB = ActiveWorkbook
sSheetName = &quot;Лист1&quot; &#039;Я пишу лист1, вы своё название листа
Set rSearchRange = oWB.Sheets(sSheetName).Range(&quot;B1:B&quot; &amp; Sheets(sSheetName).Cells(Rows.Count, 2).End(xlUp).Row)

For Each rCell In rSearchRange
    If Not IsEmpty(rCell.Value) Then
        sVal = rCell.Value
        sCode = Right(sVal, Len(sVal) - InStrRev(sVal, &quot;-&quot;))
        sVal = Left(sVal, Len(sVal) - Len(sCode) - 1)
        sCode = Right(sVal, Len(sVal) - InStrRev(sVal, &quot;-&quot;)) &amp; &quot;-&quot; &amp; sCode
        For Цикл = 1 To 2
            Select Case Цикл
                &#039;сюда пишем  для входящих
                Case 1:
                    sFolder = &quot;D:\Входящие&quot; &#039;Например &quot;D:\Входящие\&quot;
                    sCol = &quot;L&quot; &#039;Столбец, куда будем вставлять
                &#039;сюда пишем  для исходящих
                Case 2:
                    sFolder = &quot;D:\Исходящие&quot; &#039;Например &quot;D:\Исходящие\&quot;
                    sCol = &quot;K&quot; &#039;Столбец, куда будем вставлять
            End Select
            &#039;А сюда код из основной процедуры
            
            Set oFso = CreateObject(&quot;Scripting.FileSystemObject&quot;)
            Set oFolder = oFso.GetFolder(sFolder)
            Call RecursiveSubFolders(oFolder, sCode, oWB, sCol, sSheetName, rCell)
        Next Цикл
    Else
        Exit Sub
    End If
Next rCell
Set oFso = Nothing
End Sub

Sub RecursiveFiles(ByRef oFolder As Object, ByVal sCode As String, ByRef oWB As Workbook, _
                            ByVal sCol As String, ByVal sSheetName As String, ByRef rCell As Range)
Dim oFile As Object
Dim sFilePath As String
    For Each oFile In oFolder.Files
        sFil = oFile.Name
        If InStr(oFile.Name, sCode) &gt;= 1 Then
            sFilePath = oFile.Path
            oWB.Sheets(sSheetName).Hyperlinks.Add Anchor:=oWB.Sheets(sSheetName).Range(sCol &amp; rCell.Row), _
                                                    Address:=sFilePath, TextToDisplay:=Format(Date, &quot;dd.mm.yyyy&quot;)
        End If
    Next oFile
End Sub

Sub RecursiveSubFolders(ByRef oFolder As Object, ByVal sCode As String, ByRef oWB As Workbook, _
                            ByVal sCol As String, ByVal sSheetName As String, ByRef rCell As Range)
Dim oSubFolder As Object
    If oFolder.Subfolders.Count &gt;= 1 Then
        For Each oSubFolder In oFolder.Subfolders
            Call RecursiveFiles(oFolder, sCode, oWB, sCol, sSheetName, rCell)
            If oFolder.Subfolders.Count &gt;= 1 Then
                Call RecursiveSubFolders(oSubFolder, sCode, oWB, sCol, sSheetName, rCell)
            End If
        Next oSubFolder
    Else
        Call RecursiveFiles(oFolder, sCode, oWB, sCol, sSheetName, rCell)
    End If
End Sub</code></pre></div>]]></content>
			<author>
				<name><![CDATA[VBAdevelope]]></name>
				<uri>http://forum.script-coding.com/profile.php?id=43111</uri>
			</author>
			<updated>2023-04-18T07:56:03Z</updated>
			<id>http://forum.script-coding.com/viewtopic.php?pid=157669#p157669</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: VBA: Макрос на кнопку, проход по папкам, сравнение с наименованием, со]]></title>
			<link rel="alternate" href="http://forum.script-coding.com/viewtopic.php?pid=157668#p157668" />
			<content type="html"><![CDATA[<p><strong>ivandor421</strong><br />Подозреваю, что отвечал уже на другом форуме, поскольку вопрос такой же. Продублирую код:<br />Там 4 колонки с входящими\исходящими. Что куда вставлять?<br />Вот код, он смотрит в одну папку и перебирает в ней файлы, сравнивая с кодом (конец строки до тире) и подкаталоги рекрсивно</p><div class="codebox"><pre><code>Sub GEGJ()
Dim oWB As Workbook
Dim rCell As Range, rSearchRange As Range
Dim sFolder$, sCode$, sFileName$
Dim oFso As Object
Dim oFolder As Object

Set oWB = ActiveWorkbook
sFolder = &quot;D:\&quot; &#039;я пишу Д, вы свою
&#039;Я пишу лист1, вы своё название листа
Set rSearchRange = oWB.Sheets(&quot;Лист1&quot;).Range(&quot;B1:B&quot; &amp; Sheets(&quot;Лист1&quot;).Cells(Rows.Count, 2).End(xlUp).Row)

For Each rCell In rSearchRange
    If Not IsEmpty(rCell.Value) Then
        sCode = &quot;-&quot; &amp; Right(rCell.Value, Len(rCell.Value) - InStrRev(rCell.Value, &quot;-&quot;))
        Set oFso = CreateObject(&quot;Scripting.FileSystemObject&quot;)
        Set oFolder = oFso.GetFolder(sFolder)
        Call RecursiveSubFolders(oFolder, sCode, oWB)
    Else
        Exit Sub
    End If
Next rCell
Set oFso = Nothing
End Sub
Sub RecursiveFiles(ByRef oFolder As Object, ByVal sCode As String, ByRef oWB As Workbook)
Dim oFile As Object
Dim sFilePath As String
    For Each oFile In oFolder.Files
        sFil = oFile.Name
        If InStr(oFile.Name, sCode) &gt;= 1 Then
            sFilePath = oFile.Path
            oWB.Sheets(&quot;Лист1&quot;).Range(&quot;L&quot; &amp; rCell.Row) = &quot;=HYPERLINK(&quot; &amp; sFilePath &amp; &quot;)&quot;
        End If
    Next oFile
End Sub
Sub RecursiveSubFolders(ByRef oFolder As Object, ByVal sCode As String, ByRef oWB As Workbook)
Dim oSubFolder As Object
    If oFolder.Subfolders.Count &gt;= 1 Then
        For Each oSubFolder In oFolder.Subfolders
            Call RecursiveFiles(oFolder, sCode, oWB)
            If oFolder.Subfolders.Count &gt;= 1 Then
                Call RecursiveSubFolders(oSubFolder, sCode, oWB)
            End If
        Next oSubFolder
    Else
        Call RecursiveFiles(oFolder, sCode, oWB)
    End If
End Sub</code></pre></div><br /><p>Если надо в двух папках смотреть, то добавляете вокруг кода</p><div class="codebox"><pre><code>For Цикл = 1 to 2
Select Case Цикл
&#039;сюда пишем  для входящих
Case 1:
sFolder = &quot;ваш путь&quot;
&#039;сюда пишем  для исходящих
Case 2:
sFolder = &quot;ваш путь&quot;
End Select
&#039;А сюда код из основной процедуры
Next Цикл
</code></pre></div><p>И тогда ещё нужно передавать в подпроцедуры значение столбца, куда ставить.<br />По вашему ТЗ неясно, что должно происходить по нажатию кнопки, как выбирать столбцы для вставки ссылки, как вы собираете указывать папку поиска, заранее или каждый раз выбирать в файловой системе. А также критерии выбора участка текста ячейки, по которому будет вестись поиск в именах файлов. Если это всегда будет текст вида &quot;-символы-символы&quot; и ищем по символам без первого тире, то нужно это указатьо<br />На данный момент макрос перебирает значения столбца &quot;B&quot; и отбирает последние символы до тире и ищет во всех папках любого уровня вложенности на диске&nbsp; &quot;D:\&quot; файлы с именем содержащим данные символы и копирует путь к файлу в столбец L.</p>]]></content>
			<author>
				<name><![CDATA[VBAdevelope]]></name>
				<uri>http://forum.script-coding.com/profile.php?id=43111</uri>
			</author>
			<updated>2023-04-18T07:23:52Z</updated>
			<id>http://forum.script-coding.com/viewtopic.php?pid=157668#p157668</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: VBA: Макрос на кнопку, проход по папкам, сравнение с наименованием, со]]></title>
			<link rel="alternate" href="http://forum.script-coding.com/viewtopic.php?pid=157647#p157647" />
			<content type="html"><![CDATA[<p>Я в общем то в VBA не шарю. Но однажды сталкивался с необходимостью получить перечень содержимого папки (файлы, подпапки, файлы в подпапках, подподпапки в подпапках и т. д.). Имеется готовое решение на AutoHotkey. <a href="http://forum.script-coding.com/viewtopic.php?id=15032">http://forum.script-coding.com/viewtopic.php?id=15032</a>. Припоминаю, что я на основе выгрузки скрипта создавал HTML-файл, открывал его через браузер, щёлкал по интересующему меня файлу, в результате чего он открывался в соответствующей программе.&nbsp; Таким образом избавился от необходимости вручную каждый раз добавлять гиперссылки. Но если нужно <span class="bbu">именно макрос для excel</span>, то этот вариант Вам не подойдёт.</p>]]></content>
			<author>
				<name><![CDATA[ypppu]]></name>
				<uri>http://forum.script-coding.com/profile.php?id=5974</uri>
			</author>
			<updated>2023-04-17T15:38:15Z</updated>
			<id>http://forum.script-coding.com/viewtopic.php?pid=157647#p157647</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[VBA: Макрос на кнопку, проход по папкам, сравнение с наименованием, со]]></title>
			<link rel="alternate" href="http://forum.script-coding.com/viewtopic.php?pid=157633#p157633" />
			<content type="html"><![CDATA[<p>Добрый день. Возникла необходимость в написании макроса, сам к сожалению только начал изучать данный вопрос.</p><p>Есть лист excel (рис.1).&nbsp; в нем указаны комплекты документов. В столбцах L-O сейчас руками созданы гиперссылки на необходимые папки.<br />Есть папка на диске с входящими и исходящими письмами (рис.2). Папок и входящих и исходящих писем очень много, и в ручную каждый раз добавлять гиперссылки очень трудозатратно.<br />Задача состоит в следующем, по нажатию кнопки делать проход по папкам и подпапкам, сравнивать наименование в столбце &quot;B&quot; листа excel и папках (рис3), и создавать столбцы с гиперссылками на папки.<br />рисунки и сам файл excel приложен.</p>]]></content>
			<author>
				<name><![CDATA[ivandor421]]></name>
				<uri>http://forum.script-coding.com/profile.php?id=43116</uri>
			</author>
			<updated>2023-04-17T09:46:38Z</updated>
			<id>http://forum.script-coding.com/viewtopic.php?pid=157633#p157633</id>
		</entry>
</feed>
