【发布时间】:2019-10-14 11:27:44
【问题描述】:
我正在尝试为我的同事 VBA 代码找到此代码中的变量不匹配。但是我一直无法找到问题所在。该代码应该根据第三张表中的手动输入更新 2 张不同的表。这是关于安全隐患的。
调试说这行代码搞砸了
Previouscellcontentbefore = ActiveCell.Offset(rowbefore + 1, columbefore + 1)
完整代码:
Dim I As Integer
Dim row As Integer
Dim before As String
Dim after As String
Dim cons As String
Dim conscat As String
Dim checks As String
Dim check2 As String
Dim check3 As String
Dim rowbefore As String
Dim columbefore As String
Dim rowafter As String
Dim columafter As String
Dim checkbefore As String
Dim checkafter As String
Dim Previouscellcontentbefore As Integer
Dim Previouscellcontentafter As Integer
Sheets("for calculations").Visible = True
cons = Application.InputBox(prompt:="Personnel; Environment; Assets; Reputation; All", Title:="Choose consequence (NB: Case sensitive)", Default:="All")
Worksheets("For calculations").Activate
Range("D37:I42").ClearContents
Range("L37:Q42").ClearContents
Range("C34").ClearContents
Select Case cons
Case "All"
Range("C34").Value = "Risk matrix shows all types of consequences"
Case "Personnel"
Range("C34").Value = "Risk matrix shows all types of Personnel consequences"
Case "Environment"
Range("C34").Value = "Risk matrix shows Environmental consequences"
Case "Asset"
Range("C34").Value = "Risk matrix shows Asset consequences"
Case "Reputation"
Range("C34").Value = "Risk matrix shows Reputation consequences"
End Select
For I = 1 To 200
Range("C47").Value = Worksheets("HAZIDS").Cells(I + 5, 2).Value
conscat = Range("F47")
check2 = cons Like conscat
check3 = cons Like "All"
If cons Like "All" Then
check2 = True
End If
If check2 Then
before = Range("D47")
after = Range("E47")
rowbefore = Mid(before, 2, 1)
columbefore = Mid(before, 4, 1)
rowafter = Mid(after, 2, 1)
columafter = Mid(after, 4, 1)
checkbefore = Not rowbefore Like "" And Not columbefore Like ""
checkafter = Not rowafter Like "" And Not columafter Like ""
If checkbefore Then
Range("C36").Select
Previouscellcontentbefore = ActiveCell.Offset(CInt(rowbefore) + 1, CInt(columbefore) + 1)
ActiveCell.Offset(CInt(rowbefore) + 1, CInt(columbefore) + 1) = Range("C47").Value & ", " & Previouscellcontentbefore
If checkafter Then
Range("K36").Select
Previouscellcontentafter = ActiveCell.Offset(CInt(rowafter) + 1, CInt(columafter) + 1)
ActiveCell.Offset(CInt(rowafter) + 1, CInt(columafter) + 1) = Range("C47").Value & ", " & Previouscellcontentafter
End If
End If
End If
End Sub
我希望宏根据“HAZIDS”中的手动输入更新工作表“之前的风险矩阵”和“之后的风险矩阵” 然而,“用于计算”的工作表似乎有问题
【问题讨论】:
-
这里很多事情都可能出错。使用
Option Explicit并请完整声明您的变量。rowbefore + 1,rowbefore 应该很长,但是您在其中存储了一个字符串?rowbefore = Mid(before, 2, 1)? -
如果你打算将它用于“加法”,那么就声明它。这将复制问题并强调正确的变量声明。
Dim rw As Long: rw = "Sid" -
它是字符串的原因是由于字符串在“计算”表中具有预设值。因此它连接字符串。
-
然后将它们转换为 long,然后再将其用于添加。这样你就会知道它们中是否有任何无效值...