SOLVED Как было указано @ z32a7ul Я использовал неправильную переменную, чтобы указать путь после FileDialog. Предполагалось, что OutPathS вместо OutPath.Вход пользователя FileDialog в путь для исходных файлов в VBA
Какой код имеет: У меня есть код, который читает файлы в папке, печатает имена в активной книге и затем помещает имена в порядке возрастания.
Obs1: У меня есть следующие коды, которые используют эту информацию для расчетов, но эта часть не относится к текущей проблеме.
Цель: Я пытаюсь создать FileDialog, чтобы пользователь мог ввести папку, в которой находятся исходные файлы.
Проблема: Я создаю для этого код, но по какой-то причине он не читает исходные файлы, даже если формат тот же.
Где я добрался до сих пор: Если я удалю этот пользовательский ввод и просто «твердый код» адрес источников (если моя сборник находится в той же папке, что и они), все работает нормально. Но тогда я ограничена тем, где я могу разместить эту сборник.
Вопрос: У меня нет конкретной строки ошибки. В результате возникает проблема, так как она не находит исходные файлы. Кто-нибудь знает, что здесь делать?
Код:
Option Explicit
Public path As String
Sub Counter()
Dim count As Integer, i As Long, var As Integer
Dim ws As Worksheet
Dim w As Workbook
Dim Filename As String
Dim FileTypeUserForm As UserForm
Dim X As String
Dim varResult As Variant
Dim OutPath As String, OutPathS As String, wPos As Long
Set w = ThisWorkbook
Application.Calculation = xlCalculationManual
'source input by user
varResult = Application.GetSaveAsFilename(FileFilter:="Comma Separated Values Files" & "(*.csv), *.csv", Title:="OutPath", InitialFileName:="D:StartingPath")
If varResult <> False Then
OutPath = varResult
w.Worksheets("FILES").Cells(1, 4) = varResult
Else
Exit Sub
End If
wPos = InStr(OutPath, "\StartingPath")
OutPathS = Mid(OutPath, 1, wPos - 1)
**'MY ERROR IS HERE, It has to be OutpathS:
path = OutPath & "\*.*" 'this should be: path = OutPathS & "\*.*"**
Filename = Dir(path)
ThisWorkbook.Sheets("FILES").Range("A:A").ClearContents
X = GetValue
If X = "EndProcess" Then Exit Sub
Set ws = ThisWorkbook.Sheets("FILES")
i = 0
Do While Filename <> ""
var = InStr(Filename, X)
If var <> 0 Then
i = i + 1
ws.Cells(i + 1, 1) = Filename
Filename = Dir()
Else: Filename = Dir()
End If
Loop
Range("A2:A" & i).Sort key1:=Range("A2"), order1:=xlAscending, Header:=xlNo 'this will sort the names directly in the "FILES" sheet
Application.Calculation = xlCalculationAutomatic
ws.Cells(1, 2) = i
MsgBox i & " : files found in folder"
End Sub
Function GetValue()
With FileTypeUserForm
.Show
GetValue = .Tag
End With
Unload FileTypeUserForm
End Function
Obs2: Существует общественный переменной, так как он будет использоваться в последующем макро, для расчетов.
Obs3: Вся часть filedialog предназначена только для того, чтобы найти путь к исходным файлам. Это ничего не спасает.
Вы можете попробовать это: 'varResult = Application.GetSaveAsFilename (FileFilter: = «Запятые значения запятой (*. Csv), * .csv») ' – Vityata
Вам не хватает \ из InitialFileName? Разве это не должно быть «D: \ StartPath» вместо «D: StartingPath»? – z32a7ul
Вы сохраняете результат от Mid до OutPathS, но вычисляете путь из OutPath (без S). – z32a7ul