|
▼ヤムチャ さん:
こんにちは
Unionを別エクセルで修飾し、XLAP.Union(Target, FoundCell)
と変更されたということで、ご理解されているのでは?と思っているんですが。
ご理解の通り、Union は、その前に 「今動いているエクセルの」が省略されています。
で、コードとしては Application。
VBAでApplication というと、「今動いているエクセル」ということになります。
ですから、「今動いているエクセル内のアドレスを結合」というメソッドの引数が
「別エクセルのアドレス」なので、これはおかしいぞ! ということになります。
正しくは「別エクセルの領域を結合、結合領域は別エクセルのこことここ」と記述することが必要なんです。
お使いの別エクセル起動コードとは異なりますし、既存ブックではなく、新規ブックにしていますが
以下のTestOK と TestNG でその違いを感じていただければ幸甚です。
なお、
>エクセルを分けている理由は特にありません。
>2つのブックを、XLWSといったオブジェクトを扱う時、
>技術不足でこの書き方しかしらないためです。
いえいえ、こちらのほうが技術的には「高度」ですよ。
ただ、そうしなければいけない要件があるときに使います。
通常であれば同一エクセル内で、ブックを読み込みます。
以下の 同じエクセル のコードは TestNG とにていますが、こちらはエラーにはなりません。
Sub TestOK()
Dim wb As Workbook
Dim r As Range
Dim xlApp As Application
Set xlApp = New Application
xlApp.Visible = True
Set wb = xlApp.Workbooks.Add
Set r = xlApp.Union(wb.Sheets(1).Range("A1"), wb.Sheets(1).Range("B1"))
MsgBox r.Address
End Sub
Sub TestNG()
Dim wb As Workbook
Dim r As Range
Dim xlApp As Application
Set xlApp = New Application
xlApp.Visible = True
Set wb = xlApp.Workbooks.Add
Set r = Union(wb.Sheets(1).Range("A1"), wb.Sheets(1).Range("B1")) 'ここでエラーになるはず
MsgBox r.Address
End Sub
Sub 同じエクセル()
Dim wb As Workbook
Dim r As Range
Set wb = Workbooks.Add
Set r = Union(wb.Sheets(1).Range("A1"), wb.Sheets(1).Range("B1")) 'エラーにはならない
MsgBox r.Address
End Sub
|
|