VB提示ELSE没有IF

AwayHence 2017-04-16 09:57:07

Private Sub Command2_Click()
Dim excel_App As Excel.Application
Dim excel_Book_a As Excel.Workbook
Dim excel_sheet_a As Excel.Worksheet
Dim excel_Book_b As Excel.Workbook
Dim excel_sheet_b As Excel.Worksheet
Set excel_App = CreateObject("Excel.Application")
excel_App.Visible = False
Set excel_Book_a = excel_App.Workbooks.Open(App.Path + "\火电厂检修计划.xlsx")
Set excel_sheet_a = excel_Book_b.Worksheets("Sheet1")
Set excel_Book_b = excel_App.Workbooks.Open(App.Path + "\传统调度模式初始发电量.xlsx")
Set excel_sheet_b = excel_Book_a.Worksheets("Sheet1")
Dim i As Integer
Dim j As Integer
Dim a(1 To 10, 1 To 12) As Single
Dim b(1 To 10, 1 To 12) As Single
Dim c(1 To 10, 1 To 12) As Single
Dim d(1 To 10, 1 To 12) As Single
Dim x(1 To 10) As Single
Dim y As Integer
x(1) = 12
x(2) = 35
x(3) = 25
x(4) = 25
x(5) = 25
x(6) = 100
x(7) = 260
x(8) = 300
x(9) = 50
x(10) = 50
s = x(1) + x(2) + x(3) + x(4) + x(5) + x(6) + x(7) + x(8) + x(9) + x(10)

a(i, j) = excel_sheet_a.Cells(i + 1, j + 1) '检修天数
b(i, j) = excel_sheet_b.Cells(i + 1, j + 1) '检修值(变化)
c(i, j) = excel_sheet_b.Cells(i + 1, j + 1) '检修值(原值)
Dim T As Integer
Dim cc As Single
Dim r(1 To 12) As Single

For i = 1 To 10
For j = 1 To 12
r(j) = 0 'r(j)为j列参加检修的机组发电量和
If a(i, j) > 0 Then
If i = 1 Or 3 Or 5 Or 7 Or 8 Or 10 Or 12 Then T = 31 '判断天数
ElseIf i = 2 Then T = 28
Else: i = 30

For m = j + 1 To 12
b(i, m) = b(i, m) + c(i, j) * a(i, j) / T / (12 - j) '行分解,为平均分解算法
Next m
End If


'需要检修的机组
b(i, j) = c(i, j) * a(i, j) / T '
'下面是列分解分解到未检修的机组
r(j) = r(j) + a(i, j)
Else: b(i, j) = c(i, j) + r(j) * x(i) / s 就是提示这一行
'下面是与检修期不同列不同行的分解
Dim g(1 To 10) As Integer
For m = 1 To 10
For n = 1 To 12
g(m) = 0 'g(m)为未检修的容量和
If m <> i And n <> j Then
g(m) = g(m) + x(m)
b(m, n) = c(m, n) - r(j) * x(i) / g(m) / (12 - n)
End If
Next n
Next m
End If


Next j
Next i




For i = 1 To 10
For j = 1 To 12
excel_sheet_b.Cells(i + 1, j + 1) = b(i, j)
excel_sheet_b.Cells(m + 1, n + 1) = b(m, n)
Next j
Next i

excel_App.ActiveWorkbook.SaveAs FileName:=App.Path + "\传统调度模式发电量分解结果(不包括12月和越限处理).xlsx"
Set excel_sheet_a = Nothing
excel_App.ActiveWorkbook.Close SaveChanges:=False
Set excel_Book_a = Nothing
Set excel_sheet_b = Nothing
excel_App.ActiveWorkbook.Close SaveChanges:=False
Set excel_Book_b = Nothing
excel_App.Quit
Set excel_App = Nothing


End Sub



求大神解答
...全文
1008 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
舉杯邀明月 2017-04-17
  • 打赏
  • 举报
回复
引用 4 楼 hjgsh221 的回复:
[quote=引用 3 楼 Tiger_Zhao 的回复:] 把冒号换成回车。 新人就老老实实按正统的格式写代码。 非正统的冒号只是因为历史兼容性而保留下来的,没必要。
还是不行[/quote] 关键的地方: 把你上面贴的代码“第44行”,从“Then”后面断行、把“T = 31 '判断天数”换到下一行去写! 总之一句话: 代码格式不规范引起的问题! 你的代码从“第43行”到“第70行”之间,全部应该写成“规范格式”,就没这样的问题了:
If (逻辑条件) Then
' 这儿“逻辑条件”可以不用括号(我自己的代码中是习惯用括号括起来的)
   词句1
   语句2
   词句3
    . . . . .
Else
   词句a
   语句b
   词句c
   . . . . . .
End If
赵4老师 2017-04-17
  • 打赏
  • 举报
回复
偶遇到类似问题都是用 “每次用‘注释掉不同部分再重新编译,直到定位到具体语法出错的位置。” 的方法解决的。
AwayHence 2017-04-17
  • 打赏
  • 举报
回复
引用 3 楼 Tiger_Zhao 的回复:
把冒号换成回车。 新人就老老实实按正统的格式写代码。 非正统的冒号只是因为历史兼容性而保留下来的,没必要。
还是不行
Tiger_Zhao 2017-04-17
  • 打赏
  • 举报
回复
把冒号换成回车。 新人就老老实实按正统的格式写代码。 非正统的冒号只是因为历史兼容性而保留下来的,没必要。
of123 2017-04-17
  • 打赏
  • 举报
回复

    If a(i, j) > 0 Then
        If i = 1 Or 3 Or 5 Or 7 Or 8 Or 10 Or 12 Then 
            T = 31 '判断天数
        ElseIf i = 2 Then 
            T = 28
        Else
            i = 30
            For m = j + 1 To 12
                b(i, m) = b(i, m) + c(i, j) * a(i, j) / T / (12 - j) '行分解,为平均分解算法
            Next m
        End If
        '需要检修的机组
        b(i, j) = c(i, j) * a(i, j) / T '
        '下面是列分解分解到未检修的机组
        r(j) = r(j) + a(i, j)
    Else
        Dim g(1 To 10) As Integer
        b(i, j) = c(i, j) + r(j) * x(i) / s               '下面是与检修期不同列不同行的分解
        For m = 1 To 10
            For n = 1 To 12
                g(m) = 0 'g(m)为未检修的容量和
                If m <> i And n <> j Then
                    g(m) = g(m) + x(m)
                    b(m, n) = c(m, n) - r(j) * x(i) / g(m) / (12 - n)
                End If
            Next n
        Next m
    End If
一如既往哈 2017-04-16
  • 打赏
  • 举报
回复
在else后面回车
AwayHence 2017-04-16
  • 打赏
  • 举报
回复
提示的是58行

7,784

社区成员

发帖
与我相关
我的任务
社区描述
VB 基础类
社区管理员
  • VB基础类社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