初めての質問なのですが ひとつのエクセルのデータをアクセスに送るプログラム なのですが 直接エクセルからデータを取り込みアクセスに送ると簡単なのですがネットワークを経由する為か 非常に時間が掛かります(6万行程のデータ) そこで エクセルのマクロを使い同じ事をさせると大変短時間で同じ作業が完了することがわかり プログラムから新しいエクセルを起動させ そのエクセルにマクロを書込み実行させるプログラムを作ってみました ところが プログラムからエクセルのマクロに参照を追加するコードが分かりません 参照を追加したエクセルを起動させると問題ないのですが面白くないので どうかご教授願えませんでしょうか。 下記のようなコードを動かせるようにしたいのです Dim xl As Excel.Application Dim book As Excel.Workbook Dim oModule As VBIDE.VBComponent Dim sCode As String
'***新しいエクセル見せずに起動************************** xl = New Excel.Application book = xl.Workbooks.Add
分類:[.NET]
はじめて投稿させていただきます。
いつも DOBON.NET .NET Tips拝見させて頂き 大変参考にさせて頂いております。
初めての質問なのですが ひとつのエクセルのデータをアクセスに送るプログラム
なのですが 直接エクセルからデータを取り込みアクセスに送ると簡単なのですがネットワークを経由する為か 非常に時間が掛かります(6万行程のデータ)
そこで エクセルのマクロを使い同じ事をさせると大変短時間で同じ作業が完了することがわかり プログラムから新しいエクセルを起動させ そのエクセルにマクロを書込み実行させるプログラムを作ってみました
ところが プログラムからエクセルのマクロに参照を追加するコードが分かりません
参照を追加したエクセルを起動させると問題ないのですが面白くないので どうかご教授願えませんでしょうか。
下記のようなコードを動かせるようにしたいのです
Dim xl As Excel.Application
Dim book As Excel.Workbook
Dim oModule As VBIDE.VBComponent
Dim sCode As String
'***新しいエクセル見せずに起動**************************
xl = New Excel.Application
book = xl.Workbooks.Add
sCode = "Sub マクロ() " & vbCr & _
"Dim cn As Connection " & vbCr & _
"Dim rs As Recordset " & vbCr & _
"Dim myRange As Range " & vbCr & _
"Dim myLastRow " & vbCr & _
"Dim myCell As Range " & vbCr & _
"Dim myID " & vbCr & _
"Dim myNaiyou " & vbCr & _
"Dim myKuremuSheet As Worksheet " & vbCr & _
"Dim myNono " & vbCr & _
"Dim myCoun " & vbCr & _
"Dim myWari " & vbCr & _
" " & vbCr & _
" Set myKuremuSheet = Application.Workbooks(""住所録.xls"").Worksheets(""住所録"") " & vbCr & _
" With myKuremuSheet " & vbCr & _
" Set myRange = Range(.Range(""A2""), .Range(""A65536"").End(xlUp)) " & vbCr & _
" myCoun = .Range(""A65536"").End(xlUp).Row " & vbCr & _
" End With " & vbCr & _
" myID = 1 " & vbCr & _
" " & vbCr & _
" Set cn = New Connection " & vbCr & _
" cn.ConnectionString = ""provider=microsoft.jet.oledb.4.0;data source=\\Intsv\共有\000全社\108技術部\AS課\ASファイル.mdb"" " & vbCr & _
" cn.Open " & vbCr & _
" Set rs = New Recordset " & vbCr & _
" rs.Open ""業者住所録"", cn, adOpenKeyset, adLockOptimistic " & vbCr & _
" " & vbCr & _
"Dim nam " & vbCr & _
"Dim tel1 " & vbCr & _
"Dim fax1 " & vbCr & _
"Dim kei " & vbCr & _
"Dim yuu " & vbCr & _
"Dim juu " & vbCr & _
"Dim bik " & vbCr & _
"Dim gyou " & vbCr & _
" " & vbCr & _
"For Each myCell In myRange " & vbCr & _
" myRow = myCell.Row " & vbCr & _
" " & vbCr & _
" rs.AddNew " & vbCr & _
" With myKuremuSheet " & vbCr & _
" nam = .Cells(myRow, ""A"").Value " & vbCr & _
" tel1 = .Cells(myRow, ""B"").Value " & vbCr & _
" fax1 = .Cells(myRow, ""C"").Value " & vbCr & _
" kei = .Cells(myRow, ""D"").Value " & vbCr & _
" yuu = .Cells(myRow, ""E"").Value " & vbCr & _
" juu = .Cells(myRow, ""F"").Value " & vbCr & _
" bik = .Cells(myRow, ""G"").Value " & vbCr & _
" gyou = .Cells(myRow, ""H"").Value " & vbCr & _
" End With " & vbCr & _
" rs!ID = myID " & vbCr & _
" myID = myID + 1 " & vbCr & _
" rs!業者名 = nam " & vbCr & _
" rs!tel = tel1 " & vbCr & _
" rs!fax = fax1 " & vbCr & _
" rs!携帯その他 = kei " & vbCr & _
" rs!郵便番号 = yuu " & vbCr & _
" rs!住所 = juu " & vbCr & _
" rs!備考 = bik " & vbCr & _
" rs!行 = gyou " & vbCr & _
" " & vbCr & _
"Next " & vbCr & _
"rs.Update " & vbCr & _
" " & vbCr & _
"rs.Close " & vbCr & _
"Set rs = Nothing " & vbCr & _
"cn.Close " & vbCr & _
"Set cn = Nothing " & vbCr & _
" " & vbCr & _
"End Sub "
oModule = book.VBProject.VBComponents.Add(VBIDE.vbext_ComponentType.vbext_ct_StdModule)
oModule.CodeModule.AddFromString(sCode)
'***マクロ実行******
xl.Run("マクロ")
'*******************
xl.close(False)
xl = Nothing()
xl.Quit()
xl = Nothing
非常に長くて申しわけ御座いません。