Excel VBA質問箱 IV

当質問箱は、有志のボランティア精神のおかげで成り立っています。
問題が解決したら、必ずお礼をしましょうね。
本サイトの基本方針をまとめました。こちら をご一読ください。

投稿種別の選択が必要です。ご注意ください。
迷惑投稿防止のため、URLの入力を制限しています。ご了承ください。


2881 / 13646 ツリー ←次へ | 前へ→

【65476】他bookのデータをcomboboxのリストに取り込みたいのですが??? 八家九僧陀 10/5/25(火) 0:00 質問[未読]
【65478】Re:他bookのデータをcomboboxのリストに取... kanabun 10/5/25(火) 9:58 発言[未読]
【65482】Re:他bookのデータをcomboboxのリストに取... 八家九僧陀 10/5/25(火) 17:25 質問[未読]
【65483】Re:他bookのデータをcomboboxのリストに取... kanabun 10/5/25(火) 17:46 発言[未読]
【65484】Re:他bookのデータをcomboboxのリストに取... 八家九僧陀 10/5/25(火) 19:27 質問[未読]
【65485】Re:他bookのデータをcomboboxのリストに取... kanabun 10/5/25(火) 20:20 発言[未読]

【65476】他bookのデータをcomboboxのリストに取り...
質問  八家九僧陀  - 10/5/25(火) 0:00 -

引用なし
パスワード
   以前、同じbookのSheet間のデータをリストとして取り込み、複数列を表示させて、選択すると、他の複数のtextboxに該当データを取り込むVBAを教えていただきましたが、今回は、同じフォルダ内の異なるbook間でのデータ取り込みのVBAを教えてください。前回ご教示いただいたVBAを修正してみたのですがうまくいきません。ご教示ください。

1.同じフォルダ「給与管理」内のbook1のsheet"入力票"のuserformのcombobox1のリストに、book2のsheet"給与マスター"のrange("a3").currentregion.selectした範囲から項目行を除いた範囲をリストとし、項目も表示させたい。

2.book2は非表示、非activeで、Combobox1の処理終了とともに、保存しないで閉じるようにしたい。

1.と2.を満たすVBAとするには、以下のVBAをどのように修正・加筆すればいいのでしょうか?

Private Sub Combobox1_Click()
  With Me.ComboBox1
    If .ListIndex < 0 Then Exit Sub
    Sheets("入力票").range("C5").Value = .List(.ListIndex, 1)
    Sheets("入力票").range("D5").Value = .List(.ListIndex, 2)
    Sheets("入力票").range("E5").Value = .List(.ListIndex, 3)
    ・
    ・
    ・
    Sheets("入力票").range("K7").Value = .List(.ListIndex, 1)
    Sheets("入力票").range("L7").Value = .List(.ListIndex, 2)
    Sheets("入力票").range("M7").Value = .List(.ListIndex, 3)

  End With
End Sub

Private Sub UserForm_Initialize()

・(他のinitializeに関係する記述があります)

  Dim r As Range
  Set r = workbooks("book2.xls").Worksheets("給与マスター").Range("A3").currentregion.select

  With Me.Combobox1
    .RowSource = r.Address(External:=True)
    .ColumnHeads = True
    .TextColumn = 1   '表示する列を指定する。
    .BoundColumn = 2  'Valueに返す列指定する。この場合はC列表示
    .ColumnCount = 4
    .ColumnWidths = "50;40;30;20"
  End With
.
.(他のinitializeに関係する記述があります)
.
End Sub

【65478】Re:他bookのデータをcomboboxのリストに...
発言  kanabun  - 10/5/25(火) 9:58 -

引用なし
パスワード
   ▼八家九僧陀 さん:
こんにちは。

>以前、同じbookのSheet間のデータをリストとして取り込み、複数列を表示させて、選択すると、他の複数のtextboxに該当データを取り込む

>今回は、同じフォルダ内の異なるbook間でのデータ取り込み

>1.同じフォルダ「給与管理」内のbook1のsheet"入力票"のuserformのcombobox1のリストに、book2のsheet"給与マスター"のrange("a3").currentregion.selectした範囲から項目行を除いた範囲をリストとし、項目も表示させたい。


>Private Sub UserForm_Initialize()
>・
>・(他のinitializeに関係する記述があります)
>
>  Dim r As Range
>  Set r = workbooks("book2.xls").Worksheets("給与マスター").Range("A3").currentregion.select
>
>  With Me.Combobox1
>    .RowSource = r.Address(External:=True)
>    .ColumnHeads = True
>    .TextColumn = 1   '表示する列を指定する。
>    .BoundColumn = 2  'Valueに返す列指定する。この場合はC列表示
>    .ColumnCount = 4
>    .ColumnWidths = "50;40;30;20"
>  End With
>.
>.(他のinitializeに関係する記述があります)
>.
>End Sub

