-1

我一般是编程新手。使用 VBA 我试图遍历范围(“b6:b18”)。通过每次传递,我b3从值中减去,并将日期放入单元格中,并偏移一列,直到值小于b3. 基本上我正在尝试设置自动付款。示例:我有 5 个帐户。250.36、17.23、96.12、600.00、5.46。我的付款是每月 36.12。因此,1/1/13 = 36.12,直到第一个帐户 < 36.12。但每个月必须等于付款。每个帐户可能会在一个月内扣除钱。

我无法弄清楚的代码是:

pmt = b3
for each cell in range("b6:b18")
    if cell.value > pmt then
        activecell.value= cell.value -pmt
        activecell =activecell.offset(0,1)

但是当使用下一个 endif 关闭时,该代码什么也不做,而且我不知道如何按顺序显示日期。

4

2 回答 2

1

我可以告诉您如何修复上述代码以使其“工作”,但您的整体描述令人困惑。

话虽如此,希望它能让你走上正轨

dim pmt as double
dim i as long

pmt = Range("B3").value

for i = 6 to 16
    if Range("B" & i).value > pmt then
        range("B" & i).value = range("B" & i).value - pmt
    end if
next i
于 2012-10-15T05:19:36.823 回答
1

我不清楚您到底要做什么,也不知道您的数据是如何布置的,因此我无法为您提供解决问题所需的代码,但这里有一些提示可能会让您走上正确的道路。

  1. Option Explicit用作Module. _ 这将迫使您对所有变量进行 decalre。
  2. 不要使用ActiveCellSelect除非绝对必要。有关如何避免这些问题的一些提示,请参阅此答案。
  3. 分配对象时,例如设置Range变量,使用Set.

    Dim rng as Range
    Set rng = Range("B3")
    

    不这样做意味着使用默认属性,即

    Dim rng as Range
    rng = Range("B3")
    

    rng.Value = Range("B3").Value  
    

    是等价的

  4. 使用Range不指定 a 的引用Worksheet意味着活动工作表。

    Set rng = Range("B3")
    

    Set rng = ActiveSheet.Range("B3")
    

    是等价的

  5. 诊断您的代码:使用Step Into( F8) 一次运行您的代码,并且
  6. 使用监视窗口查看变量的值(和类型)

如果您提供有关数据布局和预期结果的更多信息,可以获得更多帮助

于 2012-10-15T05:24:57.163 回答