我有Excel vba宏来打开特定的Outlook收件箱子文件夹,但Outlook子文件夹在新的Outlook窗口中打开。
这导致如果我不手动关闭新窗口,那么在多次运行宏之后,我打开了多个Outlook窗口。
如何修改代码,以便Outlook只是导航到现有的单个窗口中的所需子文件夹,取悦?
目前,新的Outlook窗口会在Excel电子表格的基础上打开。运行宏时,我希望当前的Outlook实例转到所需的子文件夹,并在Excel电子表格的顶部进行应用。
我没有写下面的代码。我已将下面的代码合并到一个更大的宏中,但其余部分则无关紧要。
from tkinter import *
from tkinter import messagebox
class Gameover(object):
def start(self):
self.root = Tk()
self.root.title('Gameover')
self.lbl = Label(self.root, text = 'Enter your name')
self.lbl.grid(row = 0)
self.usertext = StringVar()
self.myentry = Entry(self.root, textvariable = self.usertext)
self.myentry.grid(row = 1, column = 0)
self.lbl = Label(self.root, text = 'Your name's length must be shorter than 9 letters')
self.lbl.grid(row = 2)
self.mybutton = Button(self.root, text = 'OK', command = self.check_length, width = 10, height = 2)
self.mybutton.grid(row = 1, column = 1)
self.counter = 0
self.root.mainloop()
def check_length(self):
if len(self.usertext.get()) < 10:
self.printMessage()
else:
self.errorbox()
def errorbox(self):
messagebox.showinfo("Erorr", 'Your name's length must be shorter than 9 letters')
def printMessage(self):
global the_score, FILE_DATA
data = [self.usertext.get(), str(the_score)]
FILE_DATA.insert(len(FILE_DATA) - 1, data)
FILE_DATA[len(FILE_DATA) - 2][1] = int(FILE_DATA[len(FILE_DATA) - 2][1])
for i in range(0, len(FILE_DATA) - 1):
for j in range(0, len(FILE_DATA) - 2 - i):
if FILE_DATA[j][1] < FILE_DATA[j + 1][1]:
poped_data = FILE_DATA[j]
del FILE_DATA[j]
FILE_DATA.insert(j + 1, poped_data)
file = open('score.txt', 'w', encoding = 'utf-8')
for i in range(len(FILE_DATA) - 1):
file.write('{} {}\n'.format(FILE_DATA[i][0], FILE_DATA[i][1]))
file.close()
sys.exit()
答案 0 :(得分:1)
从我对another question的答案:(实际上是few)
使用Excel等应用程序时,这一点非常重要 确保应用程序对象正确
.Quit
/.Close
&#39; d 完成了它们,(以及Set
所有对象Nothing
),否则 存在无意中运行多个实例的风险, 这可能导致内存泄漏,从而导致崩溃和潜在问题 数据丢失。要检查是否存在Outlook的现有实例,请使用此实例 功能:
Function IsOutlookOpen() 'returns TRUE if Outlook is running Dim olApp As Outlook.Application On Error Resume Next Set olApp = GetObject(, "Outlook.Application") On Error GoTo 0 If olApp Is Nothing Then IsOutlookOpen= False Else IsOutlookOpen= True End If End Function
有关从源中打开Office应用程序的新实例<现有的详细信息: Ron de Bruin
答案 1 :(得分:0)
如果您只想导航到现有单个窗口中的子文件夹,请使用Application.ActiveExplorer Method (Outlook)
与CurrentFolder Property一起使用 以下示例同时在 SubFolder
下激活 Inbox
名称“Temp”窗口应用程序
Option Explicit
Public Sub Example()
Dim olApp As Outlook.Application
Dim olNS As Outlook.Namespace
Dim Inbox As Outlook.MAPIFolder
Dim SubFolder As Outlook.MAPIFolder
'// Ref to Outlook Inbox
Set olApp = New Outlook.Application
Set olNS = olApp.GetNamespace("MAPI")
Set Inbox = olNS.GetDefaultFolder(olFolderInbox)
Set SubFolder = Inbox.Folders("Temp")
If Not SubFolder Is Nothing Then
Set olApp.ActiveExplorer.CurrentFolder = SubFolder
Else
MsgBox "SubFolder Not Found", vbInformation
End If
End Sub
答案 2 :(得分:0)
您的代码始终会调用MAPIFolder.Display
,因此您每次都会获得一个新的资源管理器窗口。
改为执行以下操作
if MyOutLookApp.ActiveExplorer Is Nothing Then
This.Display
Else
set MyOutLookApp.ActiveExplorer.CurrentFolder = This
End If