[英]Macro is running twice when launch via python
挑戰:我正在通過 python 運行 Excel 宏,宏顯示日期輸入表單。 但是,一旦我在宏的輸入表單中輸入日期並單擊“確定”按鈕,相同的輸入表單將再次顯示,需要輸入它。
在宏中,我只調用了 1 次輸入表。
Sub Load_NAV_Data()
On Error GoTo ERR_HANDLER
Dim strSQL As String
Dim strStandardDate As String
Dim intNumberColumns As Long
Dim intNumberRows As Long
Dim objCol As Object
Dim ingColSu As Long
Dim iCols As Long
'--------------------------------
' Connect to DB
'--------------------------------
'--------------------------------
' Get standard date
'--------------------------------
StandardDateForm.Show
strStandardDate = StandardDateForm.StandardDate
Unload StandardDateForm
If strStandardDate = StrConv(strStandardDate, vbWide) Then
strStandardDate = StrConv(strStandardDate, vbNarrow)
End If
MsgBox strStandardDate
'--------------------------------
' SQL
'--------------------------------
Dim Rs As New ADODB.Recordset
Set Rs = New ADODB.Recordset
Rs.CursorLocation = adUseClient
strSQL = "SELECT HR.ID,"
strSQL = strSQL & "HR.EMPNAME "
strSQL = strSQL & "FROM HR "
strSQL = strSQL & "WHERE (HR.Date='" & strStandardDate & "') AND (HR.WORKINGYEAR>$0)"
Rs.Open strSQL, cn
'--------------------------------
' Get Column Name
'--------------------------------
For intNumberColumns = 0 To Rs.Fields.Count - 1
Worksheets("NAV Price").Cells(1, intNumberColumns + 1).Value = Rs.Fields(intNumberColumns).Name
Next intNumberColumns
'--------------------------------
' Output to Excel
'--------------------------------
intNumberRows = 2
Do Until Rs.EOF
Cells(intNumberRows, 1).Value = Rs.Fields("ID").Value
Cells(intNumberRows, 2).Value = Rs.Fields("EMPNAME").Value
intNumberRows = intNumberRows + 1
Rs.MoveNext
Loop
'--------------------------------
' Disconnect to DB
'--------------------------------
If Not Rs Is Nothing Then
If Rs.State = adStateOpen Then Rs.Close
Set Rs = Nothing
End If
If Not cn Is Nothing Then
If cn.State = adStateOpen Then cn.Close
Set cn = Nothing
End If
cn.Close
Rs.Close
ERR_HANDLER:
'Error message
Debug.Print Err.Number & ")" & Err.Description
MsgBox Err.Number & ")" & Err.Description
'--------------------------------
' Disconnect to DB
'--------------------------------
If Not Rs Is Nothing Then
If Rs.State = adStateOpen Then Rs.Close
Set Rs = Nothing
End If
If Not cn Is Nothing Then
If cn.State = adStateOpen Then cn.Close
Set cn = Nothing
End If
End Sub
在 python 中,我們用下面的方法調用宏
excel = Win32com.client.Dispatch('Excel.Application')
excel.Visible = 0
private_wb = excel.Workbooks.Open("Macro file path")
data_sheet = private_wb.Worksheets("Data")
excel.Application.Run("Macro.Load_NAV_Data()")
private_wb.Close(SaveChanges = 1)
--- skip logic ---
submit_wb = excel.Workbooks.Add()
submit_sheet = submit_wb.Worksheets(1)
submit_sheet.name = "Submit"
submit_wb.SaveAs("Path where to save")
private_wb.Close(SaveChanges = 0)
submit_wb.Close(SaveChanges = 0)
當我只運行宏時,輸入表單將只顯示一次,但從 python 顯示兩次。
您能指導我解決問題嗎?
對於那些有同樣問題的人,這僅僅是由於調用 VBA Sub 時的括號。 如果 sub 不需要任何參數,則不需要括號。
而不是這個:
excel.Application.Run("Macro.Load_NAV_Data()")
它應該是:
excel.Application.Run("Macro.Load_NAV_Data")
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.