所以,虽然我已经在这里阅读了一些关于类似错误的问题,但到目前为止我还没有找到一个帮助我理解我的问题的问题。如果他们是一个类似的问题并且有适当的答案,请链接它,我将删除这个。
现在,我正在使用一个小的子Refresh_Activesheet()
来查看WorkSheets的名称,并根据该名称运行相应的子。大多数潜艇与Refresh_Activesheet()
位于同一模块中。然而,目前有两个在他们的单独模块中。现在的问题是,当我运行Refresh_Activesheet
时,vba返回的参数不是可选错误,我无法理解为什么。
Refresh_Activesheet
Sub Refresh_Activesheet()
If IsNumeric(Left(ActiveSheet.Name, 1)) Then
Emissions_Calculation
ElseIf ActiveSheet.Name = "Voyages List" Then
Refresh_Table
ElseIf ActiveSheet.Name = "Émission Total" Then
Call Refresh_Emissions.Emission_Total
ElseIf ActiveSheet.Name = "Consommation Total" Then
Exit Sub
End If
End Sub
Refresh_Emissions
这是包含Emission_Total
Option Explicit
Option Base 1
Public j, i, k, n, m, p, l, info, mation, Total As Variant
Public AverageEmission, TotalEmission As String
Sub Emission_Total(ByVal ws As Worksheet)
Application.ScreenUpdating = False
On Error Resume Next
Dim SoxRevenue, SoxGross, MilesTotal, MilesLaden, CargoMT As Double
ThisWorkbook.Sheets("Émission total").Range("A7 : M200").Clear
j = 7
k = 1
For Each ws In ActiveWorkbook.Sheets
If IsNumeric(Left(ws.Name, 1)) Then
ws.Unprotect ("12345")
ThisWorkbook.Sheets("Émission Total").Range("A" & j).Value = ws.Range("C5").Value
ThisWorkbook.Sheets("Émission Total").Range("B" & j).Value = ws.Range("T2").Value
ThisWorkbook.Sheets("Émission Total").Range("C" & j).Value = ws.Range("T3").Value
ThisWorkbook.Sheets("Émission Total").Range("D" & j).Value = ws.Range("G2").Value
ThisWorkbook.Sheets("Émission Total").Range("E" & j).Value = ws.Range("J2").Value
info = ThisWorkbook.Sheets("Émission total").Range("F7 : M200").Address
mation = ws.Range("D6:D8").Address
SoxRevenue = WorksheetFunction.Sum(ws.Range("V28:V30").Value)
SoxGross = ws.Range("V43").Value
MilesLaden = ws.Range("M4").Value
MilesTotal = ws.Range("M6").Value
CargoMT = ws.Range("O5").Value
With ThisWorkbook.Sheets("Émission total").Range(info)
If (ws.Range(mation).Cells(1, 1).Value) = "" Then
.Cells(k, 1).Value = ws.Range("W49").Value
.Cells(k, 2).Value = ws.Range("W50").Value
.Cells(k, 3).Value = ws.Range("W54").Value
.Cells(k, 4).Value = ws.Range("W56").Value
.Cells(k, 5).Value = ws.Range("V43").Value
.Cells(k, 6).Value = SoxRevenue
.Cells(k, 7).Value = SoxGross * 1.852 * 1000 * 1000 / (CargoMT * MilesTotal)
.Cells(k, 8).Value = SoxRevenue * 1.852 * 1000 * 1000 / (CargoMT * MilesLaden)
.Cells(k, 1).NumberFormat = "?0.00"
.Cells(k, 2).NumberFormat = "?0.00"
.Cells(k, 3).NumberFormat = "?0.00"
.Cells(k, 4).NumberFormat = "?0.00"
.Cells(k, 5).NumberFormat = "?0.0000"
.Cells(k, 6).NumberFormat = "?0.0000"
.Cells(k, 7).NumberFormat = "?0.0000"
.Cells(k, 8).NumberFormat = "?0.0000"
ElseIf (ws.Range(mation).Cells(1, 1).Value) = 0 Then
.Cells(k, 1).Value = ws.Range("W49").Value
.Cells(k, 2).Value = ws.Range("W50").Value
.Cells(k, 3).Value = 0
.Cells(k, 4).Value = 0
.Cells(k, 5).Value = ws.Range("V43").Value
.Cells(k, 6).Value = ws.Range("V43").Value
.Cells(k, 7).Value = 0
.Cells(k, 8).Value = 0
.Cells(k, 1).NumberFormat = "?0.00"
.Cells(k, 2).NumberFormat = "?0.00"
.Cells(k, 3).NumberFormat = "?0.00"
.Cells(k, 4).NumberFormat = "?0.00"
.Cells(k, 5).NumberFormat = "?0.0000"
.Cells(k, 6).NumberFormat = "?0.0000"
.Cells(k, 7).NumberFormat = "?0.0000"
.Cells(k, 8).NumberFormat = "?0.0000"
ElseIf (ws.Range(mation).Cells(2, 1).Value) = 0 And (ws.Range(mation).Cells(3, 1).Value) = 0 Then
.Cells(k, 1).Value = ws.Range("W49").Value
.Cells(k, 2).Value = ws.Range("W50").Value
.Cells(k, 3).Value = (ws.Range("W49").Value) / ((ws.Range(mation).Cells(1, 1).Value) * ((ws.Range(mation).Cells(2, 1).Value) + (ws.Range(mation).Cells(3, 1).Value))) * 1000 * 1000 / 1.853
.Cells(k, 4).Value = 0
.Cells(k, 5).Value = ws.Range("V43").Value
.Cells(k, 6).Value = ws.Range("V43").Value
.Cells(k, 7).Value = (ws.Range("V43").Value) / ((ws.Range(mation).Cells(1, 1).Value) * ((ws.Range(mation).Cells(2, 1).Value) + (ws.Range(mation).Cells(3, 1).Value))) * 1000 * 1000 / 1.853
.Cells(k, 8).Value = 0
.Cells(k, 1).NumberFormat = "?0.00"
.Cells(k, 2).NumberFormat = "?0.00"
.Cells(k, 3).NumberFormat = "?0.00"
.Cells(k, 4).NumberFormat = "?0.00"
.Cells(k, 5).NumberFormat = "?0.0000"
.Cells(k, 6).NumberFormat = "?0.0000"
.Cells(k, 7).NumberFormat = "?0.0000"
.Cells(k, 8).NumberFormat = "?0.0000"
ElseIf (ws.Range(mation).Cells(2, 1).Value) = "" And (ws.Range(mation).Cells(3, 1).Value) = "" Then
.Cells(k, 1).Value = ws.Range("W49").Value
.Cells(k, 2).Value = ws.Range("W50").Value
.Cells(k, 3).Value = (ws.Range("W49").Value) / ((ws.Range(mation).Cells(1, 1).Value) * ((ws.Range(mation).Cells(2, 1).Value) + (ws.Range(mation).Cells(3, 1).Value))) * 1000 * 1000 / 1.853
.Cells(k, 4).Value = 0
.Cells(k, 5).Value = ws.Range("V43").Value
.Cells(k, 6).Value = ws.Range("V43").Value
.Cells(k, 7).Value = (ws.Range("V43").Value) / ((ws.Range(mation).Cells(1, 1).Value) * ((ws.Range(mation).Cells(2, 1).Value) + (ws.Range(mation).Cells(3, 1).Value))) * 1000 * 1000 / 1.853
.Cells(k, 8).Value = 0
.Cells(k, 1).NumberFormat = "?0.00"
.Cells(k, 2).NumberFormat = "?0.00"
.Cells(k, 3).NumberFormat = "?0.00"
.Cells(k, 4).NumberFormat = "?0.00"
.Cells(k, 5).NumberFormat = "?0.0000"
.Cells(k, 6).NumberFormat = "?0.0000"
.Cells(k, 7).NumberFormat = "?0.0000"
.Cells(k, 8).NumberFormat = "?0.0000"
Else
.Cells(k, 1).Value = ws.Range("W49").Value
.Cells(k, 2).Value = ws.Range("W50").Value
.Cells(k, 3).Value = (ws.Range("W49").Value) / ((ws.Range(mation).Cells(1, 1).Value) * ((ws.Range(mation).Cells(2, 1).Value) + (ws.Range(mation).Cells(3, 1).Value))) * 1000 * 1000 / 1.853
.Cells(k, 4).Value = (ws.Range("W50").Value) / ((ws.Range(mation).Cells(1, 1).Value) * ((ws.Range(mation).Cells(2, 1).Value))) * 1000 * 1000 / 1.853
.Cells(k, 5).Value = ws.Range("V43").Value
.Cells(k, 6).Value = ws.Range("V43").Value
.Cells(k, 7).Value = (ws.Range("V43").Value) / ((ws.Range(mation).Cells(1, 1).Value) * ((ws.Range(mation).Cells(2, 1).Value) + (ws.Range(mation).Cells(3, 1).Value))) * 1000 * 1000 / 1.853
.Cells(k, 8).Value = (ws.Range("V43").Value) / ((ws.Range(mation).Cells(1, 1).Value) * ((ws.Range(mation).Cells(2, 1).Value))) * 1000 * 1000 / 1.853
.Cells(k, 1).NumberFormat = "?0.00"
.Cells(k, 2).NumberFormat = "?0.00"
.Cells(k, 3).NumberFormat = "?0.00"
.Cells(k, 4).NumberFormat = "?0.00"
.Cells(k, 5).NumberFormat = "?0.0000"
.Cells(k, 6).NumberFormat = "?0.0000"
.Cells(k, 7).NumberFormat = "?0.0000"
.Cells(k, 8).NumberFormat = "?0.0000"
End If
End With
k = k + 1
j = j + 1
ws.Protect ("12345")
ElseIf ws.Name = "Émission total" Then
ws.Unprotect ("12345")
End If
Next ws
k = k + 7
p = k - 1
ThisWorkbook.Sheets("Émission total").Range("D" & k).Value = "AverageEmission"
ThisWorkbook.Sheets("Émission total").Range("F" & k).Value = Application.Average(ThisWorkbook.Sheets("Émission total").Range("F7 : F" & p))
ThisWorkbook.Sheets("Émission total").Range("G" & k).Value = Application.Average(ThisWorkbook.Sheets("Émission total").Range("G7 : G" & p))
ThisWorkbook.Sheets("Émission total").Range("H" & k).Value = Application.Average(ThisWorkbook.Sheets("Émission total").Range("H7 : H" & p))
ThisWorkbook.Sheets("Émission total").Range("I" & k).Value = Application.Average(ThisWorkbook.Sheets("Émission total").Range("I7 : I" & p))
ThisWorkbook.Sheets("Émission total").Range("J" & k).Value = Application.Average(ThisWorkbook.Sheets("Émission total").Range("J7 : J" & p))
ThisWorkbook.Sheets("Émission total").Range("K" & k).Value = Application.Average(ThisWorkbook.Sheets("Émission total").Range("K7 : K" & p))
ThisWorkbook.Sheets("Émission total").Range("L" & k).Value = Application.Average(ThisWorkbook.Sheets("Émission total").Range("L7 : L" & p))
ThisWorkbook.Sheets("Émission total").Range("M" & k).Value = Application.Average(ThisWorkbook.Sheets("Émission total").Range("M7 : M" & p))
ThisWorkbook.Sheets("Émission total").Range("F" & k).NumberFormat = "?0.00"
ThisWorkbook.Sheets("Émission total").Range("G" & k).NumberFormat = "?0.00"
ThisWorkbook.Sheets("Émission total").Range("H" & k).NumberFormat = "?0.00"
ThisWorkbook.Sheets("Émission total").Range("I" & k).NumberFormat = "?0.00"
ThisWorkbook.Sheets("Émission total").Range("J" & k).NumberFormat = "?0.0000"
ThisWorkbook.Sheets("Émission total").Range("K" & k).NumberFormat = "?0.0000"
ThisWorkbook.Sheets("Émission total").Range("L" & k).NumberFormat = "?0.0000"
ThisWorkbook.Sheets("Émission total").Range("M" & k).NumberFormat = "?0.0000"
l = k + 2
ThisWorkbook.Sheets("Émission total").Range("D" & l).Value = "TotalEmission"
ThisWorkbook.Sheets("Émission total").Range("F" & l).Value = Application.Sum(ThisWorkbook.Sheets("Émission total").Range("F7 : F" & p))
ThisWorkbook.Sheets("Émission total").Range("G" & l).Value = Application.Sum(ThisWorkbook.Sheets("Émission total").Range("G7 : G" & p))
ThisWorkbook.Sheets("Émission total").Range("H" & l).Value = Application.Sum(ThisWorkbook.Sheets("Émission total").Range("H7 : H" & p))
ThisWorkbook.Sheets("Émission total").Range("I" & l).Value = Application.Sum(ThisWorkbook.Sheets("Émission total").Range("I7 : I" & p))
ThisWorkbook.Sheets("Émission total").Range("J" & l).Value = Application.Sum(ThisWorkbook.Sheets("Émission total").Range("J7 : J" & p))
ThisWorkbook.Sheets("Émission total").Range("K" & l).Value = Application.Sum(ThisWorkbook.Sheets("Émission total").Range("K7 : K" & p))
ThisWorkbook.Sheets("Émission total").Range("L" & l).Value = Application.Sum(ThisWorkbook.Sheets("Émission total").Range("L7 : L" & p))
ThisWorkbook.Sheets("Émission total").Range("M" & l).Value = Application.Sum(ThisWorkbook.Sheets("Émission total").Range("M7 : M" & p))
ThisWorkbook.Sheets("Émission total").Range("F" & l).NumberFormat = "?0.00"
ThisWorkbook.Sheets("Émission total").Range("G" & l).NumberFormat = "?0.00"
ThisWorkbook.Sheets("Émission total").Range("H" & l).NumberFormat = "?0.00"
ThisWorkbook.Sheets("Émission total").Range("I" & l).NumberFormat = "?0.00"
ThisWorkbook.Sheets("Émission total").Range("J" & l).NumberFormat = "?0.0000"
ThisWorkbook.Sheets("Émission total").Range("K" & l).NumberFormat = "?0.0000"
ThisWorkbook.Sheets("Émission total").Range("L" & l).NumberFormat = "?0.0000"
ThisWorkbook.Sheets("Émission total").Range("M" & l).NumberFormat = "?0.0000"
ThisWorkbook.Sheets("Émission Total").Protect ("12345")
ThisWorkbook.Protect ("12345")
Application.ScreenUpdating = True
End Sub
答案 0 :(得分:1)
问题在于这一行:
Call Refresh_Emissions.Emission_Total
在该行中,您不提供参数。但Emission_Total
子例程要求将工作表对象作为参数提供,如声明所示:
Sub Emission_Total(ByVal ws As Worksheet)
看起来您正在根据工作表名称调用不同的子例程,所以我猜您只是想发送与调用匹配的工作表,在这种情况下:
Sub Refresh_Activesheet()
If IsNumeric(Left(ActiveSheet.Name, 1)) Then
Emissions_Calculation
ElseIf ActiveSheet.Name = "Voyages List" Then
Refresh_Table
ElseIf ActiveSheet.Name = "Émission Total" Then
Call Refresh_Emissions.Emission_Total(ActiveSheet) 'Note I added the worksheet as an argument here
ElseIf ActiveSheet.Name = "Consommation Total" Then
Exit Sub
End If
End Sub
编辑:再看一下您发布的代码,看起来您实际上从未在Emission_Total
子例程中使用传递的工作表变量。在这种情况下,您可以从声明中删除ws变量要求:
Sub Emission_Total()
然后保留您最初发布的Refresh_Activesheet
代码。