我试图让这个vba代码运行,但我得到了一个"对象需要"错误。当我调试时,没有突出显示。由于这个原因,我没有看到对象丢失的位置。我正在运行Excel 2010.提前感谢您的帮助。
Private Sub CommandButton1_Click()
Dim i As Long
Dim sh As Object
Dim Yr, Yr_P
Dim Qinput As String
Dim Sheet6, Sheet1, Sheet2, Sheet3 As Object
'get new year
Qinput = InputBox(Prompt:="Enter the year you want to create data for")
If Qinput = vbNullString Then
Exit Sub
Else
End If
'identify year
Yr = Right(Left(Qinput, 4), 2)
Yr_P = Yr - 1
'change new on tabnames
Sheet6.Name = "FY" & Yr & "GM Forecast (AMSG) Total"
Sheet1.Name = "FY" & Yr & "GM Forecast(US)"
Sheet2.Name = "FY" & Yr & "GM Forecast(MCU)"
Sheet3.Name = "FY" & Yr & "GM Forecast (PDSN)"
'update headers
With Sheet6
Cells(1, 6) = "FY" & Yr_P
Cells(1, 15) = "FY" & Yr
Cells(1, 24) = "FY" & Yr
Cells(1, 33) = "FY" & Yr
Cells(1, 42) = "FY" & Yr
Cells(2, 3) = "FY" & Yr_P & "Q4"
Cells(2, 12) = "FY" & Yr & "Q1"
Cells(2, 21) = "FY" & Yr & "Q2"
Cells(2, 30) = "FY" & Yr & "Q3"
Cells(2, 39) = "FY" & Yr & "Q4"
Cells(2, 48) = "FY" & Yr & "(to date)"
Cells(2, 49) = "FY" & Yr & "FCST"
Cells(2, 51) = "Normalized FY" & Yr & "FCST"
Cells(3, 3) = "Jul," & Yr_P
Cells(3, 4) = "Aug," & Yr_P
Cells(3, 5) = "Sep," & Yr
Cells(3, 12) = "Oct," & Yr
Cells(3, 13) = "Nov," & Yr
Cells(3, 14) = "Dec,) & Yr"
Cells(3, 21) = "Jan," & Yr
Cells(3, 22) = "Feb," & Yr
Cells(3, 23) = "Mar," & Yr
Cells(3, 30) = "Apr," & Yr
Cells(3, 31) = "May," & Yr
Cells(3, 32) = "Jun," & Yr
Cells(3, 39) = "Jul," & Yr
Cells(3, 40) = "Aug," & Yr
Cells(3, 41) = "Sep," & Yr
End With
With Sheet1
Cells(1, 6) = "FY" & Yr_P
Cells(1, 15) = "FY" & Yr
Cells(1, 24) = "FY" & Yr
Cells(1, 33) = "FY" & Yr
Cells(1, 42) = "FY" & Yr
Cells(2, 3) = "FY" & Yr_P & "Q4"
Cells(2, 12) = "FY" & Yr & "Q1"
Cells(2, 21) = "FY" & Yr & "Q2"
Cells(2, 30) = "FY" & Yr & "Q3"
Cells(2, 39) = "FY" & Yr & "Q4"
Cells(2, 48) = "FY" & Yr & "(to date)"
Cells(2, 49) = "FY" & Yr & "FCST"
Cells(2, 51) = "Normalized FY" & Yr & "FCST"
Cells(3, 3) = "Jul," & Yr_P
Cells(3, 4) = "Aug," & Yr_P
Cells(3, 5) = "Sep," & Yr
Cells(3, 12) = "Oct," & Yr
Cells(3, 13) = "Nov," & Yr
Cells(3, 14) = "Dec,) & Yr"
Cells(3, 21) = "Jan," & Yr
Cells(3, 22) = "Feb," & Yr
Cells(3, 23) = "Mar," & Yr
Cells(3, 30) = "Apr," & Yr
Cells(3, 31) = "May," & Yr
Cells(3, 32) = "Jun," & Yr
Cells(3, 39) = "Jul," & Yr
Cells(3, 40) = "Aug," & Yr
Cells(3, 41) = "Sep," & Yr
'copy all Q4 data from columns AM-AO and paste into C-E the delete/clear the old data
Sheet1.Cells("AM4:AO13").Value = Sheet1.Cells("C4:E13").Value
Sheet1.Cells("AM4:AO13").ClearContents
Sheet1.Cells("AM18:AO32").Value = Sheet1("C18:E32").Value
Sheet1.Cells("AM18:AO32").ClearContents
Sheet1.Cells("AM44:AO47").Value = Sheet1.Cells("C44:E47").Value
Sheet1.Cells("AM44:AO47").ClearContents
Sheet1.Cells("AS50").Copy Destination:=Sheet1.Cells("H50")
Sheet1.Cells("AS50,Q50,Z50,AI50,AX50").ClearContents
End With
End Sub
答案 0 :(得分:1)
有关How to use Sheets by Index Number
的信息使用Worksheets(6)
代替sheet6
您已声明Dim Sheet6, Sheet1, Sheet2, Sheet3 As Object
但应用程序不知道它们是否表示工作簿中的Sheets
或其他内容
删除声明并将所有对工作表的引用更改为Worksheets(Index-No)
例如With Sheet1
将成为With Worksheets(1)
等
P.S确保您的工作簿中有6张
Private Sub CommandButton1_Click()
Dim i As Long
Dim sh As Object
Dim Yr, Yr_P
Dim Qinput As String
'get new year
Qinput = InputBox(Prompt:="Enter the year you want to create data for")
If Qinput = vbNullString Then
Exit Sub
Else
End If
'identify year
Yr = Right(Left(Qinput, 4), 2)
Yr_P = Yr - 1
'change new on tabnames
Worksheets(6).Name = "FY" & Yr & "GM Forecast (AMSG) Total"
Worksheets(1).Name = "FY" & Yr & "GM Forecast(US)"
Worksheets(2).Name = "FY" & Yr & "GM Forecast(MCU)"
Worksheets(3).Name = "FY" & Yr & "GM Forecast (PDSN)"
'update headers
With Worksheets(6)
Cells(1, 6) = "FY" & Yr_P
Cells(1, 15) = "FY" & Yr
Cells(1, 24) = "FY" & Yr
Cells(1, 33) = "FY" & Yr
Cells(1, 42) = "FY" & Yr
Cells(2, 3) = "FY" & Yr_P & "Q4"
Cells(2, 12) = "FY" & Yr & "Q1"
Cells(2, 21) = "FY" & Yr & "Q2"
Cells(2, 30) = "FY" & Yr & "Q3"
Cells(2, 39) = "FY" & Yr & "Q4"
Cells(2, 48) = "FY" & Yr & "(to date)"
Cells(2, 49) = "FY" & Yr & "FCST"
Cells(2, 51) = "Normalized FY" & Yr & "FCST"
Cells(3, 3) = "Jul," & Yr_P
Cells(3, 4) = "Aug," & Yr_P
Cells(3, 5) = "Sep," & Yr
Cells(3, 12) = "Oct," & Yr
Cells(3, 13) = "Nov," & Yr
Cells(3, 14) = "Dec,) & Yr"
Cells(3, 21) = "Jan," & Yr
Cells(3, 22) = "Feb," & Yr
Cells(3, 23) = "Mar," & Yr
Cells(3, 30) = "Apr," & Yr
Cells(3, 31) = "May," & Yr
Cells(3, 32) = "Jun," & Yr
Cells(3, 39) = "Jul," & Yr
Cells(3, 40) = "Aug," & Yr
Cells(3, 41) = "Sep," & Yr
End With
With Worksheets(1)
Cells(1, 6) = "FY" & Yr_P
Cells(1, 15) = "FY" & Yr
Cells(1, 24) = "FY" & Yr
Cells(1, 33) = "FY" & Yr
Cells(1, 42) = "FY" & Yr
Cells(2, 3) = "FY" & Yr_P & "Q4"
Cells(2, 12) = "FY" & Yr & "Q1"
Cells(2, 21) = "FY" & Yr & "Q2"
Cells(2, 30) = "FY" & Yr & "Q3"
Cells(2, 39) = "FY" & Yr & "Q4"
Cells(2, 48) = "FY" & Yr & "(to date)"
Cells(2, 49) = "FY" & Yr & "FCST"
Cells(2, 51) = "Normalized FY" & Yr & "FCST"
Cells(3, 3) = "Jul," & Yr_P
Cells(3, 4) = "Aug," & Yr_P
Cells(3, 5) = "Sep," & Yr
Cells(3, 12) = "Oct," & Yr
Cells(3, 13) = "Nov," & Yr
Cells(3, 14) = "Dec,) & Yr"
Cells(3, 21) = "Jan," & Yr
Cells(3, 22) = "Feb," & Yr
Cells(3, 23) = "Mar," & Yr
Cells(3, 30) = "Apr," & Yr
Cells(3, 31) = "May," & Yr
Cells(3, 32) = "Jun," & Yr
Cells(3, 39) = "Jul," & Yr
Cells(3, 40) = "Aug," & Yr
Cells(3, 41) = "Sep," & Yr
'copy all Q4 data from columns AM-AO and paste into C-E the delete/clear the old data
Worksheets(1).Range("C4:E13").Value = Worksheets(1).Range("AM4:AO13")
Worksheets(1).Range("AM4:AO13").ClearContents
Worksheets(1).Range("C18:E32").Value = Worksheets(1).Range("AM18:AO32").Value
Worksheets(1).Range("AM18:AO32").ClearContents
Worksheets(1).Range("C44:E47").Value = Worksheets(1).Range("AM44:AO47").Value
Worksheets(1).Range("AM44:AO47").ClearContents
Worksheets(1).Range("AS50").Copy Destination:=Worksheets(1).Range("H50")
Worksheets(1).Range("AS50,Q50,Z50,AI50,AX50").ClearContents
End With
End Sub
答案 1 :(得分:0)
Worksheets("Sheet6").Name = "FY" & Yr & "GM Forecast (AMSG) Total"
Worksheets("Sheet1").Name = "FY" & Yr & "GM Forecast(US)"
Worksheets("Sheet2").Name = "FY" & Yr & "GM Forecast(MCU)"
Worksheets("Sheet3").Name= "FY" & Yr & "GM Forecast (PDSN)"
解决了一些问题。底部代码块仍然存在问题。
编辑:思维上限提醒我,我做了Dim Sheet6,Sheet1,Sheet2,Sheet3 As worksheet
编辑2:这不是正确切换工作表,更改......
编辑3:
我测试了它。在问题中评论的12月错字仍然存在并仍然提供了一个不稳定的输出,但以下代码成功复制到副本部分。
Private Sub CommandButton1_Click()
Dim i As Long
Dim sh As Object
Dim Yr As Integer
Dim Yr_P As Integer
Dim Qinput As String
Dim Sheet6, Sheet1, Sheet2, Sheet3 As Worksheet
'get new year
Qinput = InputBox(Prompt:="Enter the year you want to create data for")
If Qinput = vbNullString Then
Exit Sub
Else
End If
'identify year
Yr = Right(Left(Qinput, 4), 2)
Yr_P = Yr - 1
'change new on tabnames
Worksheets("Sheet6").Name = "FY" & Yr & "GM Forecast (AMSG) Total"
Worksheets("Sheet1").Name = "FY" & Yr & "GM Forecast(US)"
Worksheets("Sheet2").Name = "FY" & Yr & "GM Forecast(MCU)"
Worksheets("Sheet3").Name = "FY" & Yr & "GM Forecast (PDSN)"
'update headers
ActiveWorkbook.Sheets("FY" & Yr & "GM Forecast (AMSG) Total").Activate
Cells(1, 6) = "FY" & Yr_P
Cells(1, 15) = "FY" & Yr
Cells(1, 24) = "FY" & Yr
Cells(1, 33) = "FY" & Yr
Cells(1, 42) = "FY" & Yr
Cells(2, 3) = "FY" & Yr_P & "Q4"
Cells(2, 12) = "FY" & Yr & "Q1"
Cells(2, 21) = "FY" & Yr & "Q2"
Cells(2, 30) = "FY" & Yr & "Q3"
Cells(2, 39) = "FY" & Yr & "Q4"
Cells(2, 48) = "FY" & Yr & "(to date)"
Cells(2, 49) = "FY" & Yr & "FCST"
Cells(2, 51) = "Normalized FY" & Yr & "FCST"
Cells(3, 3) = "Jul," & Yr_P
Cells(3, 4) = "Aug," & Yr_P
Cells(3, 5) = "Sep," & Yr
Cells(3, 12) = "Oct," & Yr
Cells(3, 13) = "Nov," & Yr
Cells(3, 14) = "Dec,) & Yr"
Cells(3, 21) = "Jan," & Yr
Cells(3, 22) = "Feb," & Yr
Cells(3, 23) = "Mar," & Yr
Cells(3, 30) = "Apr," & Yr
Cells(3, 31) = "May," & Yr
Cells(3, 32) = "Jun," & Yr
Cells(3, 39) = "Jul," & Yr
Cells(3, 40) = "Aug," & Yr
Cells(3, 41) = "Sep," & Yr
ActiveWorkbook.Sheets("FY" & Yr & "GM Forecast(US)").Activate
Cells(1, 6) = "FY" & Yr_P
Cells(1, 15) = "FY" & Yr
Cells(1, 24) = "FY" & Yr
Cells(1, 33) = "FY" & Yr
Cells(1, 42) = "FY" & Yr
Cells(2, 3) = "FY" & Yr_P & "Q4"
Cells(2, 12) = "FY" & Yr & "Q1"
Cells(2, 21) = "FY" & Yr & "Q2"
Cells(2, 30) = "FY" & Yr & "Q3"
Cells(2, 39) = "FY" & Yr & "Q4"
Cells(2, 48) = "FY" & Yr & "(to date)"
Cells(2, 49) = "FY" & Yr & "FCST"
Cells(2, 51) = "Normalized FY" & Yr & "FCST"
Cells(3, 3) = "Jul," & Yr_P
Cells(3, 4) = "Aug," & Yr_P
Cells(3, 5) = "Sep," & Yr
Cells(3, 12) = "Oct," & Yr
Cells(3, 13) = "Nov," & Yr
Cells(3, 14) = "Dec,) & Yr"
Cells(3, 21) = "Jan," & Yr
Cells(3, 22) = "Feb," & Yr
Cells(3, 23) = "Mar," & Yr
Cells(3, 30) = "Apr," & Yr
Cells(3, 31) = "May," & Yr
Cells(3, 32) = "Jun," & Yr
Cells(3, 39) = "Jul," & Yr
Cells(3, 40) = "Aug," & Yr
Cells(3, 41) = "Sep," & Yr
'copy all Q4 data from columns AM-AO and paste into C-E the delete/clear the old data
Sheet1.Cells("AM4:AO13").Value = Sheet1.Cells("C4:E13").Value
Sheet1.Cells("AM4:AO13").ClearContents
Sheet1.Cells("AM18:AO32").Value = Sheet1("C18:E32").Value
Sheet1.Cells("AM18:AO32").ClearContents
Sheet1.Cells("AM44:AO47").Value = Sheet1.Cells("C44:E47").Value
Sheet1.Cells("AM44:AO47").ClearContents
Sheet1.Cells("AS50").Copy Destination:=Sheet1.Cells("H50")
Sheet1.Cells("AS50,Q50,Z50,AI50,AX50").ClearContents
End Sub
答案 2 :(得分:0)
有几种方法可以引用工作表对象:
通过传递其索引 - 即表示工作表标签中的工作表顺序的数字 - 或名称到工作表方法
worksheets(index)
worksheets("Name")
按其代号
codeName
确保不要混淆