2017-07-31 262 views
0

使用電子表格專家中的代碼循環瀏覽文件夾中的文件並對它們執行設置任務似乎工作正常。我可能犯了一個錯誤的地方是代碼的設定任務部分。excel vba:運行時錯誤'438'

使用Excel 2010中

sourcewb = ActiveWookbook 
sourcefn = ActiveWorkbook.Name 
masterwb = ThisWorkbook 

masterwb.Activate 
lr = ActiveSheet.ListObjects("DataTbl").ListRows.Count 

If ActiveSheet.ListObjects("DataTbl").DataBodyRange(lr, 1).Value = "" Then 
    sourcewb.Activate 
    ActiveSheet.ListObjects("IntermidateTbl").DataBodyRange.Copy 
    masterwb.Activate 
    ActiveSheet.ListObjects("DataTbl").DataBodyRange(lr, 1).Select 
    Selection.Paste 
    newlr = ActiveSheet.ListObjects("DataTbl").ListRows.Count 
    Range(ActiveSheet.ListObjects("DataTbl").DataBodyRange(lr, 8), _ 
    ActiveSheet.ListObjects("DataTbl").DataBodyRange(newlr, 8)) = "" & sourcefn & "" 
Else 
    ActiveSheet.ListObjects("DataTbl").ListRows.Add AlwaysInsert:=True 
    sourcewb.Activate 
    ActiveSheet.ListObjects("IntermidateTbl").DataBodyRange.Copy 
    masterwb.Activate 
    ActiveSheet.ListObjects("DataTbl").DataBodyRange(lr + 1, 1).Select 
    Selection.Paste 
    newlr = ActiveSheet.ListObjects("DataTbl").ListRows.Count 
    Range(ActiveSheet.ListObjects("DataTbl").DataBodyRange(lr + 1, 8), _ 
    ActiveSheet.ListObjects("DataTbl").DataBodyRange(newlr, 8)) = "" & sourcefn & "" 
End If 

回答

1

有超過了一些錯誤,我會盡力幫助一些。

您正在嘗試設置sourcewb,這是一個Workbook對象,所以你需要改變:

sourcewb = ActiveWookbook 

要:

Set sourcewb = ActiveWookbook 

(也是如此Set masterwb = ThisWorkbook)。

接下來,masterwb.Activate,你不需要Activate工作簿,它也更安全,也設置參考到你想要的表,你也可以添加With聲明,並使用類似:

With masterwb.Worksheets("SheetName") 
    lr = .ListObjects("DataTbl").ListRows.Count ' number of rows in "DataTbl" table 

您也可以將對象設置爲您的ListObjects

Dim DataTbl As ListObject 
Set DataTbl = masterwb.Worksheets("SheetName").ListObjects("DataTbl") 

所以後來,你可以更容易地訪問它的屬性(和「更乾淨」)。

例如:

lr = DataTbl.ListRows.Count ' <-- get the rows count of the table 

和:

If DataTbl.DataBodyRange(lr, 1).Value = "" Then 

等等,你有太多的地方,你Activate 2個工作簿,並在以後使用ActiveSheetSelection

如果您更好地描述了您正在努力實現的目標,我們可以幫助您以更可靠的方式實現目標。

+0

感謝您的幫助@ShaiRado!我給幾個項目主管建立了一個數據表的文件,即「IntermediateTbl」,這些文件保存在一個文件夾中。從我的主文件中,我想打開線索文件複製IntermediateTbl並粘貼到我的DataTbl中。我用你的評論來編輯我的代碼。現在我得到運行時錯誤'13':類型不匹配。 –

+0

類型不匹配來自行Set sourcewb = ActiveWookbook –