当使用Excel VBA将范围从一个表单复制到另一个表单时,获取一个对象variables或带有块variables未设置错误

我试图从我的WeeklyDiet表格复制范围到我的DietStats表。

在WeeklyDiet I的单元格A1中input星期数,如Wk1,Wk2等

我想将A1中的一周数据粘贴到DietStats.Range(B4:B55)中包含其等效周数的行中。例如,如果Wk2在A1中,我希望将数据粘贴到包含Wk2的任何行中(B4 :B55)的DietStats表。

我得到一个对象variables或块variables未设置错误消息。

Sub SaveDietMacrosForWeek() Dim Ws1 As Worksheet Dim Ws2 As Worksheet Dim NR As Long Set Ws1 = ActiveWorkbook.Sheets("WeeklyDiet") Set Ws2 = ActiveWorkbook.Sheets("DietStats") Dim Week As String Week = Ws1.Range("A1") NR = Ws2.Range("B4:B55").Find(Week).Row Ws1.Range("E75:I75").Copy Ws2.Range("K" & NR).PasteSpecial (xlPasteValues) Ws1.Range("L75:P75").Copy Ws2.Range("R" & NR).PasteSpecial (xlPasteValues) Ws1.Range("S75:W75").Copy Ws2.Range("Y" & NR).PasteSpecial (xlPasteValues) Ws1.Range("Z75:AD75").Copy Ws2.Range("AF" & NR).PasteSpecial (xlPasteValues) Ws1.Range("AG75:AK75").Copy Ws2.Range("AM" & NR).PasteSpecial (xlPasteValues) Ws1.Range("AN75:AR75").Copy Ws2.Range("AT" & NR).PasteSpecial (xlPasteValues) Ws1.Range("AU75:AY75").Copy Ws2.Range("BA" & NR).PasteSpecial (xlPasteValues) ActiveWorkbook.Save End Sub 

在整个列B上使用Applicatiopn.Match来获取行号。 通过将返回传递给变体,您将获得真正的行号或错误值。

 Sub SaveDietMacrosForWeek() Dim Ws1 As Worksheet Dim Ws2 As Worksheet Dim NR As Variant Set Ws1 = ActiveWorkbook.Sheets("WeeklyDiet") Set Ws2 = ActiveWorkbook.Sheets("DietStats") Dim Week As String Week = Ws1.Range("A1") NR = Application.Match(Week, Ws2.Range("B:B"), 0) If Not IsError(NR) Then Ws2.Range("K" & NR).Resize(1, 5) = Ws1.Range("E75:I75").Value Ws2.Range("R" & NR).Resize(1, 5) = Ws1.Range("L75:P75").Value Ws2.Range("Y" & NR).Resize(1, 5) = Ws1.Range("S75:W75").Value Ws2.Range("AF" & NR).Resize(1, 5) = Ws1.Range("Z75:AD75").Value Ws2.Range("AM" & NR).Resize(1, 5) = Ws1.Range("AG75:AK75").Value Ws2.Range("AT" & NR).Resize(1, 5) = Ws1.Range("AN75:AR75").Value Ws2.Range("BA" & NR).Resize(1, 5) = Ws1.Range("AU75:AY75").Value End If ActiveWorkbook.Save End Sub 

我已经使用直接值转移,而不是您的复制,粘贴特殊值。 直接价值转移更为有效,但需要与来源大小相同的目标。

不知道哪一周是如此,可能需要一些调整。

 Sub SaveDietMacrosForWeek() Dim Ws1 As Worksheet Dim Ws2 As Worksheet Dim r As Range Dim NR As Long Dim Week As String Set Ws1 = ActiveWorkbook.Sheets("WeeklyDiet") Set Ws2 = ActiveWorkbook.Sheets("DietStats") Week = Ws1.Range("A1") Set r = Ws2.Range("B4:B55").Find(What:=Week, LookAt:=xlWhole, MatchCase:=False, SearchFormat:=False) If Not r Is Nothing Then NR = r.Row 'rest of code End If End Sub