Функция замены не работает Получение ошибки: неверное количество аргументов или неправильное назначение свойства из функции замены - PullRequest
0 голосов
/ 10 марта 2020

Я пытаюсь обновить макрос, который начинается с изменения имени пути к книге. Когда я запускаю код, я получаю неправильное количество аргументов ошибки. Я просмотрел аргумент, но мне кажется, что он работает правильно. Заранее благодарю за любую помощь!

Sub agetprevsectinfo()
Dim wb As Workbook
Dim wb2 As Workbook
Dim ws As Worksheet
Dim x As Integer
Dim xx As Integer
Dim y As Integer
Dim newdir As String
Dim formulapth As String
Dim curmnth As String
Dim prevmnth As String
x = 0
xx = 0
y = 104
Set wb = ThisWorkbook
Set ws = wb.ActiveSheet
curmnth = wb.Sheets("Section Info").Range("N28")
prevmnth = wb.Sheets("Section Info").Range("N27")

newdir = wb.Path & "\" & replace(replace(wb.Name, curmnth, prevmnth), MonthName(CDate(curmnth)), MonthName(CDate(prevmnth)))
formulapth = wb.Path & "\[" & replace(replace(wb.Name, curmnth, prevmnth), MonthName(CDate(curmnth)), MonthName(CDate(prevmnth))) & "]"
'last chance to cancel import
If MsgBox("Import may take upto 45seconds..." & vbNewLine & "Press OK to continue", vbOKCancel) = vbCancel Then Exit Sub

If Len(Dir(newdir)) = 0 Then
     MsgBox "Previous Month Tracker not found " & vbNewLine & "Please enter results manually", vbOKOnly, "Import Section"
     Exit Sub
    Else
Application.StatusBar = "Importing Section Info..." & xx & "%"
Application.ScreenUpdating = False
Dim teststr As String
    For i = 5 To 26
        If i <> 25 Then
        teststr = "='" & formulapth & "Section Info'!R" & i & "C4"
        ws.Range("D" & i).FormulaR1C1 = teststr
            If ws.Range("D" & i).Value = 0 Then
            ws.Range("D" & i).ClearContents
            Else
            ws.Range("D" & i).Value = ws.Range("D" & i).Value
            End If
        x = (x + 1)
        xx = ((x / y)) * 100
        Application.StatusBar = "Importing Section Info..." & xx & "%"
        End If
Next i
Application.ScreenUpdating = True
Application.ScreenUpdating = False
    For i = 5 To 26
        If i <> 25 Then
            teststr = "='" & formulapth & "Section Info'!R" & i & "C5"
            ws.Range("E" & i).FormulaR1C1 = teststr
            If ws.Range("E" & i).Value = 0 Then
            ws.Range("E" & i).ClearContents
            Else
            ws.Range("E" & i).Value = ws.Range("E" & i).Value
            End If
        x = (x + 1)
        xx = ((x / y)) * 100
        Application.StatusBar = "Importing Section Info..." & xx & "%"
        End If
Next i
Application.ScreenUpdating = True
Application.ScreenUpdating = False
    For i = 5 To 26
        If i <> 25 Then
        teststr = "='" & formulapth & "Section Info'!R" & i & "C6"
        ws.Range("F" & i).FormulaR1C1 = teststr
        ws.Range("F" & i).Value = ws.Range("F" & i).Value
            If ws.Range("F" & i).Value = 0 Then
            ws.Range("F" & i).ClearContents
            Else
            ws.Range("F" & i).Value = ws.Range("F" & i).Value
            End If
        x = (x + 1)
        xx = ((x / y)) * 100
        Application.StatusBar = "Importing Section Info..." & xx & "%"
        End If
Next i
    For i = 5 To 26
        If i <> 25 Then
        teststr = "='" & formulapth & "Section Info'!R" & i & "C7"
        ws.Range("G" & i).FormulaR1C1 = teststr
            If ws.Range("G" & i).Value = 0 Then
            ws.Range("G" & i).ClearContents
            Else
            ws.Range("G" & i).Value = ws.Range("G" & i).Value
            End If
        x = (x + 1)
        xx = ((x / y)) * 100
        Application.StatusBar = "Importing Section Info..." & xx & "%"
        End If
Next i
MsgBox "FINISHED!"
Application.ScreenUpdating = True
Application.StatusBar = False
End If

End Sub

Моя ошибка во второй функции замены.

enter image description here

1 Ответ

1 голос
/ 10 марта 2020

Я упростил ваш код до этого:

Sub agetprevsectinfo()
Dim wb As Workbook
Dim wb2 As Workbook
Dim ws As Worksheet
Dim x As Integer
Dim xx As Integer
Dim y As Integer
Dim newdir As String
Dim formulapth As String
Dim curmnth As String
Dim prevmnth As String
x = 0
xx = 0
y = 104
Set wb = ThisWorkbook
Set ws = wb.ActiveSheet
curmnth = "03"  'hard-coded
prevmnth = "02" 'hard-coded

newdir = wb.Path & "\" & Replace(Replace(wb.Name, curmnth, prevmnth), MonthName(CDate(curmnth)), MonthName(CDate(prevmnth)))
formulapth = wb.Path & "\[" & Replace(Replace(wb.Name, curmnth, prevmnth), MonthName(CDate(curmnth)), MonthName(CDate(prevmnth))) & "]"
'last chance to cancel import
MsgBox (formulapth)

End Sub

И это работает.

Все в этом коде совпадает с вашим, за исключением того, что я жестко запрограммировал curmnth и prevmnth и вырезал все после строки, которую вы говорите, терпит неудачу.

Другими словами, вы не правильно определили проблему (предполагая, что мои жестко запрограммированные значения - это то, что на самом деле содержатся в ваших таблицах, но я основал их на вашем скриншоте).

Я понимаю, что это не очень хороший "Ответ", но я не уверен, как еще это передать.

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