【发布时间】:2018-01-30 09:30:08
【问题描述】:
在我运行 Outlook VBA 宏后,Excel 进程并未停止运行。我怀疑它是由一些 Excel 对象函数引起的,但我真的不确定是哪个。 该问题还通过在我的 Excel 工作簿所在的文件夹中创建多个 .tmp 文件来表现出来。(我认为?) 我将发布我用来打开和关闭 Excel 的代码,以及所有使用 Excel 对象的方法。
Option Explicit
Public xlApp As Object
Public xlWB As Object
Public xlSheet As Object
Sub LeaveRequests()
Dim enviro As String
Dim strPath As String
Dim filePath As String
Dim bXStarted As Boolean
Dim i As Long
Dim j As Long
'Get Excel set up
enviro = CStr(Environ("USERPROFILE"))
'the path of the workbook
filePath = enviro & "\AppData\Roaming\Microsoft\Outlook\path.txt"
Open filePath For Input As #1
Do Until EOF(1)
Line Input #1, strPath
Loop
Close #1
On Error Resume Next
Set xlApp = GetObject(, "Excel.Application")
If Err <> 0 Then
Application.StatusBar = "Please wait while Excel source is opened ... "
Set xlApp = CreateObject("Excel.Application")
bXStarted = True
End If
On Error GoTo 0
'Open the workbook to input the data
Set xlWB = xlApp.Workbooks.Open(enviro & strPath)
Set xlSheet = xlWB.Sheets("Sheet1")
' Process the message record
On Error Resume Next
xlWB.Worksheets("Sheet1").Columns("A:NB").entirecolumn.AutoFit
For j = 2 To 367
If xlSheet.cells(1, j).Value <> Date And xlSheet.cells(1, j).Interior.ColorIndex = 4 Then
xlSheet.Columns(j).Interior.ColorIndex = 0
End If
If xlSheet.cells(1, j).Value = Date Then
xlSheet.Columns(j).Interior.ColorIndex = 4
xlSheet.Columns(j).Select
If xlSheet.cells(2, j).Value = "Monday" Then
For i = 2 To j - 1
xlSheet.Columns(i).Hidden = True
Next i
End If
xlWB.Close SaveChanges:=True
If bXStarted Then
xlApp.Quit
End If
End Sub
这就是Excel的打开和关闭。 我还有一个在 leaverequests 子中的收件箱迭代期间调用的子。
Sub FillIn(ByVal x As String, ByVal y As Date, ByVal z As Date, ByVal id As String)
Dim currentRow As Long
Dim i As Long
Dim j As Long
Dim date1Pos As Integer
Dim date2Pos As Integer
Dim datePos As Integer
Dim lastRow As Integer
lastRow = xlSheet.Range("A" & xlSheet.Rows.Count).End(-4162).Row
date1Pos = 0
date2Pos = 0
For i = 3 To lastRow
If xlSheet.cells(i, 1).Value = id Then
currentRow = i
Exit For
End If
Next i
For j = 2 To 367
If xlSheet.cells(1, j).Value = y Then
date1Pos = j
End If
If xlSheet.cells(1, j).Value = z Then
date2Pos = j
Exit For
End If
Next j
If date1Pos <> 0 And date2Pos <> 0 Then
datePos = date1Pos
For j = 1 To date2Pos + 1 - date1Pos
xlSheet.cells(currentRow, datePos).Value = x
xlSheet.cells(currentRow, datePos).HorizontalAlignment = xlCenter
datePos = datePos + 1
Next j
End If
End Sub
【问题讨论】:
-
For j = 2 To 367似乎没有匹配的Next -
可以,就在
If date1Pos <> 0 and date2Pos <> 0 Then上面,我试试缩进代码。 -
抱歉,我仍然没有在 LeaveRequests 中看到
Next J -
我推荐 Smart Indenter oaltd.co.uk/indenter/indentpage.asp ;-)(我与他们无关)