Excelvariables

我有以下代码:

Sub Strukturkopieren() Dim TZahl As Integer Dim GZahl As Integer Dim MaxZahl As Integer Dim i As Integer Dim j As Integer Dim j2 As Integer Dim g As Integer Dim Startp As Integer Dim Startp2 As Integer MaxZahl = Worksheets("Control").Cells(2, 2).Value For i = 1 To 20 j = 2 * i j2 = j - 1 TZahl = Worksheets("Control").Cells(12, j).Value For g = 1 To TZahl Startp = GZahl * 2 + 1 + (g - 1) * 2 Startp2 = Startp + 1 Set varRangeselect1 = Worksheets("Control").Range(Cells(13, j2), Cells(2013, j)) Set varRangeSelect2 = Worksheets("Structures").Range(Cells(2, Startp), Cells(2002, Startp2)) varRangeselect1.Copy varRangeSelect2.PasteSpecial Paste:=xlValues, Operation:=xlNone, SkipBlanks:=False, Transpose:=False Next g GZahl = TZahl + GZahl Next i End Sub 

我试图复制一组结构给定的时间量(MaxZahl)到另一个工作表。 VBA给我一个1004错误,并指向线:

 Set varRangeselect1 = Worksheets("Control").Range(Cells(13, j2), Cells(2013, j)) 

我是否声明了一个variables是错误的?

当你使用多个工作表时,你应该明确使用Range() and Cells() ,所以VB知道使用哪个工作表。

所以为你的线路

  Set varRangeselect1 = Worksheets("Control").Range(Cells(13, j2), Cells(2013, j)) Set varRangeSelect2 = Worksheets("Structures").Range(Cells(2, Startp), Cells(2002, Startp2)) 

你应该做:

  Set varRangeselect1 = Worksheets("Control").Range(Worksheets("Control").Cells(13, j2), Worksheets("Control").Cells(2013, j)) Set varRangeSelect2 = Worksheets("Structures").Range(Worksheets("Structures").Cells(2, Startp), Worksheets("Structures").Cells(2002, Startp2)) 

或者,使用With (我个人喜欢的方法,因为它缩短了一些代码):

 With Worksheets("Control") Set varRangeselect1 = .Range(.Cells(13, j2), .Cells(2013, j)) End With With Worksheets("Structures") Set varRangeSelect2 = .Range(.Cells(2, Startp), .Cells(2002, Startp2)) End With 

(注意:使用With ,你只需要在Range()Cells() )之前使用一个句点( . ),因为VB明白这意味着你想用With之后的任何东西,在这种情况下Worksheets("Control")Worksheets("Structures")

你现在怎么做,VB看到你想在“控制”和“结构”工作表中使用范围,但是当它试图确定你正在使用什么Cells ,不知道你想要什么样的表单。有道理?