2016-11-16 148 views
0

我在Excel中添加了一个简单的宏,但它似乎使我的Excel崩溃了很多。有谁知道为什么?添加宏后Excel崩溃

这里的宏:

Sub PlanRelativityTesting() 
With Sheets("Sheet1") 
For i = 8 To 9 
.Range("D11").value = .Range("G" & i).value   
Call AnotherMacro 
Sheets("Sheet2").Select  
     .Range("H" & i).value = Sheets("Sheet2").Range("AE20").value 
     .Range("I" & i).value = Sheets("Sheet2").Range("AE21").value 
     .Range("J" & i).value = Sheets("Sheet2").Range("AE22").value 
     .Range("K" & i).value = Sheets("Sheet2").Range("AE23").value 
     .Range("L" & i).value = Sheets("Sheet2").Range("AE24").value 
     .Range("M" & i).value = Sheets("Sheet2").Range("AE25").value 
     .Range("N" & i).value = Sheets("Sheet2").Range("AE26").value 
     .Range("O" & i).value = Sheets("Sheet2").Range("AE27").value 
     .Range("P" & i).value = Sheets("Sheet2").Range("AE28").value 
     .Range("Q" & i).value = Sheets("Sheet2").Range("AE29").value 
     .Range("R" & i).value = Sheets("Sheet2").Range("AE30").value 
     .Range("S" & i).value = Sheets("Sheet2").Range("AE31").value 
Next i  
.Select 
End With 
End Sub 
+2

为什么不你只需将一个范围的转置分配给另一个范围?另外,由于你的代码引用了一些神秘的AnotherMacro,所以谁能说出问题所在?你显示的代码是没有问题的(虽然不必要的冗长)。 –

+0

你是否也检查过被调用函数?根据您的工作表的大小和excel的版本(x64或x86),您可能会针对2 GB RAM限制运行。你也可以考虑为单元使用一个相对地址,所以你不必输入太多的代码,即范围(单元格(1,1),单元格(5,3))是A1:C5,并允许循环遍历行和列。如果这是你正在尝试做的事,转置是一个更简单的解决方案。 – Zediiiii

+0

嗨Zediiiii,谢谢你的评论!它运行在32位Excel上,它是39 KB。所以尺寸可能不是问题?你能想到另一个原因吗? – JBB

回答

1

正如约翰指出你的代码可以更简洁:

Sub PlanRelativityTesting() 
    With Sheets("Sheet1") 
     For i = 8 To 9 
      .Range("D11").Value = .Range("G" & i).Value 
      AnotherMacro 
      .Range("H" & i).Resize(1, 12).Value = _ 
      Application.Transpose(Sheets("Sheet2").Range("AE20").Resize(12, 1).Value) 
     Next i 
     .Select 
    End With 
End Sub 

的实际问题,但更可能是在AnotherMacro

+0

谢谢你的帮助! AnotherMacro应该没问题;它现在已经在Excel模型中很长一段时间了。当我在原始模型中运行宏时,它似乎工作得更好。但是,一旦我用宏保存了另一个模型副本,它很容易崩溃。该文件是39,000 KB,也许这是为什么? – JBB

+0

不可能说这是否是原因,但是39MB非常大。 –