es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

VBA WScript.Shell copia el archivo de una carpeta a otra carpeta en función de la ruta de la celda o el nombre de archivo.

Quiero hacerlo con vba wscript.shell porque la copia de archivos es más rápida y quiero copiar archivos basados en la ruta o nombre de archivo en la celda de Excel basándome en la selección en la columna “E” y mostrar la carpeta de destino usando “msoFileDialogFolderPicker”.

Tengo código de muestra pero necesito cambiarlo.

Sub copiar()
xDFileDlg As FileDialog
xDPathStr As Variant
sn = Filter(Split(CreateObject("wscript.shell").exec("cmd /c dir C:\copy*.* /b /s").stdout.readall, vbCrLf), "\")
'For j = 0 To UBound(sn)
'If DateDiff("d", FileDateTime(sn(j)), Date) > 30 Then sn(j) = ""
'Next

sn = Filter(sn, "\")

For j = 0 To UBound(sn)
FileCopy sn(j), "C:\destcopy" & Mid(sn(j), 2)
Next

Set xDFileDlg = Application.FileDialog(msoFileDialogFolderPicker)
xDFileDlg.Title = "Por favor, seleccione la carpeta de destino:"
If xDFileDlg.Show <> -1 Then Exit Sub
xDPathStr = xDFileDlg.SelectedItems.Item(1) & "\"
End Sub

Gracias.

Roy.

Tags:  , , ,

Answer

  1. Avatar for davy.ai

    Para copiar archivos basados en la ruta o el nombre del archivo especificados en una celda de Excel y mostrar la carpeta de destino usando msoFileDialogFolderPicker con VBA wscript.shell, puede modificar el código de muestra de la siguiente manera:

    Sub copiarArchivos()
        Dim xDFileDlg As FileDialog
        Dim xDPathStr As Variant
        Dim selectedRow As Integer
        Dim selectedPath As String
        Dim selectedFileName As String
        Dim destinationFolder As String
    
        'Obtener el número de fila seleccionado de la hoja de cálculo
        selectedRow = ActiveCell.Row
    
        'Obtener la ruta y el nombre de archivo de la fila seleccionada
        selectedPath = Range("E" & selectedRow).Value
        selectedFileName = Range("F" & selectedRow).Value
    
        'Verificar si el archivo existe
        If Dir(selectedPath & "\" & selectedFileName) = "" Then
            MsgBox "El archivo no existe."
            Exit Sub
        End If
    
        'Proporcionar la carpeta de destino usando msoFileDialogFolderPicker
        Set xDFileDlg = Application.FileDialog(msoFileDialogFolderPicker)
        xDFileDlg.Title = "Seleccione la carpeta de destino:"
        If xDFileDlg.Show <> -1 Then Exit Sub
        destinationFolder = xDFileDlg.SelectedItems.Item(1) & "\"
    
        'Copiar el archivo a la carpeta de destino
        FileCopy selectedPath & "\" & selectedFileName, destinationFolder & selectedFileName
    
    End Sub
    

    Lo que hace este código es:

    1. Obtener el número de fila seleccionada, la ruta y el nombre de archivo de la hoja de Excel usando el método ActiveCell.Row y el método Range.
    2. Verificar si el archivo existe en la ruta seleccionada.

    3. Abrir el cuadro de diálogo msoFileDialogFolderPicker para permitir al usuario seleccionar la carpeta de destino.

    4. Copiar el archivo seleccionado a la carpeta de destino usando el método FileCopy.

    Tenga en cuenta que este código supone que la ruta y el nombre de archivo están en las columnas E y F, respectivamente. Es posible que deba ajustar el código para que coincida con el diseño específico de su hoja de cálculo.

    ¡Espero que esto ayude!

Comments are closed.