Как вставить счетчик counter #excelvba

#excel #vba

#excel #vba

Вопрос:

У меня есть модифицированный макрос из Интернета. Этот макрос копирует / перемещает файлы из одной папки в другую на основе списка в Excel, а не всех файлов в исходной папке. Мои цели — подсказать пользователю, сколько файлов было успешно скопировано.

Вот код:

 Private Sub CommandButton1_Click()

Dim xRg As Range, xCell As Range
Dim xSFileDlg As FileDialog, xDFileDlg As FileDialog
Dim xSPathStr As Variant, xDPathStr As Variant
Dim xVal As String
Dim xCount As Long

ActiveSheet.Range("a4:a1000").Select 'List of Files to copy from source to destination folder

On Error Resume Next
Set xRg = Application.InputBox("Please select the file names:", "Files Selected", ActiveWindow.RangeSelection.Address, , , , , 8)
If xRg Is Nothing Then Exit Sub
Set xSFileDlg = Application.FileDialog(msoFileDialogFolderPicker)
xSFileDlg.Title = " Please select the Source folder:"

If xSFileDlg.Show <> -1 Then Exit Sub
xSPathStr = xSFileDlg.SelectedItems.Item(1) amp; ""
Set xDFileDlg = Application.FileDialog(msoFileDialogFolderPicker)
xDFileDlg.Title = " Please select the Destination folder:"

If xDFileDlg.Show <> -1 Then Exit Sub
xDPathStr = xDFileDlg.SelectedItems.Item(1) amp; ""
For Each xCell In xRg
    xVal = xCell.Value
    If TypeName(xVal) = "String" And xVal <> "" Then
        FileCopy xSPathStr amp; xVal, xDPathStr amp; xVal
        Kill xSPathStr amp; xVal 'Delete files from SOURCE
    End If
Next
  Msgbox '(This prompt USER for count of successful copied files)
End Sub
  

Спасибо за помощь

Рей

Ответ №1:

Хитрость заключается в том, чтобы добавить 1 к переменной, а затем отобразить эту переменную, скажем, в окне сообщения

 Private Sub CommandButton1_Click()

Dim xRg As Range, xCell As Range
Dim xSFileDlg As FileDialog, xDFileDlg As FileDialog
Dim xSPathStr As Variant, xDPathStr As Variant
Dim xVal As String
Dim xCount As Long

ActiveSheet.Range("a4:a5000").Select 'Select active cells

On Error Resume Next
Set xRg = Application.InputBox("Please select the file names:", "Files Selected", ActiveWindow.RangeSelection.Address, , , , , 8)
If xRg Is Nothing Then Exit Sub
Set xSFileDlg = Application.FileDialog(msoFileDialogFolderPicker)
xSFileDlg.Title = " Please select the Source folder:"

If xSFileDlg.Show <> -1 Then Exit Sub
xSPathStr = xSFileDlg.SelectedItems.Item(1) amp; ""
Set xDFileDlg = Application.FileDialog(msoFileDialogFolderPicker)
xDFileDlg.Title = " Please select the Destination folder:"

If xDFileDlg.Show <> -1 Then Exit Sub
xDPathStr = xDFileDlg.SelectedItems.Item(1) amp; ""
For Each xCell In xRg
    xVal = xCell.Value
    If TypeName(xVal) = "String" And xVal <> "" Then
        FileCopy xSPathStr amp; xVal, xDPathStr amp; xVal
        xCount = xCount   1
        Kill xSPathStr amp; xVal
    End If
Next

MsgBox "Task finished. " amp; xCount amp; " files were succesfully copied.", vbInformation, "Finished"

End Sub
  

Комментарии:

1. Привет, Тим, спасибо за ответ, он запущен, но результат подсчета основан на количестве предварительно выбранных ячеек (ActiveSheet. Диапазон («a4: a5000»). Выбранный параметр возвращает количество 4997.) не общее количество скопированных файлов. Например, я поместил только 50 списков в предварительно выбранные, это будет зависеть от количества доступных файлов из ИСХОДНОЙ папки.

2. Разве FileCopy xSPathStr amp; xVal, xDPathStr amp; xVal это не строка, которая копирует файл? При каждом запуске счетчик увеличивается на единицу. Если счетчик возвращает 4997, значит, вышеупомянутая строка также была запущена 4997 раз