#Publicで宣言した変数が別のプロシージャから呼び出せない
#エラー 変数が定義されていません。
呼び出したいのは、UniPageNです。支払通知書の分割で、ページ数が1枚目の時とそれ以降の時で読むタグを変更したいです。
VBA
1Option Explicit 2 3 4Sub mergePDF(stPg As Long, edPg As Long, wkAr() As String, wkctm As String, ExpFld As String) 5 Dim acObjUni As New Acrobat.AcroPDDoc '結合用に使うAcrobatオブジェクト 6 Dim acObjIns As New Acrobat.AcroPDDoc '追加用に使うAcrobatオブジェクト 7 Dim rsUni As Long '結合用PDF戻り値 8 Dim rsIns As Long '挿入用PDF戻り値 9 Dim i As Long 10 Dim wkInsFile As String 11 Public UniPageN As Long: UniPageN = 0 'ページ数 12 rsUni = acObjUni.Create() 13 Debug.Print ("rsUni:" & rsUni) 14 15' For i = stPg To (edPg - stPg) + 1 16 For i = stPg To edPg 17 18 wkInsFile = wkAr(0) & "\" & wkAr(i) 19 Debug.Print ("wkInsFile:" & wkInsFile) 20 rsIns = acObjIns.Open(wkInsFile) 21 Debug.Print ("rsIns:" & rsIns) 22 rsUni = acObjUni.InsertPages(UniPageN - 1, acObjIns, 0, 1, True) 23 Debug.Print ("rsUni:" & rsUni) 24' rsUni = acObjUni.InsertPages(UniPageN - 1, acObjIns, 0, 1, False) 25 rsIns = acObjIns.Close() 26 Debug.Print ("rsIns:" & rsIns) 27 28 UniPageN = UniPageN + 1 29 Debug.Print ("UniPageN:" & UniPageN) 30 31 Next 32 'PDFに名前を付けて保存 33 rsUni = acObjUni.Save(PDSaveFull, ExpFld & "\支払通知書_" & Trim(wkctm) & "_" & Format(Now(), "yyyymmddhhmmss") & ".pdf") 34 Debug.Print ("rsUni:" & rsUni) 35 rsUni = acObjUni.Close() 36 37 Set acObjUni = Nothing 38 Set acObjIns = Nothing 39 40End Sub 41 42 43Function xmlSCH(wkFileN As String) As String 44 45 Dim objXML As MSXML2.DOMDocument60 46' Dim pElem As MSHTML.HTMLParaElement 47' Dim e As MSHTML.HTMLHtmlElement 48 Dim rsLoad As Long 49 Dim SCH As Object 50 Dim prmXML As Long 51 Dim wkCusCD As String 52 Dim arMod() As Long 53 54 '初期設定 55 xmlSCH = "" 56 prmXML = 0 57 ReDim arMod(3) 58 59 Set objXML = New MSXML2.DOMDocument60 60 objXML.async = False 61 62 rsLoad = objXML.Load(wkFileN) 63 Debug.Print ("rsLoad:" & rsLoad) 64 65 If objXML.parseError.ErrorCode <> 0 Then 66 MsgBox "ロード失敗: Code " & objXML.parseError.ErrorCode & vbCrLf & vbCrLf & objXML.parseError.reason 67 Exit Function 68 End If 69 70 Debug.Print (UniPageN) 71 If UniPageN = 1 Then 72 '===========================1枚目の処理============================== 73 For Each SCH In objXML.getElementsByTagName("P") 'Pタグ列を処理 74 Debug.Print ("SCH.XML:" & SCH.XML) 75 If InStr(SCH.XML, "支払通知番号") > 0 Then 'SCH.XMLから"支払通知"があった場合はIf 76 prmXML = prmXML + 1 77 Debug.Print ("prmXML:" & prmXML) 78 79 'InStr(検索元, 検索ワード)見つからない場合:0,見つかった場合:1以上 80 arMod(0) = InStr(SCH.XML, "お客様コードNO:") + 13 'お客様コードが始まる位置 先頭から9文字目 81 Debug.Print ("arMod(0):" & arMod(0)) 82 arMod(1) = InStr(SCH.XML, "支払通知番号") 'お客様コードが終わる位置 支払い通番号から-0文字目 83 Debug.Print ("arMod(1):" & arMod(1)) 84 wkCusCD = Mid(SCH.XML, arMod(0), (arMod(1) - arMod(0))) 'Mid(String,start,[,length]) 85 Debug.Print ("wkCusCD:" & wkCusCD) 86 End If 87 Next 88 Else 89 '=======================2枚目以降の処理============================== 90 For Each SCH In objXML.getElementsByTagName("Table") 'thタグ列を処理したい" 91 Debug.Print ("SCH.XML:" & SCH.XML) 92 If InStr(SCH.XML, "お客様コードNO") > 0 Then 93 prmXML = prmXML + 1 94 Debug.Print ("prmXML:" & prmXML) 95 'InStr(検索元, 検索ワード)見つからない場合:0,見つかった場合:1以上 96 arMod(0) = Len(SCH.XML) '全文字数の取得 97 Debug.Print ("arMod(0):" & arMod(0)) 98 arMod(1) = InStr(SCH.XML, "お客様コードNO:") + 9 'お客様コードが始まる位置 先頭から9文字目 99 Debug.Print ("arMod(1):" & arMod(1)) 100 wkCusCD = Mid(SCH.XML, arMod(1), (arMod(0) - arMod(1))) 'Mid(String,start,[,length]) 101 Debug.Print ("wkCusCD:" & wkCusCD) 102 End If 103 Next 104 End If 105 106 107 xmlSCH = wkCusCD '現在の取引先CD 108 Debug.Print ("xmlSCH:" & xmlSCH) 109 Set objXML = Nothing 'Objectの開放 110 111End Function 112 113
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。