Откройте книги Excel, начиная с указанной строки в ячейках - PullRequest
0 голосов
/ 08 апреля 2019

Я хочу открыть рабочие книги из определенной папки, начиная с Конкретной строки, указанной в листе Excel.

Пример: У меня есть список Excel -

  • 123456
  • 567890
  • 654321

И имена файлов начинаются с таких чисел, как:

  • 123456_example_stringxxxx.xlsx
  • 567890 пример stringxx.xlsx
  • 654321-пример stringxxxx.xlsx

хранится в: C: \ Users \ Desktop \ Testr \ Excel_Files

Ниже мой код, но он открывает только первый файл, я пытаюсь добавить цикл, но выдаю ошибки.

Sub Macro1 ()

Dim wb As Workbook

Dim myPath As String

Dim myFile As String

Dim listFileName As String

Dim listName As String

Dim rowCount As Integer

rowCount = 1

listFileName = ActiveSheet.Range("A" & rowCount).Value

listName = listFileName & "*"

myPath = "C:\Users\Desktop\Test\Excel_Files"    

myFile = Dir(myPath & listName & ".xlsx", vbNormal)
If Len(myFile) = 0 Then
'(Here I Want to add such kind of part's list to a text file)

Else
Workbooks.Open myPath & myFile
MsgBox "Successfull", vbInformation, "Opened Sucessfully"
End If

End Sub

Пожалуйста, предложите, как я могу создать цикл или любой лучший и простой код для него. Кроме того,

  1. Я хочу искать имена от А1 до А10
  2. Сообщение "Sucessfull" не должно быть зациклено, оно должно отображаться в конце процесса.
  3. Если какой-либо файл не найден, процесс не нужно останавливать, он перечислит объекты, которые не найдены, в текстовый файл.

С уважением, Вивек Чоталия

1 Ответ

0 голосов
/ 09 апреля 2019

Сначала вам нужно определить последнюю строку, использованную в столбце A, мы делаем это, используя эту строку кода rowCount = ActiveSheet.Cells(Rows.Count, 1).End(xlUp).Row, как только вы это сделаете, вы можете использовать цикл For Next, чтобы открыть все файлы, которые соответствуют столбцу listName.

внутри For Next Я проверяю, был ли файл найден, если его нет, он вызовет небольшую функцию для создания файла .txt.

Попробуй это ...

Option Explicit
Public Sub Open_Workbooks()

Dim wb As Workbook
Dim myPath As String
Dim myFile As String
Dim myExtension As String
Dim listFileName As String
Dim rowCount As Long
Dim i As Long
Dim bool As Boolean

bool = False
rowCount = ActiveSheet.Cells(Rows.Count, 1).End(xlUp).Row

For i = 2 To rowCount

listFileName = ActiveSheet.Cells(i, 1)

myPath = "C:\Users\" & Environ("Username") & "\Desktop\Test\Excel_Files\"
myExtension = "*.xlsx"

myFile = Dir(myPath & listFileName & myExtension)

If Not Len(myFile) = 0 Then

Set wb = Workbooks.Open(Filename:=myPath & myFile)

'do somenthing
'
'
'
'
'
'
'
wb.Close SaveChanges:=False

Else
Call Create_txt_Log(listFileName)
bool = True
End If

Next

If bool = False Then
MsgBox "Successfull", vbInformation, "Opened Sucessfully"
Else
MsgBox "Successfull but not all files where opened check text log file", vbInformation, "Opened Sucessfully"
End If

End Sub

Функция ...

Public Function Create_txt_Log(ByVal listFileName As String)

Dim Fileout As Object
Dim FSO As Object
Dim FolderPath As String
Dim myNotePadName As String
Dim myPath As String

Set FSO = CreateObject("Scripting.FileSystemObject")

myNotePadName = "Not_Found.txt"
myPath = "C:\Users\" & Environ("Username") & "\Desktop\Test\Files_Not_Found\"
FolderPath = myPath & myNotePadName

If FSO.FileExists(FolderPath) = False Then

Set Fileout = FSO.CreateTextFile(myPath & myNotePadName)
Fileout.Write listFileName
Fileout.Close

Else

Set Fileout = FSO.OpenTextFile(FolderPath, 8)
Fileout.Write vbCrLf & listFileName
Fileout.Close

End If

End Function

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...