2017-08-01 21 views
0

我正在尝试根据用户输入计算表中产品的最便宜替代方案。 代码应该为 a)取一个输入数字,产品尺寸(从用户界面表单中的K19开始),并将其与表格中的正确行相匹配,以便找到此尺寸的不同选择。 b)将特定成本与大小相乘,以便得到每个备选方案的总成本(因此变量Mx,Nx等是每个备选方案的具体成本)。 c)将总成本存储在一个数组中,并找到这些数字中最小的数字,这些数字在用户界面中以C45的形式返回给用户。计算单元格并存储在数组中以查找最小值; “min”功能给出问题

所描述的代码示例:

Sub Calculate() 

Dim var As Variant 
Dim rownumber As Integer 
Dim Mx As Variant 
Dim Nx As Variant 
Dim Ox As Variant 
Dim Px As Variant 
Dim Qx As Variant 
Dim Rx As Variant 
Dim low As Variant 
Dim cat As Variant 

var = Range(WorksheetFunction.Match(Sheets("User Interface").Range("K19"), Sheets("C-type").Range("L1:L10000"), 0)).Value 

rownumber = var.Row 

Mx = var * Range("M" & rownumber).Value 
Nx = var * Range("N" & rownumber).Value 
Ox = var * Range("O" & rownumber).Value 
Px = var * Range("P" & rownumber).Value 
Qx = var * Range("Q" & rownumber).Value 
Rx = var * Range("R" & rownumber).Value 

cat = Array("Mx", "Nx", "Ox", "Px", "Qx", "Rx") 

low = Min(cat).Value 

Sheets("User Interface").Range("C45").Value = low 

Sheets("User Interface").Range("c45").Activate 
Application.Goto ActiveCell.EntireRow, True 

End Sub 

的问题是,VBA给人以low = Min(cat).Value即使从我发现我想我使用正确的语法(“子或函数未定义”)的错误。到目前为止,我找不到任何可行的解决方案。任何人都可以帮我解决问题吗?

非常感谢提前!

回答

1
low = Application.WorksheetFunction.Min(cat) 

这段代码应该有所帮助。

+0

谢谢!这有助于照顾到这个错误。 –

2

您是否试图使用WorksheetFunction.Min

MSDN page for Excel built-in MIN function

+0

可能吗?我试图找到数组中的最小数字。尝试“低= WorksheetFunction.Min(猫)。值”在.min部分给出错误“无效限定符”。任何关于语法的建议(该函数的微软帮助页面不太清楚)?c编辑:发现它,谢谢! –

2
  1. 在使用Excel函数Min你必须写WorksheetFunction.MinApplication.Min;
  2. 请勿在函数Min上使用.value;
  3. low值将始终为0“引起你的阵列不包含任何值......写,而不是cat = Array(Mx, Nx, Ox, Px, Qx, Rx)
+0

谢谢!这很有帮助。你能否详细说明你的观点3?我是否以错误的方式捕获计算出的值(或者我是否使用错误的语法来计算)?编辑:谢谢!你的观点3不错。 –

+0

您正在使用“”创建一个字符串数组(字符串),而不是您为'Mx','Nx',...变量定义的值的数组。 – Pspl

1

该代码有一些错误。

Sub Calculate() 

Dim var As Variant 
Dim rownumber As Integer 
Dim Mx As Variant 
Dim Nx As Variant 
Dim Ox As Variant 
Dim Px As Variant 
Dim Qx As Variant 
Dim Rx As Variant 
Dim low As Variant 
Dim cat As Variant 

var = Range(WorksheetFunction.Match(Sheets("User Interface").Range("K19"), Sheets("C-type").Range("L1:L10000"), 0)).Value 
'<~~ range error 
rownumber = var.Row 

Mx = var * Range("M" & rownumber).Value 
Nx = var * Range("N" & rownumber).Value 
Ox = var * Range("O" & rownumber).Value 
Px = var * Range("P" & rownumber).Value 
Qx = var * Range("Q" & rownumber).Value 
Rx = var * Range("R" & rownumber).Value 

'cat = Array("Mx", "Nx", "Ox", "Px", "Qx", "Rx") 
cat = Array(Mx, Nx, Ox, Px, Qx, Rx) '<~~ quote is not need 
low = WorksheetFunction.Min(cat) '<~~ use WorksheetFunction 

Sheets("User Interface").Range("C45").Value = low 

Sheets("User Interface").Range("c45").Activate 
Application.Goto ActiveCell.EntireRow, True 

End Sub 
+0

谢谢Dy。李为您评论。 (var)= Range(WorksheetFunction.Match(Sheets(“User Interface”)。Range(“K19”),Sheets(“C-type”)。Range(“L1:L10000”)) ,0))。Value“? (“用户界面”)。范围(“K27”),表格(“C型”)。范围(“L5:L345”),0) )“缩小范围以匹配,但它说var是空的,并给我错误”下标超出范围“...任何援助将不胜感激(我会给答案的c) –

+0

@A。 Doe:范围是这样描述的。range(“a1”)。它是字符串。 –

+0

我得到错误是因为我想从字符串中提取“值”吗? –

相关问题