VBA не может заставить код не быть ничем после использования.Найти

#excel #vba

#excel #vba

Вопрос:

Я пытаюсь закодировать макрос, который примет идентификационный номер, который находится где-то в имени файла, а затем найдет соответствующий номер объекта в столбце A основного листа, где он затем будет смещен и добавлен к этой строке. Есть два файла, один называется InterviewData10 **.xlsx и SCIDdata10 **.xslx с символами, представляющими два числа. Я добился успеха с InterviewData, используя этот код:

 InterviewFile = Dir(FileDir amp; "InterviewData*xls*")
Do Until InterviewFile = ""
    DoEvents
    
    Set Interview = Workbooks.Open(FileDir amp; InterviewFile)
    
    Dim InterviewFilepath As String
    InterviewFilepath = Interview.Name
    
    Dim SubID As Variant
    Set SubID = Master.Sheets("Data").Range("A:A").Find(what:=Mid(InterviewFilepath, InStrRev(InterviewFilepath, "")   14, InStrRev(InterviewFilepath, ".") - InStrRev(InterviewFilepath, "") - 14), LookIn:=xlValues, LookAt:=xlWhole)
    
    
    If Not IsError(SubID) Then
        Interview.Sheets("HAM-D").Range("B23").Copy
        SubID.Offset(0, 28).PasteSpecial xlPasteValues
        Interview.Sheets("PANSS").Range("C9").Copy
        SubID.Offset(0, 29).PasteSpecial xlPasteValues
        Interview.Sheets("PANSS").Range("C17").Copy
        SubID.Offset(0, 30).PasteSpecial xlPasteValues
        Interview.Sheets("PANSS").Range("C34").Copy
        SubID.Offset(0, 31).PasteSpecial xlPasteValues
        Interview.Sheets("YMRS").Range("C13").Copy
        SubID.Offset(0, 32).PasteSpecial xlPasteValues
    Else
        Master.Sheets("Data").Range("A" amp; Rows.Count).End(xlUp).Offset(1, 0) = SubID
        Interview.Sheets("HAM-D").Range("B23").Copy
        SubID.Offset(0, 28).PasteSpecial xlPasteValues
        Interview.Sheets("PANSS").Range("C9").Copy
        SubID.Offset(0, 29).PasteSpecial xlPasteValues
        Interview.Sheets("PANSS").Range("C17").Copy
        SubID.Offset(0, 30).PasteSpecial xlPasteValues
        Interview.Sheets("PANSS").Range("C34").Copy
        SubID.Offset(0, 31).PasteSpecial xlPasteValues
        Interview.Sheets("YMRS").Range("C13").Copy
        SubID.Offset(0, 32).PasteSpecial xlPasteValues
    End If
    
    InterviewFile = Dir

Loop
 

Я попробовал это с SCIDdata, однако это намного более условно, чем просто копирование и вставка. У него есть 1, которые, когда в определенных ячейках необходимо поместить определенное слово в главный файл. Это код, который я пытаюсь использовать:

 SCIDfile = Dir(FileDir amp; "SCIDdata*xls*")
Do Until SCIDfile = ""
     DoEvents
    
     Set SCID = Workbooks.Open(FileDir amp; SCIDfile)
    
     Dim SCIDfilePath As String
     SCIDfilePath = SCID.Name
     
     
     Dim SubjectID As Variant
     Set SubjectID = Master.Sheets("Data").Range("A:A").Find(what:=Mid(SCIDfilePath, InStrRev(SCIDfilePath, "")   9, InStrRev(SCIDfilePath, ".") - InStrRev(SCIDfilePath, "") - 8), LookIn:=xlValues, LookAt:=xlWhole)
        
     'Pulls Subject ID from file name and matches it to the existing one in master
    
        If Not SubjectID Is Nothing Then
            If SCID.Sheets("ALG. III").Range("L6") = 1 Then
                SubjectID.Offset(0, 1).Value = "BPI"
            ElseIf SCID.Sheets("ALG. III").Range("L7") = 1 Then
                SubjectID.Offset(0, 1).Value = "SM"
            ElseIf SCID.Sheets("ALG. III").Range("L9") = 1 Then
                SubjectID.Offset(0, 1).Value = "BP2"
            ElseIf SCID.Sheets("ALG. III").Range("L10") = 1 Then
                SubjectID.Offset(0, 1).Value = "Other BP"
            Else
                MsgBox ("Error: Please check SCID file before continuing")
                Exit Sub
            End If
        Else
           MsgBox ("No subject ID was found for this subject.")
        End If
    
    SCIDfile = Dir
Loop
 

При запуске код останавливается, когда я делаю SubjectID.Смещение.

В моих попытках отладки я обнаружил следующее:

  1. Файл, безусловно, открывается, и данные можно копировать и вставлять.
  2. Функция mid извлекает правильный идентификационный номер субъекта из имени файла.
  3. Это не «ничего», потому что, если я выполняю простые функции (которые не включают SubjectID) после первого оператора if, ошибки нет, и код будет выполняться правильно.
  4. При выполнении отладки.Печать, по какой-то причине в непосредственном окне ничего нет. Он не распознает SubjectID как значение ячейки, тогда как когда я выполняю отладку.Распечатайте SubID из InterviewData, в нем будет указан идентификационный номер для выбранного файла. Из-за этого он сообщает мне, что мне не хватает объекта (ошибка 91).

Я знаю о проблеме, но я понятия не имею, как ее исправить.

Комментарии:

1. Какая строка выдает ошибку?