我在excel vba中的代码有点麻烦。我的目标是将以下if语句转换为VBA宏。
if语句:
'=IF(R8="W",
'IF(L8>0,L8,
'IF(ABS(L8)<ABS(V7),L8,
'IF(N8+L8<0,L8+Z7,-V7))),
'IF(R8="A",
'IF(L8>0,(V7/(V7+Z7)*L8),
'IF(ABS(V7/(V7+Z7)*L8)>V7,-V7,(V7/(V7+Z7)*L8))),
'Added H not tested it yet
'IF(AND(R9="H",-L9>Z8),Z8+L9,0)
'IF(R8="C",
'IF(L8>0,L8/2,
'IF(AND((-L8/2)<V7,(-L8/2<Z7)),L8/2,
'IF(AND(V7<=0,Z7<=0),L8/2,
'IF(Z7+L8>0,-V7,-V7+(L8+Z7+V7)/2)))),0)))
我想要做的是,如果列R中有W,我希望它检查列L中的数量是否大于零,如果为真,则返回列L中的数量。如果错误检查是否列L中的金额的绝对值小于列V中金额的绝对值。如果为真,则返回列L中的金额,否则将列N和列L中的金额相加。如果总和小于零则返回列L和Z中的金额总和。如果为假,则返回列v中的金额(使其为负数)。
我试图解决它。
Private Sub looping()
Dim rw_cnt As Integer
Application.ScreenUpdating = False
Application.Calculation = xlCalculationManual
rw_cnt = 8
Do While Sheets("Personal").Range("R" & rw_cnt).Value <> ""
If Sheets("Personal").Range("R" & rw_cnt).Value = "W" Then
'I am having difficulties on this section.
Sheets("Personal").Range("V" & rw_cnt).Select
If "=RC[-8]" > 0 Then
ActiveCell.FormulaR1C1 = "=RC[-8]"
ElseIf Abs("=RC[-8]") < Abs("=R[-1]C[2") Then
ActiveCell.FormulaR1C1 = "=RC[-8]"
ElseIf ("=RC[-6]" + "=RC[-8]") < 0 Then
ActiveCell.FormulaR1C1 = "=RC[-8]" + "=R[-1]C[6"
Else
ActiveCell.FormulaR1C1 = "=-R[-1]C[7"
End If
Sheets("Personal").Range("Z" & rw_cnt).Select
ActiveCell.FormulaR1C1 = "=0"
End If
rw_cnt = rw_cnt + 1
Loop
MsgBox ("Done!!!")
Application.ScreenUpdating = True
Application.Calculation = xlCalculationAutomatic
End Sub
提前致谢!!
答案 0 :(得分:0)
如果我理解你正在尝试做什么,那就是你的Use dbi353348
GO
Create TRIGGER trChangeAbusiveWord
ON Post
AFTER INSERT
AS
DECLARE @Posttekst varchar(300);
DECLARE @AccountID int;
DECLARE @PostID int;
SELECT @Posttekst=i.Post FROM inserted i;
SELECT @AccountID=i.Account_ID FROM inserted i;
SELECT @PostID=i.Post_ID FROM inserted i;
BEGIN
UPDATE AbusiveWords
SET @Posttekst=REPLACE(@Posttekst,Word,REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(Word,'A','#'),'E','%'),'I','$'),'O','*'),'U','@'))
UPDATE Post
SET Post = @Posttekst
WHERE Post_ID = @PostID
END
单元格,看看它是否大于0,小于一个单元格的绝对值。向下2行,或者如果两个偏移单元小于0 ......
这是如何运作的?
...Range("V" & rw_cnt)
基本上,在你有公式的地方,VBA只是把它解释为一个字符串。用偏移量替换R1C1引用,然后它应该适合您。如果上面没有做任何事情,或者是不正确的,请告诉我......但看看你是否能理解我正在尝试的事情,因为我认为这是你主要问题的关键。
编辑:而不是'I am having difficulties on this section.
Dim myCel As Range
Set myCel = Sheets("Personal").Range("V" & rw_cnt)
With myCel
If .Offset(0, -8).Value > 0 Then
.FormulaR1C1 = "=RC[-8]"
ElseIf Abs(.Offset(0, -8).Value) < Abs(.Offset(-1, 2).Value) Then
.FormulaR1C1 = "=RC[-8]"
ElseIf (.Offset(0, -6).Value + .Offset(0, -8).Value) < 0 Then
.FormulaR1C1 = "=RC[-8]+R[-1]C[6]"
Else
.FormulaR1C1 = "=-R[-1]C[7]"
End If
End with
,请使用ActiveCell
。
EDIT2: 编辑:这是代码的“更严格”版本:
myCell