2017-08-01 80 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

我得到錯誤是因爲我想從字符串中提取「值」嗎? –

相關問題