#excel #vba #loops
#excel #vba #циклы
Вопрос:
Привет всем, у меня проблема, и я не могу понять, почему это не работает, вот в чем проблема:
у меня есть подраздел, который выполняет некоторые действия, но перед началом работы я хочу проверить, присутствуют ли необходимые книги в папке, их 4, поэтому я могу делать один за другим, но я думаю, что есть лучшие решения, поэтому я придумал это
**Sub test()
Dim link1, link2, link3, link4 As String
link1 = "C:UsersCristianoDesktopprove excelloco.xlsx"
link2 = "C:UsersCristianoDesktopprove excel668.xlsx"
link3 = "C:UsersCristianoDesktopprove excelmezzi leggeri.xlsx"
link4 = "C:UsersCristianoDesktopprove excelblocci vetture.xlsx"
For r = 1 To 4
If Dir(link amp; r) = "" Then
MsgBox "file not found in the path"amp;" "amp; link amp; r
End If
Next r
end sub**
но это не работает, если бы это было возможно, я бы хотел поместить только отсутствующий файл в уникальный msgbox
что я делаю не так?
заранее спасибо
Комментарии:
1. Вы не можете получить доступ к переменной ‘link1’ с помощью ‘link amp; 1’. Переменные VBA таким образом не работают.
2. Пожалуйста, не редактируйте свой вопрос, чтобы включить ответ. Если вы хотите самостоятельно ответить, это нормально, но добавьте его в качестве ответа
3. хорошо, извините, я запомню
Ответ №1:
- Использование
Option Explicit
которого заставит вас объявить все переменные (r
). - При объявлении переменных в одной строке каждая переменная должна иметь
As
:Dim link1 As String, link2 As String, link3 As String, link4 As String
- Вы можете записать пути к файлам в массив.
Код
Option Explicit
Sub test()
Dim Paths(1 To 4) As String
Paths(1) = "C:UsersCristianoDesktopprove excelloco.xlsx"
Paths(2) = "C:UsersCristianoDesktopprove excel668.xlsx"
Paths(3) = "C:UsersCristianoDesktopprove excelmezzi leggeri.xlsx"
Paths(4) = "C:UsersCristianoDesktopprove excelblocci vetture.xlsx"
Dim r As Long
For r = 1 To 4
If Dir(Paths(r)) = "" Then
MsgBox "File '" amp; Paths(r) amp; "' not found."
End If
Next r
End Sub
Вот еще один пример:
Sub test2()
Dim mat(1 To 4) As String
mat(1) = "C:UsersCristianoDesktopprove excelloco.xlsx"
mat(2) = "C:UsersCristianoDesktopprove excel668.xlsx"
mat(3) = "C:UsersCristianoDesktopprove excelmezzi leggeri.xlsx"
mat(4) = "C:UsersCristianoDesktopprove excelblocchi vetture.xlsx"
Dim fso As Object
Set fso = CreateObject("Scripting.FileSystemObject")
Dim r As Long
Dim msg As Object
Set msg = CreateObject("System.Collections.ArrayList")
For r = 1 To 4
If Not fso.FileExists(mat(r)) Then
msg.Add fso.GetFileName(mat(r))
End If
Next r
msg.Sort
Dim arr As Variant
arr = msg.ToArray
MsgBox Join(arr, vbLf)
End Sub
Комментарии:
1. спасибо, теперь я понял, в конце концов я использовал массив для сбора пути, затем я использовал коллекцию для сбора недостающего файла, а затем я поместил их в поле msg