7,784
社区成员




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
If (逻辑条件) Then
' 这儿“逻辑条件”可以不用括号(我自己的代码中是习惯用括号括起来的)
词句1
语句2
词句3
. . . . .
Else
词句a
语句b
词句c
. . . . . .
End If
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