Excel VBA – 编译错误 – 对象必需

这是我第一次发表这个精彩的论坛。 我是VBA的新手,一直在写作我的第一个有意义的macros,除了在学习的同时做一些练习。

WIP代码复制如下,让我给你一个背景。

根据各种投入(如付款期限和到期日)计算投资期限。

这张表有所有的formule来计算成熟度值。

现在在表2中,我创build了一个付款期限和期限交汇的matrix结构。 对于1年到期付款(1 … 25)和下一付款期限等的前期合并。

我写了一个macros,它将从表1中选取用户select,然后循环macros中的matrix并捕获结果并将其粘贴到表2中。

我离我要做的还有很远的距离,但是在select和设置付款期限和到期条件的前几行得到了一个代码

错误是编译错误 – 对象需要。 我无法弄清楚它是什么。 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- 2012年9月19日,上午3时10分IST嗨专家,最后我的第一个VBA代码正在运行。 它慢,但它的运行。 (“himanshu.xlsm”)。表格(“Sheet1”)。范围(“J2”)。复制工作簿(“himanshu.xlsm”)。表格(“如果”) .Cells(cols,Rowsh)“,其中源到达时带有正确的值(在debugging模式下检查),但当它被粘贴到目标时,它被粘贴为0.当我检查目标表单时,不知何故,它显示出一个公式(= Max(R1C1:X1Y1)。请注意,从我所在的值(Source)开始,它是一个excel计算,作为selectcol J的最大值的公式,我怀疑代码是复制公式而不是值,请咨询

 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 

(“himanshu.xlsm”)。表格(“Sheet1”)。范围(“J2”)。复制工作簿(“himanshu.xlsm”)。表格(“如果”)。单元格(Rowsh)“,其中源到目标的时候带有正确的值(在debugging模式下检查),但是当它粘贴到目标时,它被粘贴为0.当我检查目标表单时,不知何故,它显示出一个公式(= Max (R1C1:X1Y1)请注意,从我所在的值(Source)开始,它是一个excel计算,作为selectcol J的最大值的公式,我怀疑代码是复制公式而不是值。忠告

PPT是一个string,所以你应该使用:

 PPT = ... 

并不是

  Set PPT = 

Set用于分配对象variables,如工作簿,工作表等

编辑:正如Jeeped在他的评论中提到,你必须改变数据types。 你不能像这样在循环中使用string。 将TermPPT更改为IntegerLong Integer