【課題】
pythonからExcel Macroを呼び出しマクロを実行しています。しかし、pythonからマクロを呼び出すと2回実行されてしまいます。Macro側でLoopは使っていないのですが、2回実行されてしまい困っています。
【ロジック】
Macroを呼び出すpythonコード
python
1private_wb = excel.Workbooks.Open("マクロの格納先パス") 2data_sheet = private_wb.Worksheets("Data") 3excel.Application.Run("Macro.Load_NAV_Data()")
Macro
1標準モジュール 2Sub Load_NAV_Data() 3 4 On Error GoTo ERR_HANDLER 5 Dim strSQL As String 6 Dim strStandardDate As String 7 Dim intNumberColumns As Long 8 Dim intNumberRows As Long 9 10 Dim objCol As Object 11 Dim ingColSu As Long 12 Dim iCols As Long 13 14 15 '-------------------------------- 16 ' データベース接続 17 '-------------------------------- 18 19 20 '-------------------------------- 21 ' 基準価額の基準日を取得 22 '-------------------------------- 23 StandardDateForm.Show 24 strStandardDate = StandardDateForm.StandardDate 25 Unload StandardDateForm 26 27 If strStandardDate = StrConv(strStandardDate, vbWide) Then 28 29 strStandardDate = StrConv(strStandardDate, vbNarrow) 30 31 End If 32 33 MsgBox strStandardDate 34 35 '-------------------------------- 36 ' SQLの実行 37 '-------------------------------- 38 Dim Rs As New ADODB.Recordset 39 Set Rs = New ADODB.Recordset 40 Rs.CursorLocation = adUseClient 41 42 strSQL = "SELECT HR.ID," 43 strSQL = strSQL & "HR.EMPNAME " 44 strSQL = strSQL & "FROM HR " 45 strSQL = strSQL & "WHERE (HR.基準日_文字型='" & strStandardDate & "') AND (HR.WORKINGYEAR>$0)" 46 47 Rs.Open strSQL, cn 48 49 '-------------------------------- 50 ' カラム名を取得 51 '-------------------------------- 52 53 54 For intNumberColumns = 0 To Rs.Fields.Count - 1 55 56 Worksheets("NAV Price").Cells(1, intNumberColumns + 1).Value = Rs.Fields(intNumberColumns).Name 57 58 Next intNumberColumns 59 60 61 '-------------------------------- 62 ' 取得データをセルに一括出力 63 '-------------------------------- 64 intNumberRows = 2 65 66 Do Until Rs.EOF 67 68 Cells(intNumberRows, 1).Value = Rs.Fields("ID").Value 69 Cells(intNumberRows, 2).Value = Rs.Fields("EMPNAME").Value 70 71 intNumberRows = intNumberRows + 1 72 Rs.MoveNext 73 74 Loop 75 76' Set objCol = Rs.Fields 77' ingColSu = objCol.Count 78 79 80 '-------------------------------- 81 ' データベース切断 82 '-------------------------------- 83 84 If Not Rs Is Nothing Then 85 If Rs.State = adStateOpen Then Rs.Close 86 Set Rs = Nothing 87 End If 88 If Not cn Is Nothing Then 89 If cn.State = adStateOpen Then cn.Close 90 Set cn = Nothing 91 End If 92 93 cn.Close 94 Rs.Close 95 96ERR_HANDLER: 97 98 'エラーメッセージ 99 Debug.Print Err.Number & ")" & Err.Description 100 MsgBox Err.Number & ")" & Err.Description 101 102 '-------------------------------- 103 ' データベース切断 104 '-------------------------------- 105 If Not Rs Is Nothing Then 106 If Rs.State = adStateOpen Then Rs.Close 107 Set Rs = Nothing 108 End If 109 If Not cn Is Nothing Then 110 If cn.State = adStateOpen Then cn.Close 111 Set cn = Nothing 112 End If 113 114End Sub
Macro
1入力フォーム 2Public StandardDate As String 3 4Private Sub OKButton_Click() 5 6 StandardDate = Me.StandardDateInputBox 7 Me.Hide 8 9End Sub
【したいこと】
マクロで入力フォームを呼び出して、値を入力しそれをVBA側に渡します。1回入力後に同じ入力フォームが表示されてしまうので、2回目を表示しないようにしたいと考えています。
皆様のお知恵を拝借できればと思っております。
回答1件
あなたの回答
tips
プレビュー