1年位使われた形跡のないExcel VBAの問い合わせに遭遇。
以前はうまくExcel取込みが出来ていたのだけど。
調査したところ、Worksheetsコレクションでインデックス番号指定で開いている、コピー元のデータのあるシートを開けていないようだ。
Dim wb As Workbook Dim ws As Worksheet Target = DesktopPath & InputExcel 'コピー元を、オープンする Set wb = Workbooks.Open(Target) Set ws = wb.Worksheets(1) ←ここ 'コピー元から、66行をコピーする ws.Range("1:66").Copy 'コピー先へ、値のみを貼り付ける ThisWorkbook.Worksheets(DATAIN).Activate Range("1:66").PasteSpecial Paste:=xlPasteValues Set ws = Nothing Set wb = Nothing '元のファイルを閉じる Application.DisplayAlerts = False Workbooks(InputExcel).Close SaveChanges:=False
(説明のために抜粋)
ここで、シート名をインデックス番号でなく"Sheet1"の固定名にすることで解決する。
Set ws = wb.Worksheets("Sheet1")
でもね。。。
過去うまくいったエクセルにデータだけを手作業でコピー&ペーストしたものを読み込ませると問題無くうまくいく。
エクセルのバージョンは、今も以前も「Microsoft Office Home and Business 2010」。
OSは以前は Windows XP Home Edition (Service Pack 3)、今は Windows 7 Professional (Service Pack 1)。
確かに環境に差があるけれど、この実行結果の差は理解できないなぁ…
結局、シート名を取得するようにした版で本番リリース。
固定名にすることは選ばなかった。
Dim wSN As String Set wb = Workbooks.Open(Target) wSN = ActiveSheet.Name Set ws = wb.Worksheets(wSN)
でも、なんでうまく動かなくなったのかなぁ〜
まぁ、いっかw