Я пытаюсь вызвать подпрограмму, но получаю сообщение об ошибке «Несоответствие типов» при вводе переменных для подпрограммы (что-нибудь связанное с диапазонами?) - PullRequest
0 голосов
/ 20 апреля 2020

Небольшой фон

Я открываю два последних файла в указанной папке c. (У меня есть два действия, которые открывают закомментированные файлы.) Затем я хочу, чтобы макрос просматривал обе эти wbs (vars недавний & prev ), чтобы вычислить значения для новый wb ("test.xlsx"). На мой взгляд, этот код имеет небольшой смысл:

Код:

    Sub twolatestfiles()

        Dim FileSys, objFile, myFolder, c As Object
        Dim wb1 As Workbook
        Dim wb2 As Workbook
        Dim strFilename, strFilename2, FolderName As String
        Dim dteFile As Date

        FolderName = ("C:\FilePath\Folder")
                Set FileSys = CreateObject("Scripting.FileSystemObject")
                Set myFolder = FileSys.GetFolder(FolderName)

        dteFile = DateSerial(1900, 1, 1)
        For Each objFile In myFolder.Files
            If InStr(1, objFile.Name, ".xlsx") > 0 Then
                If objFile.DateLastModified > dteFile Then
                    dteFile = objFile.DateLastModified
                    strFilename2 = strFilename
                    strFilename = objFile.Name
                End If
            End If
        Next objFile

       ' Set wb1 = Workbooks.Open(FolderName & Application.PathSeparator & strFilename)
       ' Set wb2 = Workbooks.Open(FolderName & Application.PathSeparator & strFilename2)

    Set FileSys = Nothing
    Set myFolder = Nothing

    Dim recent, prev As String
    recent = Right(strFilename, Len(strFilename) - 2)
    prev = (CStr(strFilename2))

     Call populate_fields(ByVal prev, ByVal recent, "test.xlsx")
   End Sub
   Sub populate_fields(wb1 As String, wb2 As String, activewb As String)
    ActiveCell.FormulaR1C1 = "='[" & wb1 & "]SUMMARY'!R11C2-'[" & wb2 & "]SUMMARY'!R11C2"
    Range("C4").Select
    ActiveCell.FormulaR1C1 = "='[" & wb1 & "]SUMMARY'!R11C2"
    Range("D4").Select
    ActiveCell.FormulaR1C1 = "='[" & wb1 & "]SUMMARY'!R11C3-'[" & wb2 & "]SUMMARY'!R11C3"
    Range("E4").Select
    ActiveCell.FormulaR1C1 = "='[" & wb1 & "]SUMMARY'!R11C8"
    Range("F4").Select
    ActiveCell.FormulaR1C1 = "='[" & wb1 & "]SUMMARY'!R11C3"
    Range("G4").Select
    ActiveCell.FormulaR1C1 = "='[" & wb1 & "]SUMMARY'!R11C5-'[" & wb2 & "]SUMMARY'!R11C5"
    Range("H4").Select
    ActiveCell.FormulaR1C1 = "='[" & wb1 & "]SUMMARY'!R11C5"
    Range("J4").Select
    Application.CutCopyMode = False
    ActiveCell.FormulaR1C1 = "=RC[-2]/RC[-4]"
    Range("J5").Select
End Sub

Проблема: Каждый раз, когда я пытаюсь запустите sub:

Call populate_fields(ByVal prev, ByVal recent, "test.xlsx")

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

Я очень новичок в VBA. Любая помощь приветствуется.

Редактировать: Я также попытался напрямую ввести текст (имя файла) в переменные. Также открыты файлы.

1 Ответ

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

Вам необходимо знать о четырех ключевых приемах для начинающих программистов VBA

  1. Всегда, всегда, всегда ставьте Option Explicit в начале каждого класса / формы / модуля.

  2. Используйте F1, чтобы получить помощь. В VBA IDE наведите курсор на объект VBA или Office и нажмите F1. Загрузится вспомогательная страница MS для этого элемента. Убедитесь, что вы прочитали и поняли страницу справки.

  3. Скомпилируйте код, прежде чем пытаться запустить его. В VBA IDE используйте Debug.Compile Project

  4. Установите бесплатное дополнение RubberDack для VBA Fantasti c. В частности, обратите внимание на проверки кода, они являются отличным учебным ресурсом для VBA и приложений Office.

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