VBA不断给出运行时错误'1004':以下代码片段的应用程序定义或对象定义错误;
Sub deneme()
Dim a As Long
Dim b As Integer
For a = 12 To 13
For b = 2 To 3
Sheets(2).Select
ActiveSheet.Cells(a, 1).Select
Sheets.Add After:=Sheets(Sheets.Count)
ActiveSheet.Name = Worksheets(2).Cells(a, 1).Value & " " & Left(Worksheets(2).Cells(a, 2).Value, 18)
ActiveSheet.Range("A1:D1").Select
Selection.Merge
ActiveCell.Select
ActiveCell.FormulaR1C1 = Worksheets(2).Cells(a, 1).Value
With Selection
.HorizontalAlignment = xlCenter
End With
Sheets(Sheets.Count).Select
ActiveSheet.Range(Cells(b, 1), Cells(b, 2)).Select
Selection.Merge
ActiveCell.Select
ActiveCell.FormulaR1C1 = Worksheets(2).Cells(8, b + 1)
With Selection
.HorizontalAlignment = xlCenter
End With
ActiveSheet.Range(Cells(b, 3), Cells(b, 4)).Select
Selection.Merge
ActiveCell.Select
ActiveCell.FormulaR1C1 = Worksheets(2).Cells(a, b + 1).Value
With Selection
.HorizontalAlignment = xlCenter
End With
Next b
Next a
End Sub
两个不同的变量a和b在分离时正常工作,但是当我将它们写在一起时,vba会产生1004错误。
我使用代码获取不同的值并将它们安排在新的工作表中。这只是之前正常工作的一小部分。
答案 0 :(得分:0)
这一行是问题所在:
ActiveSheet.Name = Worksheets(2).Cells(a, 1).Value & " " & Left(Worksheets(2).Cells(a, 2).Value, 18)
你把它放在里面:
For b = 2 To 3
Next b
由于您没有考虑b的第二个循环,因此您尝试创建一个具有相同名称的工作表,从而导致错误。你需要找到一种方法来解释你用b做两个循环的事实而不是外部循环 - 你需要考虑它。
我想你可能想把所有不涉及b的东西,包括表格添加和名字,移到b循环之前。
有点像,但没有看到你的数据很难:
Option Explicit
Public Sub deneme()
Dim a As Long
Dim b As Integer
For a = 12 To 13
Sheets(2).Select
ActiveSheet.Cells(a, 1).Select
Sheets.Add After:=Sheets(Sheets.Count)
ActiveSheet.Name = Worksheets(2).Cells(a, 1).Value & " " & Left(Worksheets(2).Cells(a, 2).Value, 18)
ActiveSheet.Range("A1:D1").Select
Selection.Merge
ActiveCell.Select
ActiveCell.FormulaR1C1 = Worksheets(2).Cells(a, 1).Value
With Selection
.HorizontalAlignment = xlCenter
End With
For b = 2 To 3
Sheets(Sheets.Count).Select
ActiveSheet.Range(Cells(b, 1), Cells(b, 2)).Select
Selection.Merge
ActiveCell.Select
ActiveCell.FormulaR1C1 = Worksheets(2).Cells(8, b + 1)
With Selection
.HorizontalAlignment = xlCenter
End With
ActiveSheet.Range(Cells(b, 3), Cells(b, 4)).Select
Selection.Merge
ActiveCell.Select
ActiveCell.FormulaR1C1 = Worksheets(2).Cells(a, b + 1).Value
With Selection
.HorizontalAlignment = xlCenter
End With
Next b
Next a
End Sub
主要:在尝试命名工作表之前,您应该为existence of a sheet name添加测试。如果A列中的不同行导致您尝试创建具有相同名称的工作表,会发生什么?
之后,您应该开始考虑使用工作表变量,避免.Select
,使用With
语句和Option Explicit
,查看.FormulaR1C1
可以应用于整个范围而不是循环到当前的ActiveCell并将重复的代码行拉出到函数中。也可以使用键入的函数Left$
而不是Left
。
我发布的代码还取决于您实际想要发生的事情,如果出现相同的工作表名称..您是要创建新名称还是想要使用现有工作表?工作表上的所有填充错误处理和工作表的测试都可以处理。