【发布时间】:2016-07-19 17:54:40
【问题描述】:
我正在尝试将“masterrow”的格式和公式复制并粘贴到循环中的范围内。该循环还从另一个工作簿中获取数据,因此该工作簿是循环期间的 ActiveWorkbook。
我认为这个“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
【问题讨论】:
-
也许您可以尝试删除所有
Select和Selection。 Look here for HowTo -
您是否尝试过逐行运行代码以准确查看错误发生的位置?
-
谢谢,我会浏览你的参考主题文森特 G,但如果你也能看到解决方案,很高兴知道。我还处于学习阶段。 @Clusks - 我有,如果我跳过激活 wb2 的整个循环,它工作正常,所以这让我得出结论,这是一个 ActiveWorkbook 问题,但我无法理解它。