2017-02-09 37 views
0

这是我在这里的第一篇文章,我花了一些时间搜索并用脑袋敲打我的头靠在墙上看着,但我仍在学习VBA,可能会错过一些东西。 我试图从我输入它们的列中移动值的分组,到我以前的输入历史记录的表中,以便我可以计算平均值。 我使用IF条件来检测输入字段中的值,但由于某种原因,它跳到了IF循环的末尾,并给出了ELSE结果。 有没有什么我可能做错了脱颖而出?vba无法识别单元格中的值

在此先感谢

Sub MoveValuesToPrior() 
' 
' MoveValuesToPrior Macro 
' 
Application.ScreenUpdating = False 

If WorksheetFunction.Sum(Sheets(2).Range("D3:D1000")) > 0 Then 

Sheets(1).Range("C2:C11").Copy 
Sheets(1).Range("B2").PasteSpecial Paste:=xlPasteValues 

Sheets(2).Range("D3:D1000").Copy 
Sheets(2).Range("C3").PasteSpecial Paste:=xlPasteValues 
Sheets(2).Range("D3:D1000").ClearContents 
Sheets(2).Range("L3:L1000").Copy 
Sheets(2).Range("K3").PasteSpecial Paste:=xlPasteValues 
Sheets(2).Range("L3:L1000").ClearContents 

Sheets(3).Range("D3:D1000").Copy 
Sheets(3).Range("C3").PasteSpecial Paste:=xlPasteValues 
Sheets(3).Range("D3:D1000").ClearContents 
Sheets(3).Range("L3:L1000").Copy 
Sheets(3).Range("K3").PasteSpecial Paste:=xlPasteValues 
Sheets(3).Range("L3:L1000").ClearContents 

Sheets(4).Range("D3:D1000").Copy 
Sheets(4).Range("C3").PasteSpecial Paste:=xlPasteValues 
Sheets(4).Range("D3:D1000").ClearContents 
Sheets(4).Range("L3:L1000").Copy 
Sheets(4).Range("K3").PasteSpecial Paste:=xlPasteValues 
Sheets(4).Range("L3:L1000").ClearContents 

Sheets(5).Range("D3:D1000").Copy 
Sheets(5).Range("C3").PasteSpecial Paste:=xlPasteValues 
Sheets(5).Range("D3:D1000").ClearContents 
Sheets(5).Range("L3:L1000").Copy 
Sheets(5).Range("K3").PasteSpecial Paste:=xlPasteValues 
Sheets(5).Range("L3:L1000").ClearContents 

Sheets(6).Range("D3:D1000").Copy 
Sheets(6).Range("C3").PasteSpecial Paste:=xlPasteValues 
Sheets(6).Range("D3:D1000").ClearContents 
Sheets(6).Range("L3:L1000").Copy 
Sheets(6).Range("K3").PasteSpecial Paste:=xlPasteValues 
Sheets(6).Range("L3:L1000").ClearContents 

Sheets(7).Range("D3:D1000").Copy 
Sheets(7).Range("C3").PasteSpecial Paste:=xlPasteValues 
Sheets(7).Range("D3:D1000").ClearContents 
Sheets(7).Range("L3:L1000").Copy 
Sheets(7).Range("K3").PasteSpecial Paste:=xlPasteValues 
Sheets(7).Range("L3:L1000").ClearContents 

Sheets(8).Range("D3:D1000").Copy 
Sheets(8).Range("C3").PasteSpecial Paste:=xlPasteValues 
Sheets(8).Range("D3:D1000").ClearContents 
Sheets(8).Range("L3:L1000").Copy 
Sheets(8).Range("K3").PasteSpecial Paste:=xlPasteValues 
Sheets(8).Range("L3:L1000").ClearContents 

Sheets(9).Range("D3:D1000").Copy 
Sheets(9).Range("C3").PasteSpecial Paste:=xlPasteValues 
Sheets(9).Range("D3:D1000").ClearContents 
Sheets(9).Range("L3:L1000").Copy 
Sheets(9).Range("K3").PasteSpecial Paste:=xlPasteValues 
Sheets(9).Range("L3:L1000").ClearContents 

Sheets(1).Activate 

Application.CutCopyMode = False 


Else: MsgBox ("The current data has already been moved to prior.") 

End If 


Application.ScreenUpdating = True 

End Sub 
+1

什么是从'MSGBOX WorksheetFunction.Sum(表(2).Range(“D3的结果: D1000" ))'? – Slai

+1

你调试过这个表达式吗?WorksheetFunction.Sum(Sheets(2).Range(“D3:D1000”))'?我的意思是你期望什么结果,什么结果显示调试器? – Alex

+1

即使是您认为它的表单,“表单(2)”也是如此吗?在你的If语句之前包含一个'MsgBox Sheets(2).Name',并确保它返回你期望的表名。 – YowE3K

回答

0

循环和子程序使你的代码更易于管理:

Sub MoveValuesToPrior() 

    Dim x As Long 

    Application.ScreenUpdating = False 

    If WorksheetFunction.Sum(Sheets(2).Range("D3:D1000")) > 0 Then 

     'False as last argument -> don't clear source range 
     CopyValues Sheets(1).Range("C2:C11"), Sheets(1).Range("B2"), False 

     For x = 2 To 9 
      CopyValues Sheets(x).Range("D3:D1000"), Sheets(x).Range("C3") 
      CopyValues Sheets(x).Range("L3:L1000"), Sheets(x).Range("K3") 
     Next x 
    Else 
     MsgBox ("The current data has already been moved to prior.") 
    End If 

    Sheets(1).Activate 
    Application.ScreenUpdating = True 

End Sub 

Sub CopyValues(rngFrom As Range, rngTo As Range, Optional clearSource As Boolean = True) 
    With rngFrom 
     rngTo.Resize(.Rows.Count, .Columns.Count).Value = .Value 
     If clearSource Then .ClearContents 
    End With 
End Sub 
+0

看起来我今天早上有几件事要尝试,谢谢你的提示! – DryhoppedIPA