从保存在字符串中的变量中选择范围(Excel中的VBA)

时间:2016-08-29 17:23:07

标签: excel vba excel-vba

我正在尝试在用户输入她/她自己的行之间选择数据(作为字母),我也试图限制数据,以便比较一行中的值并仅复制具有相同值的数据选择的“比较列”。然后,它在“比较列”中选择具有相同值的所有数据,并将其保存到新工作表中。

然而,它应该如何运作。我已经坚持了几个小时的范围选择。我已将用户输入保存为字符串,即如果我想要在范围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

1 个答案:

答案 0 :(得分:1)

您的代码中存在错误

你第一次通过

If (paramCheck <> arbEx.Cells((i + 1), koluParam).Value) Then

然后你设置

counter3 = counter2 - counter1

其中counter2counter1彼此相等(为1),从而返回0,从而导致错误

您必须更改counterX设置