2013-06-25 47 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。它不會產生錯誤號,它只是不會做它應該做的。我懷疑問題是在私營部門開始之前,高層的公共職能出現問題。我希望子中的第一個if語句檢查「確定該文件是否存在?」這是通過公共職能完成的。如果是,則繼續。如果不是,請轉到下面的其他if語句。 – jcv

+0

嘗試逐步調試您的代碼。在'Private Sub CommandButton1_Click()'過程的開始處添加'Stop',並用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 
相關問題