Visual Basic - Buscar PDF

Life is soft - evento anual de software empresarial
 
Vista:
Imágen de perfil de DmsNet
Val: 27
Ha aumentado su posición en 514 puestos en Visual Basic (en relación al último mes)
Gráfica de Visual Basic

Buscar PDF

Publicado por DmsNet (9 intervenciones) el 15/09/2020 22:12:09
Buenas Tardes compañeros

Mi Consulta es la siguiente, tengo un ToolStripTextBox1 con evento ,KeyPress,

básica mente es ingreso el numero del PDF a buscar, "0303"le doy enter y me muestra ese PDF en un Userform que contiene un WebBrowser1...hasta hay todo bien


lo que deseo es no poner la ruta de la "carpeta 1"

WebBrowser1.Navigate("C:\Users\Folio 9470m\Desktop\Trabajo de la Empresa\Carpeta 1\"0303".pdf")


que la búsqueda sea en las subcarpetas de "Trabajos de la Empresa" me di a entender?


el PDF "0303" puede encontrarse en cualquiera de las 10 carpetas que tiene "Trabajos de la Empresa"
que no necesaria mente tengo que ponerla en la ruta "Carpeta 1" para que encuentre el documento...

básica mente es una búsqueda en subcarpetas....muchas gracias por la ayuda que me puedan brindar para aplicar el código a mi proyecto
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de gilman
Val: 523
Bronce
Ha mantenido su posición en Visual Basic (en relación al último mes)
Gráfica de Visual Basic

Buscar PDF

Publicado por gilman (290 intervenciones) el 16/09/2020 10:52:41
Te paso un ejemplo usando APIS
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
Option Explicit
 
'Create a form with a command button (command1), a list box (list1)
'and four text boxes (text1, text2, text3 and text4).
'Type in the first textbox a startingpath like c:\
'and in the second textbox you put a pattern like *.* or *.txt
 
Private Declare Function FindFirstFile Lib "kernel32" Alias "FindFirstFileA" (ByVal lpFileName As String, lpFindFileData As WIN32_FIND_DATA) As Long
Private Declare Function FindNextFile Lib "kernel32" Alias "FindNextFileA" (ByVal hFindFile As Long, lpFindFileData As WIN32_FIND_DATA) As Long
Private Declare Function GetFileAttributes Lib "kernel32" Alias "GetFileAttributesA" (ByVal lpFileName As String) As Long
Private Declare Function FindClose Lib "kernel32" (ByVal hFindFile As Long) As Long
 
Const MAX_PATH = 260
Const MAXDWORD = &HFFFF
Const INVALID_HANDLE_VALUE = -1
Const FILE_ATTRIBUTE_ARCHIVE = &H20
Const FILE_ATTRIBUTE_DIRECTORY = &H10
Const FILE_ATTRIBUTE_HIDDEN = &H2
Const FILE_ATTRIBUTE_NORMAL = &H80
Const FILE_ATTRIBUTE_READONLY = &H1
Const FILE_ATTRIBUTE_SYSTEM = &H4
Const FILE_ATTRIBUTE_TEMPORARY = &H100
 
Private Type FILETIME
    dwLowDateTime As Long
    dwHighDateTime As Long
End Type
 
Private Type WIN32_FIND_DATA
    dwFileAttributes As Long
    ftCreationTime As FILETIME
    ftLastAccessTime As FILETIME
    ftLastWriteTime As FILETIME
    nFileSizeHigh As Long
    nFileSizeLow As Long
    dwReserved0 As Long
    dwReserved1 As Long
    cFileName As String * MAX_PATH
    cAlternate As String * 14
End Type
Function StripNulls(OriginalStr As String) As String
    If (InStr(OriginalStr, Chr(0)) > 0) Then
        OriginalStr = Left(OriginalStr, InStr(OriginalStr, Chr(0)) - 1)
    End If
    StripNulls = OriginalStr
End Function
 
Function FindFilesAPI(path As String, SearchStr As String, FileCount As Integer, DirCount As Integer)
    'KPD-Team 1999
    'E-Mail: KPDTeam@Allapi.net
    'URL: http://www.allapi.net/
 
    Dim FileName As String ' Walking filename variable...
    Dim DirName As String ' SubDirectory Name
    Dim dirNames() As String ' Buffer for directory name entries
    Dim nDir As Integer ' Number of directories in this path
    Dim i As Integer ' For-loop counter...
    Dim hSearch As Long ' Search Handle
    Dim WFD As WIN32_FIND_DATA
    Dim Cont As Integer
    If Right(path, 1) <> "\" Then path = path & "\"
    ' Search for subdirectories.
    nDir = 0
    ReDim dirNames(nDir)
    Cont = True
    hSearch = FindFirstFile(path & "*", WFD)
    If hSearch <> INVALID_HANDLE_VALUE Then
        Do While Cont
        DirName = StripNulls(WFD.cFileName)
        ' Ignore the current and encompassing directories.
        If (DirName <> ".") And (DirName <> "..") Then
            ' Check for directory with bitwise comparison.
            If GetFileAttributes(path & DirName) And FILE_ATTRIBUTE_DIRECTORY Then
                dirNames(nDir) = DirName
                DirCount = DirCount + 1
                nDir = nDir + 1
                ReDim Preserve dirNames(nDir)
            End If
        End If
        Cont = FindNextFile(hSearch, WFD) 'Get next subdirectory.
        Loop
        Cont = FindClose(hSearch)
    End If
    ' Walk through this directory and sum file sizes.
    hSearch = FindFirstFile(path & SearchStr, WFD)
    Cont = True
    If hSearch <> INVALID_HANDLE_VALUE Then
        While Cont
            FileName = StripNulls(WFD.cFileName)
            If (FileName <> ".") And (FileName <> "..") Then
                FindFilesAPI = FindFilesAPI + (WFD.nFileSizeHigh * MAXDWORD) + WFD.nFileSizeLow
                FileCount = FileCount + 1
                List1.AddItem path & FileName
            End If
            Cont = FindNextFile(hSearch, WFD) ' Get next file
        Wend
        Cont = FindClose(hSearch)
    End If
    ' If there are sub-directories...
    If nDir > 0 Then
        ' Recursively walk into them...
        For i = 0 To nDir - 1
            FindFilesAPI = FindFilesAPI + FindFilesAPI(path & dirNames(i) & "\", SearchStr, FileCount, DirCount)
        Next i
    End If
End Function
Sub Command1_Click()
    Dim SearchPath As String, FindStr As String
    Dim FileSize As Long
    Dim NumFiles As Integer, NumDirs As Integer
    Screen.MousePointer = vbHourglass
    List1.Clear
    SearchPath = Text1.Text
    FindStr = Text2.Text
    FileSize = FindFilesAPI(SearchPath, FindStr, NumFiles, NumDirs)
    Text3.Text = NumFiles & " Files found in " & NumDirs + 1 & " Directories"
    Text4.Text = "Size of files found under " & SearchPath & " = " & Format(FileSize, "#,###,###,##0") & " Bytes"
    Screen.MousePointer = vbDefault
End Sub
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de DmsNet
Val: 27
Ha aumentado su posición en 514 puestos en Visual Basic (en relación al último mes)
Gráfica de Visual Basic

Buscar PDF

Publicado por DmsNet (9 intervenciones) el 16/09/2020 14:54:11
buenos días:
compañero busco el código para lenguaje Visual Basic VBA ..
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de gilman
Val: 523
Bronce
Ha mantenido su posición en Visual Basic (en relación al último mes)
Gráfica de Visual Basic

Buscar PDF

Publicado por gilman (290 intervenciones) el 16/09/2020 16:10:44
Teniendo en cuenta que hay un foro exclusivo para VBA, y otro para VBNet, yo, cuando alguién publica en este foro, entiendo que está trabajando en VB6 o anteriores, y si es una versión anterior espero que lo especifique, lo lógico es que si tu pregunta es de VBA, lo publiques en dicho foro, no en este.
Dicho esto, el código debería funcionar perfectamente en VBA, el único problema es con las versiones modernas y las declaraciones de las APIs, todo esto relacionado con el tema de los 64bits o no de la versión de Office, o la app en la que quieras ejecutar el código
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de DmsNet
Val: 27
Ha aumentado su posición en 514 puestos en Visual Basic (en relación al último mes)
Gráfica de Visual Basic

Buscar PDF

Publicado por DmsNet (9 intervenciones) el 16/09/2020 16:52:48
Buenos días
Colega correcto en este foro siempre planteo mis dudas de Visual Basic. vba, y la gran mayoría son contestadas y acertadas
ges por tu código, lo probé pero en efecto no me sirve

si tienes otro que me puedas brindar te lo agradezco
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de gilman
Val: 523
Bronce
Ha mantenido su posición en Visual Basic (en relación al último mes)
Gráfica de Visual Basic

Buscar PDF

Publicado por gilman (290 intervenciones) el 16/09/2020 17:23:45
He probado el código en excel 64 bits, y funciona correctamente, solo tienes que adaptarlo a tus necesidades.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Andres Leonardo
Val: 3.944
Oro
Ha mantenido su posición en Visual Basic (en relación al último mes)
Gráfica de Visual Basic

Buscar PDF

Publicado por Andres Leonardo (1729 intervenciones) el 16/09/2020 19:37:53
Es correcto gilman Este tema y su ultima respuesta deben estar en .net

**Espero los Administradores sepan reagrupar
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Andres Leonardo
Val: 3.944
Oro
Ha mantenido su posición en Visual Basic (en relación al último mes)
Gráfica de Visual Basic

Buscar PDF

Publicado por Andres Leonardo (1729 intervenciones) el 16/09/2020 17:48:37
Espero esto te ayude... busca en una serie de carpetas un archivo... si lo encuentra te da la ruta lo cree con una UDF,. ademas el libro debe permitir macros y tener la referencia microdoft scripting runtime

adjunto codigo de la udf.. podrias poner el tema de la carpeta donde estan las otras subcarpetas como un parametro para el ejemplo lo puse en el codigo.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
Public Ruta As String
Public Function BuscarPath(f As String) As String
Ruta = "No Encontrado en Carpetas"
    sample f
    BuscarPath = Ruta
End Function
Sub sample(f As String)
    Dim FileSystem As Object
    Dim HostFolder As String
 
    HostFolder = "C:\Andres\Excel\Excelpdf\"
 
    Set FileSystem = CreateObject("Scripting.FileSystemObject")
    DoFolder FileSystem.GetFolder(HostFolder), f
End Sub
 
Sub DoFolder(Folder, f As String)
    Dim SubFolder
    For Each SubFolder In Folder.SubFolders
        DoFolder SubFolder, f
        Debug.Print Dir(SubFolder & "\" & f)
        If Dir(SubFolder & "\" & f) <> "" Then Ruta = SubFolder
    Next
End Sub
BuscaCarpetas3
BuscaCarpetas2
BuscaCarpetas1
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de DmsNet
Val: 27
Ha aumentado su posición en 514 puestos en Visual Basic (en relación al último mes)
Gráfica de Visual Basic

Buscar PDF

Publicado por DmsNet (9 intervenciones) el 16/09/2020 18:12:07
compañero gracias por el código... pero el código que ocupo implementar es para visual estudia lenguaje VBA
los códigos que me están compartiendo es para aplicar a el programador de excel


necesito aplicarlo a mi trabajo de visual estudio lenguaje vba no a excel


Captuddra

grs
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Andres Leonardo
Val: 3.944
Oro
Ha mantenido su posición en Visual Basic (en relación al último mes)
Gráfica de Visual Basic

Buscar PDF

Publicado por Andres Leonardo (1729 intervenciones) el 16/09/2020 19:35:55
Puees es lo mismo en un modulo

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
Imports System
Imports System.IO
 
Module Module1
    Public Ruta As String
    Public Function BuscarPath(carpeta As String, archivo As String) As String
        Ruta = "No Encontrado en Carpetas"
        DoFolder(carpeta, archivo)
        BuscarPath = Ruta
    End Function
    Sub DoFolder(Fo As String, fi As String)
        For Each carpeta As String In Directory.GetDirectories(Fo)
            DoFolder(carpeta, fi)
            If Dir(carpeta & "\" & fi) <> "" Then Ruta = carpeta
        Next
    End Sub
End Module
BuscarArchivo
BuscarArchivo2
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de DmsNet
Val: 27
Ha aumentado su posición en 514 puestos en Visual Basic (en relación al último mes)
Gráfica de Visual Basic

Buscar PDF

Publicado por DmsNet (9 intervenciones) el 16/09/2020 19:40:12
el botón buscar llama al modulo?

donde ingresar el archivo a buscar?..me podrías compartir el proyecto o el fuente entero ...mira as es como lo llevo


Capturwwwa


en el textbox Ingreso la OP__________ Ingreso el Numero del PDF doy enter, se llama a un form con un lector de pdf
que me muestra el pdf buscado, sino exciste un Msgbox indicando no exciste la OP ingresada,,, Esto lo puedo hacer pero solo sile doy la ruta especifica de donde se encuentra el pdf...no me busca en subcarpetas

ASI LO TENGO

1
2
3
4
Private Sub Visor_del_PDF_Load(sender As Object, e As EventArgs) Handles MyBase.Load
 
    WebBrowser1.Navigate("C:\Users\Folio 9470m\Desktop\Trabajo de la Empresa\Carpetas de OP\" & Pantalla_Principal.ToolStripTextBox1.Text & ".pdf")
End Sub



LO QUE BUSCO ES QUE HAGA LO MISMO PERO QUE BUSQUE DICHO PDF EN LAS CARPETAS QUE HAY DENTRO DE "TRABAJOS DE LA EMPRESA"
QUE NO TENGA QUE PONERLE EXACTA MENTE LA RUTA.. YA QUE LA OP SE PUEDE GUARDA EN CUALQUIER OTRA CARPETA
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Andres Leonardo
Val: 3.944
Oro
Ha mantenido su posición en Visual Basic (en relación al último mes)
Gráfica de Visual Basic

Buscar PDF

Publicado por Andres Leonardo (1729 intervenciones) el 17/09/2020 00:00:06
Deberas hacer la llamada a la funcon buscarpath

algo asi ...
1
2
3
4
5
6
Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
  '   textbox3 es donde te recuperara la carpeta donde esta el archivo
  ' textbox 2 es la carpeta donde ira a buscar en las subcarpetas
  '  textobox1 es el nombre del archigvo .. al colocar el numero deberas tu amumentarle el .pdf
       TextBox3.Text = BuscarPath(TextBox2.Text, TextBox1.Text)
    End Sub


te adjunto el proyecto-

algo asi deberia ser tu codigo

1
2
3
4
5
6
7
8
9
10
11
12
13
14
Private Sub Visor_del_PDF_Load(sender As Object, e As EventArgs) Handles MyBase.Load
dim nombrearchivo as string
dim nombrecarpeta as string
dim rutaencontrado as string
nombrerchivo =  Pantalla_Principal.ToolStripTextBox1.Text & ".pdf"
nombrecarpeta  = "C:\Users\Folio 9470m\Desktop\Trabajo de la Empresa\"
rutaencontrado = BuscarPath(nombrecarpeta , nombrearchivo.Text)
 
IF rutaencontrado <> "No Encontrado en Carpetas"
WebBrowser1.Navigate(rutaencontrado & "\" & nombrerchivo   )
else
msgbox "No se encontro el archivo Requerido"
exit sub
End Sub
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de DmsNet
Val: 27
Ha aumentado su posición en 514 puestos en Visual Basic (en relación al último mes)
Gráfica de Visual Basic

Buscar PDF

Publicado por DmsNet (9 intervenciones) el 17/09/2020 03:01:33
compañero gracias por quererme ayudar le comento
el codigo que me brindo da errores no se si usted lo probo hay cosas que cambiar como "nombrerchivo" cosas pequeñas pero si me da error en buscarpath indica que no esta declarado

con base a su ejemplo lo descargue muy bien. pero funciona con caracteres muy pequeños ejemplo: al buscar 1.pdf lo localiza sin problemas
pero al buscar un pdf con digitos mas largo como 033260.pdf marca esto ver foto

Captursssa


aparte de eso seria bueno que cuando le de clik al boton buscar lo muestre inmediata mente en un lector de pdf, nada hago con la ruta "encontrado en" es para no volcar esa ruta al WebBrowser1...sino que al hacer clik de una vez lo muestre... ver foto

Capturaeee



gracias por toda la ayuda brindada...es algo que no me deja avanzar en mi proyecto.. no soy un programador experto disculpas del caso
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Andres Leonardo
Val: 3.944
Oro
Ha mantenido su posición en Visual Basic (en relación al último mes)
Gráfica de Visual Basic

Buscar PDF

Publicado por Andres Leonardo (1729 intervenciones) el 17/09/2020 15:47:53
Hola

Haber te indico 3 cosas

1.-El codigo funciona y fue probado , es mi pc fue escrito con las propiedasdes de mi computadora, el codigo que te pegue aqui era un ejemplo para que lo ADAPTES de hecho te indique eso en el post que conteste anterior tu codigo deberia ser ALGO ASI... dependiendo de tu codigo.

2.-El error respecto a los nombres de archivos es una limitante de la liberia que maneja Windows , y es por eso que no es recomendable usar aplicaciones en directorios de usuario c:\users\nombredelusuari\destop\programa\carpeta si no en carpetas de sistemas, como el C: o el C:program files o el C:\Programa esto no indica que el codigo sea errado.

https://docs.microsoft.com/en-us/windows/win32/fileio/naming-a-file?redirectedfrom=MSDN

3.-Deseo ayudarte te pase un mensaje para ver si lo podemos revisar de manera interna



PD el ejemplo o los codigos que comparto siempre quedan para qeu sean reutilizados por los lectores del foro y no busca solo dejar la solucion especifica de cierto problema, lo importante es que los podemos utilizar


Quedo Atento

Saludos


Andres
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de DmsNet
Val: 27
Ha aumentado su posición en 514 puestos en Visual Basic (en relación al último mes)
Gráfica de Visual Basic

Buscar PDF

Publicado por DmsNet (9 intervenciones) el 17/09/2020 16:29:08
Gracias por la ayuda, pero de momento solo con esa ruta de búsqueda puedo,

quede igual que al inicio :(, hasta que no pueda montar una unidad mapeada para que no sea larga la ruta
igual muchas gracias seguiré buscando para dar con la solución
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Andres Leonardo
Val: 3.944
Oro
Ha mantenido su posición en Visual Basic (en relación al último mes)
Gráfica de Visual Basic

Buscar PDF

Publicado por Andres Leonardo (1729 intervenciones) el 17/09/2020 22:03:08
Confirma si la ayuda dada pudiste solucionar el tema.

Quedo atento
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de DmsNet
Val: 27
Ha aumentado su posición en 514 puestos en Visual Basic (en relación al último mes)
Gráfica de Visual Basic

Buscar PDF

Publicado por DmsNet (9 intervenciones) el 18/09/2020 22:49:13
pude solucionar el tema con tu ayuda Muchas Gracias

TEMA CERRADO
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar