2016-07-19 16 views
0

"masterrow"の書式と式をループ内の範囲にコピー&ペーストしようとしています。ループはまた、別のワークブックからデータをフェッチします。したがって、ループ中のActiveWorkbookです。ループ内の式と書式をコピー/ペーストしようとするとVBAエラーが発生する

私はこの "ActiveWorkbook"の問題は問題の原因だと思っていますが、私は解決策のための助けが必要です。私は以下のループ関数を提供しています。あなたが私を助けることを願っています。

Sub Worksheet_UpdateAllItemCostData() 

Dim material As Variant 
Dim fndEntry As Range 
Dim wb1 As Workbook, wb2 As Workbook 
Dim lr As Long, I As Long 

Application.ScreenUpdating = False 
Application.DisplayAlerts = False 

Set wb1 = ActiveWorkbook 

lr = wb1.Sheets("Sagsnr.").Cells(Rows.Count, "C").End(xlUp).Row 

If lr < 21 Then 
    Exit Sub 
End If 

Workbooks.Open Filename:="G:\Backoffice\Tilbudsteam\Kostdatabase\Matcost.xls", ReadOnly:=True 

Set wb2 = ActiveWorkbook 

    For I = 21 To lr 

      wb1.Sheets("Sagsnr.").Rows("1:1").Select 
      selection.Copy 
      wb1.Sheets("Sagsnr.").Rows(I).Select 
      selection.PasteSpecial Paste:=xlPasteFormulas, Operation:=xlNone, _ 
      SkipBlanks:=True, Transpose:=False 
      selection.PasteSpecial Paste:=xlPasteFormats, Operation:=xlNone, _ 
      SkipBlanks:=False, Transpose:=False 
      selection.EntireRow.Hidden = False 

    material = wb1.Sheets("Sagsnr.").Range("C" & I).Value 

    Set fndEntry = wb2.Sheets("Matcost").Range("D:D").Find(What:=material) 

    If Not fndEntry Is Nothing Then 

      wb1.Sheets("Sagsnr.").Range("B" & I).Value = wb2.Sheets("Matcost").Range("H" & fndEntry.Row).Value 'Product group 
      wb1.Sheets("Sagsnr.").Range("E" & I).Value = wb2.Sheets("Matcost").Range("Q" & fndEntry.Row).Value 'Available Stock 

     End If 

    Set fndEntry = wb2.Sheets("Matcost").Range("C:C").Find(What:=material) 

     If Not fndEntry Is Nothing Then 

      wb1.Sheets("Sagsnr.").Range("B" & I).Value = wb2.Sheets("Matcost").Range("H" & fndEntry.Row).Value 'Product group 
      wb1.Sheets("Sagsnr.").Range("E" & I).Value = wb2.Sheets("Matcost").Range("Q" & fndEntry.Row).Value 'Available Stock 

     End If 
Next I 

wb2.Close 

Application.DisplayAlerts = True 
Application.ScreenUpdating = True 

End Sub 
+0

.Selectを回避しようとしてください。 [ハウツーについてはここを見てください](http://stackoverflow.com/questions/10714251/how-to-avoid-using-select-in-excel-vba-macros) –

+0

正確にどこにエラーが発生するのですか? – Clusks

+0

ありがとうございました、あなたの参考トピックVincent Gを見ていきますが、あなたも解決策を見てもらえれば分かります。私はまだ学習段階にあります。 @Clusks - 私はwb2をアクティブにするループ全体をスキップするとうまくいきますので、これはActiveWorkbookの問題だと私に結論づけていますが、私はそれを回避できません。 – Smeltet

答えて

0

あなたはそれはあなたがあなたのwb2をアクティブにするとき、おそらくActiveWorkbook問題で言ったように、あなたはこれを試してみてください:

Set wb2 = Workbooks.Open (Filename:="G:\Backoffice\Tilbudsteam\Kostdatabase\Matcost.xls", ReadOnly:=True) 

の代わりにも

Workbooks.Open Filename:="G:\Backoffice\Tilbudsteam\Kostdatabase\Matcost.xls", ReadOnly:=True 

Set wb2 = ActiveWorkbook 

を、あなたのコードがである場合wb1ActiveWorkbookを避けることができます:

Set wb1 = ThisWorkbook 

追加のアドバイスとして、あなたはたぶん、あなたはすべての `SELECT`と` Selection`を削除しようとすることができ、あなたのコードHow to avoid Select in Excel VBA macros

+0

提案していただきありがとうございますが、まだエラーが発生しています。これは、wb2をActiveWorkbookに設定しているかどうかにかかわらず、何とかwb2で動作しているという事実に関連していると思います。 選択した分に達したときにエラーがスローされます。コピー行 – Smeltet

+0

'.Select'と' Selection.'を取り除くとどうなりますか? 'wb1.Sheets(" Sagsnr。 ")。行(" 1:1 ")。コピーはペーストと同じです。 –

+0

ありがとうございました。 – Smeltet

関連する問題