2015-10-13 115 views
1

我想让Goalseek运行几列(“BB:BP”)。目前仅在以下方式中使用列“BB”:若干列的Goalseek

当单元格“BB62”中的值等于单元格“BB61”中的值时,单元格“BB63”中的值发生变化。

这是代码:

Sub Goalseek() 

    With Worksheets("sheet_input") 
     .Range("bc62").GoalSeek _ 
     Goal:=.Range("bc61").Value, _ 
     ChangingCell:=.Range("bc63") 
    End With 

End Sub 

我想创建一个循环,使得它所有的工作方式与列“BP”当我运行一个宏。我想出了以下几点:

Public Sub Goalseek() 
    Dim rngCol As Range 
    For Each rngCol In ActiveSheet.Range("BB61:BP63") 
    rngCol.Cells(54, 62).GoalSeek Goal:=rngCol.Cells(54, 61), ChangingCell:=rngCol.Cells(54, 63) 
    Next rngCol 
End Sub 

但它不工作。我收到以下错误:

Compile error: Only comments may appear after End Sub, End Function, or End Property

我在做什么错?

回答

1

我们只是在处理错误问题之前处理一些代码整理。

当您定义Range时,.Cell对象是相对于该范围定义的。所以.Cell(1, 1)实际上是引用您的Range(即“BB61”)中的第一个单元而不是整个Worksheet

Sub Goalseek() 
    Dim rng as Range 
    Dim cell as Range 

    Set rng = ThisWorkbook.Worksheets("sheet input").Range("BB62:BP62") 
    For Each cell in rng.Cells 
     cell.GoalSeek Goal:=cell.Offset(-1).Value, ChangingCell:= cell.Offset(1) 
    Next 
End Sub 

你的错误是因为你还没有发布的代码出现:

那么如下的代码可能会更好。在End Sub下的某个地方,您将获得更多代码。大多数情况下,它是删除以前的例程的结果,因此您可能会发现在模块的底部留下了一些旧代码,例如,通常会出现两次,例如两次出现。

+0

嗨Ambie。感谢您的答复。我忘了定义的范围。它正在工作。当我想“重新启动”goalseeker时,我将第63行中的值设置为0.是否有一种方法可以将其自动化,因此在运行宏之前,所有单元格值都设置为0? – Saud

+1

'rng.Offset(1).Value = 0' – Ambie

+0

辉煌。有效。我需要这个宏完全自动化的最后一件事是调整新行,第64行依赖于第61行和第62行,如下所示:如果'行中的单元格中的值'> ='行中的单元格中的值62',则'行64中的单元格中的值'= 1,否则它等于-1。这需要在搜索目标被初始化之前完成,否则对于所有列将等于1。逻辑很直观,但我不确定在哪里插入它。子Goalseek() 昏暗的RNG作为范围 昏暗的小区范围 设置RNG = ThisWorkbook.Worksheets( “sheet_input”)的范围。( “BB62:BP62”) RNG – Saud

0

我找到了解决我的问题INTIAL以及另外两个问题是:

Sub Goalseek() 
    Dim rng As Range 
    Dim cell As Range 

Set rng = ThisWorkbook.Worksheets("pb_input").Range("BB62:BP62") 
    rng.Offset(1).Value = 0 
For Each cell In rng.Cells 
    If cell.Value <= cell.Offset(-1).Value Then _ 
    cell.Offset(2) = 1 Else _ 
    cell.Offset(2) = -1 
    cell.Goalseek Goal:=cell.Offset(-1).Value, ChangingCell:=cell.Offset(1) 
Next 
End Sub 
0

我找到了解决办法是:

Sub GoalSeek() 
Dim rng As Range 
Dim cell As Range 

Application.ScreenUpdating = False 

Set rng = ThisWorkbook.Worksheets("pb_input").Range("BB62:BP62") 
rng.Offset(1).Value = 0 

For Each cell In rng.Cells 
    If cell.Value <= cell.Offset(-1).Value Then 
     cell.Offset(2) = 1 
    Else 
     cell.Offset(2) = -1 
    End If 

    If cell.Offset(-1) > 0 Then 
     cell.GoalSeek Goal:=cell.Offset(-1).Value, ChangingCell:=cell.Offset(1) 
    End If 
Next 

Application.ScreenUpdating = True 
End Sub