Excel VBA - 编译错误 - 需要对象

时间:2017-09-18 15:26:17

标签: excel vba excel-vba

这是我在这个精彩论坛上的第一篇文章。我是VBA的新手,在学习的同时做了一些练习,一直在写我的第一个有意义的宏。

下面再现WIP代码,让我给你一个背景信息。

根据支付期限和到期期限等各种输入,计算投资成熟度。

此表格具有计算成熟度值的所有公式。

现在在表2中,我正在创建一个矩阵结构,其中包含付款期限和期限的交叉点。对于1年的付款期限与到期日(1 ... 25)和下一个付款期限等的组合。

我正在编写一个宏,它将从工作表1中选择用户选择,然后在矩阵中循环宏并捕获结果并将其粘贴到第二页。

我仍然远离我所要达到的目标,但在选择和设定付款期限和期限条款的前几行中得到了一个代码

错误是编译错误 - 需要对象。我无法弄清楚它是什么。 WIP代码转载如下

Private Sub Simulation_Click()
Dim PPT As String
Dim Term As String
MsgBox (" The Programme is starting now")

Set PPT = Workbooks("himanshu.xlsm").Worksheet("Sheet1").Range("G2").Value
Set Term = Workbooks("himanshu.xlsm").Worksheet("Sheet1").Range("G3").Value

For PPT = 1 To PPT  
    For Term = 1 To Term  
     ' Do something here  
    Next Term  
Next PPT  

End Sub

请帮忙 编辑#1-九月19,2017,上午3.10 嗨专家, 最后我的第一个VBA代码正在运行。它运行缓慢但运行缓慢。最后一个问题 我在代码行“Workbooks(”himanshu.xlsm“)中有问题。表格(”Sheet1“)。范围(”J2“)。复制工作簿(”himanshu.xlsm“)。表格(”假设“)。细胞( cols,Rowsh)“while to source携带正确的值(在调试模式下检查)但是当它粘贴到目标时,它被粘贴为0.当我检查目标表单时,它以某种方式向我显示一个公式(= Max (R1C1:X1Y1)。请注意,从我在哪里复制值(Source),它是一个excel计算,它是作为选择col的最大值的公式得出的。我怀疑代码是复制公式而不是值。请建议

Option Explicit
Sub macro21()
'MsgBox ("Start")
Dim i As Integer, j As Integer
Dim PPT As Integer
Dim Term As Integer
Dim pptrange As Range    ' Address of the Cell where PPT is maintained in Sheet 1
Dim termrange As Range   ' Address of the Cell where Term is maintained in Sheet 1
Dim cols As Integer
Dim Rowsh As Integer

PPT = 3
Term = 5
cols = 3
Rowsh = 3
For i = 1 To PPT

    For j = 1 To Term
        
        Set pptrange = Workbooks("himanshu.xlsm").Sheets("Sheet1").Range("G2")  ' Set pptrange and termrange locations
        Set termrange = Workbooks("himanshu.xlsm").Sheets("Sheet1").Range("G3")   ' Set pptrange and termrange locations
        pptrange.Value = i
        termrange.Value = j
        ***Workbooks("himanshu.xlsm").Sheets("Sheet1").Range("J2").Copy Workbooks("himanshu.xlsm").Sheets("What if").Cells(cols, Rowsh)***
'        MsgBox ("Value is " & Cells(cols, Rowsh).Value)
        MsgBox ("Value is " & Workbooks("himanshu.xlsm").Sheets("Sheet1").Range("J2"))
        
        
        If j < Term Then
            cols = cols
            Rowsh = Rowsh + 1
        End If
    Next j
    cols = cols + 1
    Rowsh = 3
Next i

End Sub

我在代码行“Workbooks(”himanshu.xlsm“)中有问题。表格(”Sheet1“)。范围(”J2“)。复制工作簿(”himanshu.xlsm“)。表格(”假设“) .Cells(cols,Rowsh)“while to source携带正确的值(在调试模式下检查)但是当它被粘贴到目标时,它被粘贴为0.当我检查目标表时,不知何故它向我显示了一个公式(= Max(R1C1:X1Y1)。请注意,从我所在的位置(值),它是一个excel计算,它作为选择col的最大值的公式到达。我怀疑代码正在复制公式而不是价值。请咨询

1 个答案:

答案 0 :(得分:3)

PPT是一个字符串,因此您应该使用:

PPT = ...

而不是

 Set PPT = 

Set用于分配对象变量,例如工作簿,工作表等。

编辑:正如Jeeped在评论中提到的,你必须改变数据类型。你不能在这样的循环中使用字符串。将TermPPT更改为IntegerLong