2017-07-31 19 views
0

スプレッドシートの指導者のコードを使用してフォルダ内のファイルをループし、それらのファイルでセットタスクを実行すると、正常に動作しているようです。私が間違っているのは、コードの設定されたタスク部分です。エクセル2010excel vba:実行時エラー '438'

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 = ActiveWookbook 

へ:

Set sourcewb = ActiveWookbook 

(同じことがSet masterwb = ThisWorkbookのために行く)を変更する必要があるので、

あなたは、Workbookオブジェクトであるsourcewbを設定しようとしています。

With masterwb.Worksheets("SheetName") 
    lr = .ListObjects("DataTbl").ListRows.Count ' number of rows in "DataTbl" table 
:あなたも With文を追加して、のようなものを使用することができ、

次に、masterwb.Activateは、ワークブックをActivateする必要はありません、それはまた、あなたがしたいシートへの参照を設定することもだ方が安全

オブジェクトを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」を構築するファイルを与え、これらのファイルは1つのフォルダに保存されます。私のマスターファイルから、私はリードファイルを開き、IntermediateTblをコピーして、私のDataTblに貼り付けたいと思います。コメントを使ってコードを編集しました。今すぐ実行時エラー '13'が表示されます:型の不一致。 –

+0

型の不一致は、行から来ます。Set sourcewb = ActiveWookbook –

関連する問題