|
▼β さん:
おはようございます。
返信遅くなり、申し訳御座いません。
早速ですが、
まず、
>ActiveCell や Selection や ActiveSheet や ActiveWorkbook を前提にした
>コードは極力避けることが推奨されます。
>ActiveSheetが本来のものとは異なっていたり、そんなことが往々にして発生し、
>とんでもない障害になる可能性があります。
とのことですが、
Sheets("Sheet3").Cells(ActiveCell.Row, 1).Select
のことを仰ってるでしょうか?
その場合、別件ですがご相談させて頂きたいです。。。
先日、データベースとして使用している元ブックは、
各データを行で一つのグループに分けていると説明したと思いますが、
元ブックのSheet構成として、
Sheet1:フォーム呼出ボタンのみ(sheet表示)
Sheet2:個人データ登録用シート(非表示)
Sheet3:(各個人データ)データシート1(非表示)
Sheet4:(各個人データ)データシート2(非表示)
としており、
操作(登録/更新/削除)は全て、フォーム(個人データ)上で行っております。
フォーム(個人データ)上に、データシート1&2フォーム呼出のコマンドボタンを
設置しており、
フォーム(個人データ)より別フォームを立ち上げて、データを登録
する様にしております。
Sheet2
A B C D ・・・
1 名前 年齢 住所 電話番号 ・・・
2 田中 30 ・・・
3 佐藤 40 ・・・
4 小林 50 ・・・
Sheet3
A B C D E F G H
1 依頼日1 受付1 対応1 内容1 依頼2 受付2 対応2 内容2・・・
2 1/1 山田 ・・・
3 2/1 富樫 ・・・
4 3/1 葉山 ・・・
Sheet4
A B C D E F G H
1 依頼日51 受付51 対応51 内容51 依頼52 受付52 対応52 内容52・・・
2 5/1 富樫 ・・・
3 6/1 葉山 ・・・
4 7/1 山田 ・・・
Sheet3の連番でSheet4に続きます。
どのSheetも2行目は、田中のデータとなり、3行目は、佐藤のデータとなります。
やっと本題ですが、
Sheet2の氏名位置を基に、各シートのデータ管理を行っているのですが、
Dim 氏名 As Range
Dim AAA As String
Set 氏名 = Worksheets("Sheet2").Cells(ActiveCell.Row, 1)
AAA = 氏名.Address(False, False)
頻繁に、ActiveCellなど使用してますので、
現状の管理方法では、とんでもない障害が起こりえるでしょうか??
次に、ご提示頂いたコードについてですが、
SampleAで動作確認したところ、
"Sheet3をアクティブにしてから実行して下さい"
と言われてしまいました。
アクティブになるように試してみましたが、ダメでした。
よってSampleBでも同様の現象が起こると思ったので、
SampleBを使って、
Windows(exiWB).Activate
Worksheets("Sheet3").Activate
Sheets("Sheet3").Cells(ActiveCell.Row, 1).Resize(, 4).Select
Selection.Copy
Windows(NewWB).Activate
Sheets("データ抽出").Range("B6").Resize(, 4).Select
Selection.PasteSpecial Paste:=xlValues
Windows(exiWB).Activate
Worksheets("Sheet3").Activate
Sheets("Sheet3").Cells(ActiveCell.Row, 5).Select
Selection.Copy
Windows(NewWB).Activate
Sheets("データ抽出").Range("H6").Select
Selection.PasteSpecial Paste:=xlValues
に改良してみました、
C〜E列の記載が無くなった分、早くなった気がしますがどうでしょうか?
宜しくお願い致します。
|
|