Excelに1つ、Wordに1つのマクロが2つあります。 ExcelマクロはWordマクロを呼び出します。次のように私のコードは次のとおりです。ExcelからWordマクロを呼び出す方法
エクセル:
Public wb1 As Workbook
Public dt1 As Document
Sub openword()
Dim wpath, epath As String 'where the word document will be opened and where the excel sheet will be saved
Dim wordapp As Object 'preparing to open word
Set wb1 = ThisWorkbook
While wb1.Sheets.Count <> 1
wb1.Sheets(2).Delete
Wend
wpath = "C:\users\GPerry\Desktop\Projects and Work\document.docm"
Set wordapp = CreateObject("Word.Application")
'Set wordapp = CreateObject(Shell("C:\Program Files (x86)\Microsoft Office\Office14\WINWORD", vbNormalFocus)) this is one I tried to make work because while word.application seems to work, I don't *understand* it, so if anyone can help, that'd be awesome
wordapp.Visible = True
Set dt1 = wordapp.Documents.Open(wpath)
wordapp.Run "divider", wb1, dt1
dt1.Close
wordapp.Quit
End Sub
およびワード:
Sub divider(wb1, dt1)
Set dt1 = ThisDocument
If dt1.Paragraphs.Count > 65000 Then
Set cutrange = dt1.Range(dt1.Paragraphs(1).Range.Start, dt1.Paragraphs(65000).Range.End)
If wb1.Sheets(Sheets.Count).Cells(1, 1) <> "" Then
wb1.Sheets.Add After:=Sheets.Count
End If
Else
Set cutrange = dt1.Content
If wb1.Sheets(Sheets.Count).Cells(1, 1) <> "" Then
wb1.Sheets.Add After:=Sheets.Count
End If
End If
cutrange.Cut Destination:=wb1.Sheets(wb1.Sheets(Sheets.Count)).Cells(1, 1)
wb1.Sheets(Sheets.Count).Cells(1, 1).TextToColumns Destination:=wb1.Sheets(1).Cells(1, 1)
End Sub
私の問題は、変数WB1は、それらの間で渡され取得されていないということです。マクロに送る変数のリストにwb1を入れても、ドキュメントに到達するとwb1には値がありません。私はそれを再初期化しますが、すでに存在するドキュメントを参照する方法はわかりません。オープンするときにそれを1に設定する方法だけです。
どのようにWordマクロに値を渡すか、この変数をどのように再初期化しますか? Excelのアプリケーションと同等のものを設定する必要はありません。なぜなら、毎回試してみると、2010年ではなくExcel 2003と同等に設定されるからです(ただし、その解決方法ももちろんあります)。
ありがとうございます!
私は 'DT1 = wordapp.Documents.Open(WPATH)を設定し'と 'DT1 = ThisDocument'異なるものであることが判明する方法として混乱しています - 彼らは同じものを指していませんか? - それが役に立ったら、大丈夫です(箱入りをするのはどういう意味ですか?)。そして... ...どういう種類の変数型があるのか(それは変数のようなものなので、明示的に宣言しなければならないということですか?)私は単語vbaがどのように動作するかを本当に知らないので、私が推測できる最も近い文字列は...また、Excelのライブラリをオンにするとシートやその他のものを使うことができると思いました。私はそれをカットして、それをExcelマクロに戻すべきですか? –
申し訳ありませんが、これは(おそらく愚かな)質問がたくさんありますが、私はvbaを使ってこの複雑なものに近いものを試みたことは一度もありませんでした。 –
変数dt1をExcelからWordに渡します。最初に行うことは、 'ThisDocument'に設定することです。それは呼び出し元の関数に何の違いもありません。 – Comintern