цикл vba через рабочие книги

#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