2013-06-25 2 views
-1

Я пытался сделать работу ниже кода, и это было вчера вечером, но как-то сегодня утром при открытии Excel он прекратил функционировать. По сути, я использую макрос vlookup для важных данных из разных книг, а имена книг зависят от соответствующего «заголовка» этой строки. Во-первых, я проверяю с утверждением if, действительно ли файл существует; если это не так, я хочу выделить красную ячейку заголовка и перейти к следующей строке, чтобы выполнить ту же проверку. Если файл существует, я хочу заполнить строку соответствующими данными и выделить ячейку заголовка белым цветом.Excel - макрос к важным данным из нескольких книг по имени ячейки

Под моим кодом - я был бы очень признателен, если бы вы могли взглянуть и помочь мне!

Public Function FileFolderExists(strFullPath As String) As Boolean 

    On Error GoTo NextStep 
    If Not Dir(strFullPath, vbDirectory) = vbNullString Then FileFolderExists = True 

NextStep: 
    On Error GoTo 0 
End Function 

Private Sub CommandButton1_Click() 

    Dim wsi As Worksheet 
    Dim wse As Worksheet 
    Dim j As Integer 
    Dim i As Integer 

    Set wsi = ThisWorkbook.Sheets("Income") 
    Set wse = ThisWorkbook.Sheets("Expense") 

    j = 3 

    For i = 1 To 46 

     If FileFolderExists(wsi.Cells(5, i + 2).Value & ".xlsx") Then 
      wsi.Range(wsi.Cells(6, j), wsi.Cells(51, j)).Formula = "=VLOOKUP(index($B$6:$AV$51,row()-5,1),'[" & wsi.Cells(5, i + 2).Value & ".xlsx]Sheet1'!$A$1:$E$70,4,FALSE)" 
      Sheets("Mark-Up Table").Cells(i + 5, 2).Interior.Color = RGB(255, 255, 255) 
      Sheets("Mark-Up Table").Cells(5, i + 2).Interior.Color = RGB(255, 255, 255) 
     Else 
      Sheets("Mark-Up Table").Cells(i + 5, 2).Interior.Color = RGB(255, 0, 0) 
      Sheets("Mark-Up Table").Cells(5, i + 2).Interior.Color = RGB(255, 0, 0) 
     End If 

     If FileFolderExists(wse.Cells(5, i + 2).Value & ".xlsx") Then 
      wse.Range(wse.Cells(6, j), wse.Cells(51, j)).Formula = "=VLOOKUP(index($B$6:$AV$51,row()-5,1),'[" & wse.Cells(5, i + 2).Value & ".xlsx]Sheet2'!$A$1:$E$70,5,FALSE)" 

     Else 
      'do nothing 
     End If 

     j = j + 1 

    Next i 

End Sub 
+0

какой номер ошибки у вас есть и где? –

+0

спасибо за ваш ответ KazJaw. Он не дает en error number, он просто не делает то, что должен. Я подозреваю, что проблема связана с публичной функцией наверху перед тем, как начинается приватное подчинение. Я хочу, чтобы первый оператор if в sub проверял «ok, существует ли этот файл?» который осуществляется через публичную функцию. Если да, тогда продолжайте. Если нет, перейдите к следующему, если вы укажете ниже. – jcv

+0

попытайтесь выполнить отладку кода. Добавьте 'Stop' в начале процедуры' Private Sub CommandButton1_Click() 'и отлаживайте его с помощью клавиши F8. Проверьте переменные, в которых вы ожидаете существенную точку своей подпрограммы. –

ответ

0

Мне удалось решить проблему. Для людей, которые могут столкнуться с подобными проблемами, см. Ниже:

Private Sub CommandButton1_Click() 

    Dim strPath As String 

    Dim wsi As Worksheet 
    Dim wse As Worksheet 

    Dim j As Integer 
    Dim i As Integer 

    Set wsi = ThisWorkbook.Sheets("Income") 
    Set wse = ThisWorkbook.Sheets("Expense") 

    strPath = Sheets("Mark-Up Table").Range("H3").Value 

    j = 3 

    For i = 1 To 46 

     If Dir(strPath & wsi.Cells(i + 5, 2).Value & ".xlsx") = vbNullString Then 
      Sheets("Mark-Up Table").Cells(i + 5, 2).Interior.Color = RGB(255, 0, 0) 
      Sheets("Mark-Up Table").Cells(5, i + 2).Interior.Color = RGB(255, 0, 0) 
     Else 
      wsi.Range(wsi.Cells(3 + j, 3), wsi.Cells(3 + j, 48)).Formula = "=VLOOKUP(index($C$5:$AV$51,1,column()-2),'[" & wsi.Cells(i + 5, 2).Value & ".xlsx]Sheet1'!$A$1:$E$70,4,FALSE)" 
      Sheets("Mark-Up Table").Cells(i + 5, 2).Interior.Color = RGB(255, 255, 255) 
      Sheets("Mark-Up Table").Cells(5, i + 2).Interior.Color = RGB(255, 255, 255) 
     End If 

     If Dir(strPath & wse.Cells(5, i + 2).Value & ".xlsx") = vbNullString Then 
      'do nothing 
     Else 
      wse.Range(wse.Cells(6, j), wse.Cells(51, j)).Formula = "=abs(VLOOKUP(index($B$6:$AV$51,row()-5,1),'[" & wse.Cells(5, i + 2).Value & ".xlsx]Sheet1'!$A$1:$E$70,5,FALSE))" 
     End If 

     j = j + 1 

    Next i 

End Sub