とりあえず、
>  Set r = workbooks("book2.xls").Worksheets("給与マスター").Range("A3").currentregion.select

の行を

  Set r = workbooks("book2.xls").Worksheets("給与マスター").Range("A3").currentregion
  Set r = Intersect(r, r.Offset(1))

の2行にして、CurrentRegion範囲から 先頭行を除く範囲を r にセットするように
修正してみたらどうなりますか?

【65482】Re:他bookのデータをcomboboxのリストに...
質問  八家九僧陀  - 10/5/25(火) 17:25 -

引用なし
パスワード
   ▼kanabun さん:
早速のご回答ありがとうございます。

 Set r = workbooks("book2.xls").Worksheets("給与マスター").Range("A3").currentregion
 Set r = Intersect(r, r.Offset(1))
ご指摘のところを修正したところ、初回「インデックスが有効範囲ではありません」とメッセージがでたので、book2をopenしSheets"給与マスター"を非表示にして、book1、Sheets"入力票"をactiveにして、userformコード上で実行してところ、うまくできました。「できた!!!」と喜び、一旦保存、閉じてから、book1を開き、同じ手順でbook2も開き、userformコード上で再試行したところ「このプログラムは不正な処理をしたので強制終了します」とのメッセージがでて、excelを強制終了してしまいました。
一旦閉じては再度試行を試みましたが、同じ結果です。
book1にSheets"仮マスター"を追加して、workbooks("book2.xls").Worksheets("給与マスター").Range("A3").currentregion部分をコピーして、

 Set r = Worksheets("仮マスター").Range("A3").currentregion
 Set r = Intersect(r, r.Offset(1))
と修正して試してみましたが、強制終了されます。

当方excel97を使用しており、intersectに対応していなかったのか、あるいはbook2のopen、参照の仕方が不正だったのでしょうか??
解決策はありませんか???

【65483】Re:他bookのデータをcomboboxのリストに...
発言  kanabun  - 10/5/25(火) 17:46 -

引用なし
パスワード
   ▼八家九僧陀 さん:

>初回「インデックスが有効範囲ではありません」とメッセージがでたので、book2をopenし

インデックスが有効ではありません というエラーメッセージがでたときは
そういう名前のBook、あるいはシートが存在しない時に出るメッセージ
ですから、そこをチェックしてください。

>当方excel97を使用しており、intersectに対応していなかったのか、あるいはbook2のopen、参照の仕方が不正だったのでしょうか??

Excel97 でも Intersectメソッドはあると思います。
試しに
Application.I
と打ち込んで
候補にIntersect が出てくるのを確認してください。

全体については なぜ 強制終了するのか、残念ながらぼくには
分かりませんです。

【65484】Re:他bookのデータをcomboboxのリストに...
質問  八家九僧陀  - 10/5/25(火) 19:27 -

引用なし
パスワード
   >▼kanabun さん:

折角教えていただきながら、難癖のような感じになってしまい申し訳ありません。
いろいろ試していると、
 Set r = Worksheets("給与マスター").Range("A3").currentregion
 ’Set r = Intersect(r, r.Offset(1)) ←このコードだけ「’」で無効とすると、項目は表示され選択可能扱いになっていますが、combobox自体、VBA自体はうまくできました。
原因はわかりませんが、このコードでいきます。

そこで、主旨とは異なる質問となりますが、
 workbooks("book2.xls").Worksheets("給与マスター").Range("A3").currentregion
の範囲を、book2を非表示のままで、workbooks("book1.xls").Worksheets("仮マスター").range("A1")にコピーするVBAを教えてください。

なお、book1、book2は、同じフォルダ内にあります。

【65485】Re:他bookのデータをcomboboxのリストに...
発言  kanabun  - 10/5/25(火) 20:20 -

引用なし
パスワード
   ▼八家九僧陀 さん:

>そこで、主旨とは異なる質問となりますが、
> workbooks("book2.xls").Worksheets("給与マスター").Range("A3").currentregion
>の範囲を、book2を非表示のままで、workbooks("book1.xls").Worksheets("仮マスター").range("A1")にコピーするVBAを教えてください。
>
>なお、book1、book2は、同じフォルダ内にあります。

「非表示」のシートは、Select はできなけれど、Copyは普通にできますよ

それとも「非表示」というのは 「開かないで」ということばと同じ意味で
使っておられるのでしょうか?
もしそういう意味なら、ぼくは良い方法を知りません。
個人的には、素直に開いて範囲をコピーすれば済むことだとおもいますけど。


2881 / 13646 ツリー ←次へ | 前へ→
ページ:  ┃  記事番号:
2610219
(SS)C-BOARD v3.8 is Free