Сохраняет как макрос, выдавая ошибку времени выполнения «1004», несмотря на то, что хорошо работал в другой книге - PullRequest
0 голосов
/ 28 апреля 2020

Спасибо за всю помощь, оказанную здесь.

Я ни в коем случае не программист, и я часами ищу форумы и собираю фрагменты кода, чтобы создать то, что мне нужно. Я построил приведенный ниже код для извлечения данных из одной рабочей книги, основываясь на фильтре, а затем сохранил как в отдельных рабочих книгах. Этот код работал очень хорошо для одной книги, но теперь я попытался использовать его повторно, он выдает ошибку времени выполнения 1004 при попытке сохранить как. Любая идея, где это может пойти не так?

Большое спасибо,

Стивен

Sub Split()

Dim ws     As Worksheet
Dim wsNew  As Workbook
Dim rData  As Range
Dim rfl    As Range
Dim state  As String
Dim myValue As Variant
Dim sfilename As String
Dim FolderName As String
Dim strDir As String

myValue1 = InputBox("What date is this save for? (Format: DD Month)")

Range("B1").Select
Selection.AutoFilter
Set ws = ThisWorkbook.Sheets("Combined Data")

With ws
Set rData = .Range(.Cells(1, 2), .Cells(.Rows.Count, 13).End(xlUp))
.Columns(.Columns.Count).Clear
.Range(.Cells(2, 6), .Cells(.Rows.Count, 6).End(xlUp)).AdvancedFilter Action:=xlFilterCopy, CopyToRange:=.Cells(1, .Columns.Count), Unique:=True

 MsgBox "Please select the folder to save files"
           FolderName = GetFolder()
        If FolderName = "" Then
        MsgBox "No folder was selected. Program will terminate."
        Exit Sub
    End If

For Each rfl In .Range(.Cells(2, .Columns.Count), .Cells(.Rows.Count, .Columns.Count).End(xlUp))
state = rfl.Text

strDir = FolderName & "\" & state

If Dir(strDir, vbDirectory) = "" Then
        MkDir strDir
Else

End If

Set wsNew = Workbooks.Add
sfilename = "Monday" & " " & myValue1 & " - Engagement" & ".xlsx"

ActiveWorkbook.SaveAs strDir & "\" & sfilename

1 Ответ

0 голосов
/ 28 апреля 2020

Вам необходимо выяснить действительную причину этого распространенного кода ошибки - 1004. Отредактируйте код своей функции / VBA и запустите программу в режиме отладки, чтобы определить строку, которая ее вызывает. А затем добавьте приведенный ниже фрагмент кода, чтобы увидеть ошибку:

On Error Resume Next
// your code goes here which causes 1004 error
If Err.Number > 0 Then
  Debug.Print Err.Number & ":" & Err.Description
End If

Я бы посоветовал использовать отладочные сочетания клавиш на клавиатуре - Step Into ( F8 ), Step Over ( Shift + F8 ), выход ( Ctrl + Shift + F8 )

...