Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Excel 2010 VBA-循环If Then语句_Vba_Excel - Fatal编程技术网

Excel 2010 VBA-循环If Then语句

Excel 2010 VBA-循环If Then语句,vba,excel,Vba,Excel,不熟悉VBA,但努力学习。我最近为一位工作中的女性写了一个宏。不幸的是,她不太懂电脑,也不想在列表中找到宏,所以我想我应该使用命令按钮用户表单,调整代码,让她在单元格中循环,而不是让她从一个活动单元格转到另一个活动单元格。遗憾的是,我在For-each循环中遇到了If-Then-Else的问题 这是原始的非循环编码宏 Sub InvoicesTotalDue() Dim myRange As Range Set myRange = Application.InputBox(Prompt:="

不熟悉VBA,但努力学习。我最近为一位工作中的女性写了一个宏。不幸的是,她不太懂电脑,也不想在列表中找到宏,所以我想我应该使用命令按钮用户表单,调整代码,让她在单元格中循环,而不是让她从一个活动单元格转到另一个活动单元格。遗憾的是,我在For-each循环中遇到了If-Then-Else的问题

这是原始的非循环编码宏

Sub InvoicesTotalDue()

Dim myRange As Range 
Set myRange = Application.InputBox(Prompt:="Select an Invoice Type Then Hit Enter", Type:=8)
'person is on active cell and selects cell in Type column of corresponding row of active cell
If myRange.Cells.Value = "Cancel300" Then
     ActiveCell.Value = 300
ElseIf myRange.Cells.Value = "Cancel350" Then
     ActiveCell.Value = 350
Else 
     ActiveCell.FormulaR1C1 = "=Product(100,[@Hours])"
End If
End Sub
这是工作,但用户发现它乏味,她不习惯使用宏。因此,我认为一个userform命令按钮在整个范围内循环并在最后一列中填充相应的值对她来说是最好的。我觉得应该是这样的

Sub InvoicesTotalDue()

Dim myRange As Range 
Set myRange = Application.Range("Invoices[Type]")

For each cCell in myRange
If myRange.Cells.Value = "Cancel300" Then
     [TotalDue].Cell.Value = 300
ElseIf myRange.Cells.Value = "Cancel350" Then
     [TotalDue].Cell.Value= 350
Else 
     [TotalDue].Cell.FormulaR1C1 = "=Product(100,[@Hours])"
End If
Next cCell
End Sub
应根据发票类型计算应付总额。取消是设定值,任何不是取消的都是100和工作小时数的乘积

有人能发现我的问题或提出任何建议/解决方案吗

谢谢

试试看:

For Each cCell in myRange.Cells
If cCell.Value = ...

未经测试,但希望尽快将其丢弃。

看起来您正在使用表,这很好。然而,我不认为你需要VBA来解决这个问题。在“TotalDue”列中,在一个单元格的公式栏中输入以下公式:

=IF([@Type]="Cancel300",300,IF([@Type]="Cancel350",350,100*[@Hours]))
它会自动填充整个列。虽然我很喜欢VBA,但有时公式是更好的答案

但是,我正在运行您的代码,您的问题孩子是这一行: myRange.Cells.Value

If myRange.Cells.Value = "Cancel300" Then
那是一个不好的参考。将其更改为:

If cCell.Value = "Cancel300" Then

我拥有的另一个有用的调试工具是添加MyNewlyDefinedRange。在vba行之后选择,这样我就知道它实际上在我想告诉它的范围内工作。

这看起来确实是可能的问题。