我正在尝试在用户输入她/她自己的行之间选择数据(作为字母),我也试图限制数据,以便比较一行中的值并仅复制具有相同值的数据选择的“比较列”。然后,它在“比较列”中选择具有相同值的所有数据,并将其保存到新工作表中。
然而,它应该如何运作。我已经坚持了几个小时的范围选择。我已将用户输入保存为字符串,即如果我想要在范围A3到D19之间的数据,则将其保存为“A3”和“D19”。当我把它放到一个范围内时:
设置selValue = arbEx.range(rangeStart&“:”& rangeStopp)
selValue.Copy
我得到“应用程序定义的或对象定义的错误”。我尝试了无数不同的输入范围,但我总是得到同样的错误。如果我对以上两行进行评论,那么代码就可以工作,所以问题就在那里。
以下是完整代码,
Sub Lösning()
Set newWb = Workbooks.Add
'Set ActiveSheet = ActiveWorkbook.ActiveSheet
'Förhindrar screenflicker
Application.ScreenUpdating = False
'Skapar två sheets som används i programmet
Dim param As Worksheet
Set param = ThisWorkbook.Sheets("Parametrar")
Dim arbEx As Worksheet
Set arbEx = ThisWorkbook.Sheets("Arbets ex")
'Kod för att hämta startvädet av kolumn
Dim start As String
start = param.Cells(4, 3).Value
'Kod för att hämta slutvärdet av kolumn
Dim stopp As String
stopp = param.Cells(4, 4).Value
'Deklaration av variabler
Dim counter1 As Long
Dim counter2 As Long
Dim counter3 As Long
Dim rangeStart As String
Dim rangeStopp As String
Dim rangeFinal As String
'dela upp efter kolumn
Dim koluParam As String
Dim paramCheck As String
'Kolumn att dela upp efter
koluParam = param.Cells(4, 2).Value
'Algoritm för kopiering av valda kolumner
For i = 3 To 10000
paramCheck = arbEx.Cells(i, koluParam).Value
counter1 = counter1 + 1
counter2 = counter2 + 1
counter3 = counter3 + 1
If (paramCheck <> arbEx.Cells((i + 1), koluParam).Value) Then
counter3 = counter2 - counter1
rangeStart = start & counter3
rangeStopp = stopp & counter2
'-------problem here
Set selValue = arbEx.range(rangeStart & ":" & rangeStopp)
selValue.Copy
'-----------------
newWb.Activate
Sheets.Add
ActiveSheet.Paste
counter1 = 0
End If
Next
'Rensar clipboard
Application.CutCopyMode = False
'Aktiverar uppdatering för att visa all data
Application.ScreenUpdating = True
End Sub
答案 0 :(得分:1)
您的代码中存在错误
你第一次通过
If (paramCheck <> arbEx.Cells((i + 1), koluParam).Value) Then
然后你设置
counter3 = counter2 - counter1
其中counter2
和counter1
彼此相等(为1),从而返回0
,从而导致错误
您必须更改counterX
设置