#excel #vba
Вопрос:
Я пытаюсь записать все папки, подпапки и подпапки и т. Д. Основной папки. Меня не интересуют файлы.
У меня есть код, работающий, если я просто использую messagebox… но когда я пытаюсь написать на лист, он просто перезаписывает предыдущую строку.
Sub sample()
Dim FileSystem As Object
Dim HostFolder As String
HostFolder = "G:"
Set FileSystem = CreateObject("Scripting.filesystemobject")
DoFolder FileSystem.getfolder(HostFolder)
End Sub
Sub DoFolder(folder)
Dim ln As Integer
Dim subfolder
ln = 2
For Each subfolder In folder.subfolders
'MsgBox subfolder
DoFolder subfolder
ln = ln 1
ActiveWorkbook.Sheets("Sheet1").Range("A" amp; ln).Value = subfolder
Next
'Dim file
'For Each file In folder.files
'MsgBox file
'Next
End Sub
Private Sub CommandButton1_Click()
Call sample
MsgBox ("complete")
End Sub
Комментарии:
1. Пожалуйста, прочтите описания тегов, прежде чем применять их. В описании тега VBA говорится: «VBA не эквивалентен VB.NET» . В VB.NET описание тега гласит: «НЕ ИСПОЛЬЗУЙТЕ этот тег для вопросов VB6, VBA или VBScript» . Люди смотрят конкретные теги, потому что их интересуют вопросы, относящиеся к ним. Если вы добавляете неуместные теги, вы тратите наше время впустую, заставляя нас открывать неуместные вопросы. Не тратьте время на незнакомых людей, которым вы хотели бы помочь.
2. Спасибо, что указали на это… отметил
Ответ №1:
Причина проста. Это потому, что вы определили переменную «ln» как локальную переменную внутри вложенной папки «DoFolder». Вам нужно определить переменную «ln» как глобальную переменную. Тогда это будет хорошо работать. Большая часть вашего кода верна.
Public ln As Integer ' Define as a global
Sub sample()
Dim FileSystem As Object
Dim HostFolder As String
HostFolder = "G:"
Set FileSystem = CreateObject("Scripting.filesystemobject")
ln = 2 ' Initialize here.
DoFolder FileSystem.getfolder(HostFolder)
End Sub
Sub DoFolder(folder)
Dim subfolder
'Dim ln As Integer
'ln = 2
For Each subfolder In folder.subfolders
DoFolder subfolder
ln = ln 1
ActiveWorkbook.Sheets("Sheet1").Range("A" amp; ln).Value = subfolder
Next
End Sub
Private Sub CommandButton1_Click()
Call sample
MsgBox ("complete")
End Sub
Комментарии:
1. Спасибо, что нашли время, это так очевидно.