2017-01-02 123 views
0

当谈到VBA时,我非常习惯于初学者,我无法弄清楚如何更新我的宏。VBA宏从一张纸复制数据并粘贴到另一张(在某些条件下)

通常从几片(所述特定的一个被称为SS)并将其粘贴到另一个(MainSheet)它复制数据:

Dim lastrow As Long 

(...)

Lastrowss = Sheets (“SS”).Range(“A1”).End(xlDown).Row 

(。 ..)

For i = 2 To lastrows 

(...)

Sheets("MainSheet").Cells(j, 7).Value = Sheets("SS").Cells(i, 7).Value 'Rec Amount 
Sheets("MainSheet").Cells(j, 9).Value = Sheets("SS").Cells(i, 9).Value * -1 'Paid Amount 

问题在哪里呢? 该宏仅适用于大约一半的查询。准确地说:为销售购买反映的方式相反。

换句话说 - 宏应该复制第7列和第9列中的数据,并且只有在列D中有“买入”的情况下才将其粘贴到第9列和第7列(不是7和9)。如果有“ “宏应该保持不变。

为了让事情看起来更加丑陋:在D列中,您并不总是只是“卖”或“买”。你也可以看到“卖出来掩盖”等等,但逻辑仍然是一样的。

我将不胜感激任何帮助。 谢谢。

+0

我担心你声明了一个名为'lastrow'的变量,然后为一个名为'Lastrowss'的不同变量赋值,然后为你的循环使用另一个名为'lastrows'的变量。请在每个代码模块的开头添加“Option Explicit”。 – YowE3K

+0

这是我的错字。应该是:对于i = 2对于拉斯特罗斯 – DrBeton

+0

我仍然担心你声明一个名为'lastrow'的变量,然后使用一个名为'lastrowss'的变量。在每个代码模块的开始处添加'Option Explicit',您可以避免这种类型的拼写错误。 – YowE3K

回答

2
If Sheets("SS").Cells(i, 4).Value <> "buy" Then ' <-- add this test 
    Sheets("MainSheet").Cells(j, 7).Value = Sheets("SS").Cells(i, 7).Value 'Rec Amount 
    Sheets("MainSheet").Cells(j, 9).Value = Sheets("SS").Cells(i, 9).Value * -1 'Paid Amount 
Else ' <-- here we inverse the two columns 
    Sheets("MainSheet").Cells(j, 7).Value = Sheets("SS").Cells(i, 9).Value 'Rec Amount 
    Sheets("MainSheet").Cells(j, 9).Value = Sheets("SS").Cells(i, 7).Value * -1 'Paid Amount 

End If 
+0

嗨,谢谢你的帮助。不幸的是它不工作。我得到运行时错误'13'类型不匹配 – DrBeton

0

谢谢大家的帮助。 我已经稍微更新了代码:

If Left(Sheets("SS").Cells(i, 4).Value, 3) <> "Buy" Then 
    Sheets("MainSheet").Cells(j, 7).Value = Sheets("SS").Cells(i, 7).Value 'Rec Amount 
    Sheets("MainSheet").Cells(j, 9).Value = Sheets("SS").Cells(i, 9).Value * -1 'Paid Amount 
Else 
    Sheets("MainSheet").Cells(j, 7).Value = Sheets("SS").Cells(i, 9).Value 'Rec Amount 
    Sheets("MainSheet").Cells(j, 9).Value = Sheets("SS").Cells(i, 7).Value * -1 'Paid Amount 

End If 

似乎现在就工作。

+2

因为你的答案很大程度上依赖于@ A.S.H的回答,也许接受他的答案对他的努力是公平的。 –

+0

出于好奇,当A.S.H的代码执行时,为什么你的代码不会给出“类型不匹配”? (所有我能想到的是你的一些“金额”实际上不是金额。) – YowE3K

+0

完成@Scott Holtzman。我对这个论坛的规则不是很熟悉。 – DrBeton

相关问题