【发布时间】:2020-11-19 05:40:40
【问题描述】:
我在 OneDrive 上有一些文件。我的 Python 程序正好查找 5 个文件并粘贴到本地文件夹 (C:/..)。在此之后,一个大宏将所有数据合并到一个输出中。
在我的 Python 程序中,出现以下错误:
(-2147023170, 'Falha na chamada de procedimento remoto.', None, None)
这是原始代码:
def job(path,sheet,init, destinationi, hoje, ontem):
files = os.listdir(path)
paths = [os.path.join(path, basename) for basename in files if '.xlsx' in basename]
for i in paths:
destination = ''
i_div = i.split('/')
i_name = i_div[len(i_div)-1]
for j in namefile:
if j in i and not i_name.startswith('~$'):
destination = destinationi + j + hoje + '.xlsx'
i_name = j + hoje
if destination != '':
try:
app = xw.App(add_book=False)
app.display_alerts = False
wb = app.books.api.Open(i, UpdateLinks=False)
book = xw.Book(impl=xw._xlwindows.Book(xl=wb))
print("Abriu às "+str(datetime.now())+" - "+i_name)
try:
book.save(destination)
print("Salvou cópia às "+str(datetime.now())+" - "+i_name)
except Exception as e: print(e)
book.close()
app.kill()
print("Fechou às "+str(datetime.now())+" - "+i_name)
except Exception as e:
print(e)
我还有一个大宏,我在一天内执行了好几次。但是,今天我在这段代码中有一个奇怪的错误,它打开了 Python 应该放在文件夹中的文件(我在手动放置后执行):
For Each oArq In oPat.Files
Workbooks.Open oArq
nova = ActiveWorkbook.Name
li = WorksheetFunction.CountA(Columns("F"))
Range("A2:BT" & li).Copy
Windows(nomeplan).Activate
Sheets(sub1).Activate
li2 = WorksheetFunction.CountA(Columns("F"))
If li2 = 1 Then
Range("A1").Select
ActiveCell.Offset(1, 0).PasteSpecial xlPasteValues
Application.CutCopyMode = False
Application.DisplayAlerts = False
Workbooks(nova).Close
GoTo aqui
End If
Range("A1").End(xlDown).Select
ActiveCell.Offset(1, 0).PasteSpecial xlPasteValues
Application.CutCopyMode = False
Application.DisplayAlerts = False
Workbooks(nova).Close
aqui:
Next oArq
在简历中:宏打开其他文档 Excel,进行复制和粘贴,然后关闭文件。有时,它转到“DeuRuim”,但 Err.Number 返回 0。之后,原来的 Excel 关闭,我不知道为什么。
有人有同样的问题吗?我没有错误代码或任何可帮助搜索解决方案的信息。
【问题讨论】:
-
没有什么可以阻止您的代码运行到
DeuRuim- 这将是正常执行。您不要将错误处理程序放在这样的循环中:它们应该放在方法的末尾并受到上面的 Exit Sub 保护,这样您的代码就不会碰到它们。 -
@TimWilliams 这不是真的。代码并不总是运行 DeuRuim,我的代码“DeuRuim”也放在错误之后。所以这不是起源。
-
程序在 Sub 中有更多代码,对于指示的错误,这不是必需的。
-
嗯,在你编辑之后它不是真的,但它是在我发布的时候......
-
@TimWilliams 不,之前和之后都不是真的。我编辑只是为了避免像您的评论这样的错误解释。