Excel VBA質問箱 IV

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

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


12730 / 13644 ツリー ←次へ | 前へ→

【8561】windowの再取得 めぐ 03/10/24(金) 9:57 質問
【8563】Re:windowの再取得 INA 03/10/24(金) 11:08 回答
【8564】Re:windowの再取得 つん 03/10/24(金) 11:14 発言
【8565】Re:windowの再取得 INA 03/10/24(金) 11:19 回答
【8566】Re:windowの再取得 つん 03/10/24(金) 11:33 発言
【8567】Re:windowの再取得 INA 03/10/24(金) 11:43 回答
【8573】すんませーん つん 03/10/24(金) 13:06 発言
【8568】Re:windowの再取得 めぐ 03/10/24(金) 11:47 質問
【8569】Re:windowの再取得 INA 03/10/24(金) 11:55 回答
【8574】Re:windowの再取得 めぐ 03/10/24(金) 13:31 質問
【8575】Re:windowの再取得 INA 03/10/24(金) 13:38 回答
【8587】Re:windowの再取得 めぐ 03/10/24(金) 16:33 質問
【8588】Re:windowの再取得 INA 03/10/24(金) 16:36 回答
【8589】Re:windowの再取得 めぐ 03/10/24(金) 16:51 質問
【8592】Re:windowの再取得 INA 03/10/24(金) 18:39 回答
【8611】Re:windowの再取得 めぐ 03/10/27(月) 9:51 質問
【8637】Re:windowの再取得 りん 03/10/27(月) 19:41 回答
【8681】Re:windowの再取得 めぐ 03/10/29(水) 11:19 質問
【8684】Re:windowの再取得 めぐ 03/10/29(水) 11:36 お礼
【8705】Re:windowの再取得 めぐ 03/10/29(水) 16:56 質問
【8812】Re:windowの再取得 りん 03/11/3(月) 23:20 回答
【8879】Re:windowの再取得 めぐ 03/11/7(金) 10:23 質問
【8955】Re:windowの再取得 りん 03/11/11(火) 19:23 回答

【8561】windowの再取得
質問  めぐ  - 03/10/24(金) 9:57 -

引用なし
パスワード
   初めに"301在庫.txt"ファイルはすでに開きっぱなしになっています。
他の処理をした後、また新たに"301在庫.txt"ファイルにカーソルをあて、
"301在庫.txt"ファイルの内容を"テスト用.xls"にコピーしています。
しかし、初めの行の

Windows("301在庫.txt").Activate

で【インデックスが有効範囲にありません】
とエラーがでてしまいます。
どのようにしたら下へ流れますでしょうか。

  Windows("301在庫.txt").Activate
  Sheets("301在庫").Copy Before:=Workbooks("テスト用.xls").Sheets(1)
  With ActiveWindow
    .Top = 59.5
    .Left = -4.25
  End With
  ActiveWindow.Close

【8563】Re:windowの再取得
回答  INA  - 03/10/24(金) 11:08 -

引用なし
パスワード
   >初めに"301在庫.txt"ファイルはすでに開きっぱなしになっています。
>Windows("301在庫.txt").Activate
おなじExcel内で開いてあれば、問題ないと思います。
あとはファイル名が間違っているくらいしか思いつかないですね。

【8564】Re:windowの再取得
発言  つん E-MAIL  - 03/10/24(金) 11:14 -

引用なし
パスワード
   こんにちは〜

INA さん、よこから失礼します。

>おなじExcel内で開いてあれば、問題ないと思います。
>あとはファイル名が間違っているくらいしか思いつかないですね。

私も、あれ?OKなはず・・・と思いましたが、
良く読めば、テキストファイルですね。
テキストファイルを、そういう風には扱えないんじゃないかな?
私も扱ったことがないので、適切な回答はできませんが、

OpenText メソッド というのを使えばいいのじゃないか?と思います。
ヘルプによると、

「テキスト ファイルを分析して読み込みます。テキスト ファイルを 1 枚のシートとして、それを含む新しいブックを開きます。」

ちゅーことです。
出来た新しいブックをコピーしたらどうでしょう?
ヘルプを一度読んでみてください。

もう少し待ってたら、ちゃんとしたレスが付くかもしんないけど・・・
とりあえず〜

【8565】Re:windowの再取得
回答  INA  - 03/10/24(金) 11:19 -

引用なし
パスワード
   つん さん
こんにちは。

>テキストファイルを、そういう風には扱えないんじゃないかな?
私も判断できなかったので、EXCELでtxtファイルを開いて試したら
WotkBooks("sample.txt").activate
Windows("sample.txt").activate
で、実行することが出来ました。

なのでファイル名の違いか、excelが2個起動しているとか
が原因ではないかと・・

【8566】Re:windowの再取得
発言  つん E-MAIL  - 03/10/24(金) 11:33 -

引用なし
パスワード
   どもども

>私も判断できなかったので、EXCELでtxtファイルを開いて試したら
あ、そういうことだったのですね。
メモ帳等で、テキストファイルを開いて、ということかと思いました。
で、私もやってみました。

でも、確かに、

Workbooks("sample.txt").activate

では、ちゃんとアクティブになりましたが、

Windows("sample.txt").activate

こちらは、エラー(インデックスが〜)が出てしまいましたが・・・
エクセルの2重起動や、ファイル名の間違い(コピペしたので)はないと思います。
なんでかな?
なにか他の条件が違ってるのかしらん?
簡単なミスだったらごめんなさい。
たぶんないと思うけど・・・

【8567】Re:windowの再取得
回答  INA  - 03/10/24(金) 11:43 -

引用なし
パスワード
   つん さん
>Workbooks("sample.txt").activate
>では、ちゃんとアクティブになりましたが、
>Windows("sample.txt").activate
>こちらは、エラー(インデックスが〜)が出てしまいましたが・・・
>エクセルの2重起動や、ファイル名の間違い(コピペしたので)はないと思います。
>なんでかな?

なんでしょうね?(@_@)?
基本的に
Workbooks("sample.txt").activate = Windows("sample.txt").activate
は、同じ意味なのに・・

でも、つん さんの検証のおかげで、めぐさんも
>Workbooks("sample.txt").activate
を使えば、解決できるかもしれませんね。

ちなみに私の環境は、Win98se ,Excel2000SR-1 です。

【8568】Re:windowの再取得
質問  めぐ  - 03/10/24(金) 11:47 -

引用なし
パスワード
   INAさん、つんさんありがとうございます。
テキストファイルは3種類ありまして、最初にテキストファイルはエクセルに読み込ませてすべて開きっぱなしにしています。
その3種類のそれぞれのファイルを、"テスト用.xls"というファイルにシートのコピーで
移しています。
INAさんがおっしゃっているように、これってexcelが2個起動してるって事なんですか
ね。

>>テキストファイルを、そういう風には扱えないんじゃないかな?
>私も判断できなかったので、EXCELでtxtファイルを開いて試したら
>WotkBooks("sample.txt").activate
>Windows("sample.txt").activate

やってみたのですが、同じエラーで止まってしまいました。
どーしたら良いのでしょう。。。。
すっごい初心者なのでよろしくお願い致します。

▼INA さん:
>つん さん
>こんにちは。
>
>>テキストファイルを、そういう風には扱えないんじゃないかな?
>私も判断できなかったので、EXCELでtxtファイルを開いて試したら
>WotkBooks("sample.txt").activate
>Windows("sample.txt").activate
>で、実行することが出来ました。
>
>なのでファイル名の違いか、excelが2個起動しているとか
>が原因ではないかと・・

【8569】Re:windowの再取得
回答  INA  - 03/10/24(金) 11:55 -

引用なし
パスワード
   >INAさんがおっしゃっているように、
>これってexcelが2個起動してるって事なんですかね。
EXCELのアプリのウィンドウ内に開かれているかどうかです。
起動方法や画面の状況を見ないと分からないですね。
EXCELのアプリのウィンドウ内で、[ウィンドウ][整列]で
各ブックのウィンドウが同時に表示されれば、1個のexcelなので、
問題ないと思います。


>私も判断できなかったので、EXCELでtxtファイルを開いて試したら
>WotkBooks("sample.txt").activate
これで動きませんか?
そうなると、つんさんの状況とも違ってくるな・・

【8573】すんませーん
発言  つん E-MAIL  - 03/10/24(金) 13:06 -

引用なし
パスワード
   INA さん

>Workbooks("sample.txt").activate = Windows("sample.txt").activate
>は、同じ意味なのに・・

すんません・・・・
今、もう一度やってみた出来ました(>_<)
さきほどのが何が悪かったのかさっぱわやです(@_@)

めぐさん、紛らわしいレスつけてもーて、すんませんでした。

【8574】Re:windowの再取得
質問  めぐ  - 03/10/24(金) 13:31 -

引用なし
パスワード
   丁寧なご説明で助かってしまいます。
各ブックのウィンドウが同時に表示されましたので、1個のexcelのようです。
やってみたのですが、次は2行目でエラーがでてしまいました。
どーしてなんでしょう(≧×≦)。
お忙しいとは思いますが、またよろしくお願い致します。

Workbooks("301在庫.txt").Activate
 Worksheets("301在庫").Copy Before:=Workbooks("テスト用.xls").Sheets(1)
  With ActiveWindow
    .Top = 59.5
    .Left = -4.25
  End With
  ActiveWindow.Close

【8575】Re:windowの再取得
回答  INA  - 03/10/24(金) 13:38 -

引用なし
パスワード
   >各ブックのウィンドウが同時に表示されましたので、1個のexcelのようです。
>やってみたのですが、次は2行目でエラーがでてしまいました。
>Workbooks("301在庫.txt").Activate
> Worksheets("301在庫").Copy Before:=Workbooks("テスト用.xls").Sheets(1)
>  With ActiveWindow
>    .Top = 59.5
>    .Left = -4.25
>  End With
>  ActiveWindow.Close

ひとまず、Activateは解決したようですね。
Worksheets("301在庫").Copy
 ↓
sheets("301在庫").Copy Before:=Workbooks("テスト用.xls").Sheets(1)
で、どうでしょうか?

もしダメだったらマクロの自動記録を試して下さい。
この内容なら自動記録が参考になると思います。

【8587】Re:windowの再取得
質問  めぐ  - 03/10/24(金) 16:33 -

引用なし
パスワード
   INAさん、度々ありがとうございました。
自動記録で試してみましたら、確かに

>sheets("301在庫").Copy Before:=Workbooks("テスト用.xls").Sheets(1)

の表示になりました。それでですね・・・
最初に開くファイルは"テスト用.xls"というファイルを開くんです。
そこからマクロを動かすと、思ってるように動くんですが、
"テスト用.xls"ファイルを開いたと同時に登録したマクロを自動起動しようと
思いまして、ThisWorkbookに

private sub workbook_open()
も入れ、その後にプログラムも入れたのです。
それで自動起動するとやはり

>sheets("301在庫").Copy Before:=Workbooks("テスト用.xls").Sheets(1)

で止まってしまうんです。
自動起動は無理なんでしょうか。。。。よろしくお願いします。

【8588】Re:windowの再取得
回答  INA  - 03/10/24(金) 16:36 -

引用なし
パスワード
   >最初に開くファイルは"テスト用.xls"というファイルを開くんです。
>そこからマクロを動かすと、思ってるように動くんですが、

sheets("301在庫").Copy Before:=Workbooks("テスト用.xls").Sheets(1)

sheets("301在庫").Copy Before:=ThisWorkbook.Sheets(1)

で試してみて下さい。

【8589】Re:windowの再取得
質問  めぐ  - 03/10/24(金) 16:51 -

引用なし
パスワード
   INAさん、何度もごめんなさい。
このようにやってみたのですが無理でした。。。
やはり、普通にマクロを動かすのが無難なのでしょうか。。。。。。

Workbooks("301在庫.txt").Activate
 Sheets("301在庫").Copy before:=ThisWorkbook.Sheets(1)

【8592】Re:windowの再取得
回答  INA  - 03/10/24(金) 18:39 -

引用なし
パスワード
   >やはり、普通にマクロを動かすのが無難なのでしょうか。。。。。。
そんなことはないと思います。
ところでExcelとwindowsのバージョンは何でしょうか?

使用目的をまとめてみましょう。

1.マクロブック
  テスト用.xls

2.マクロの目的
  3個のテキストファイルをテスト用.xlsの各々別シートにコピーする。

  対象となるテキストファイルは、どのように指定するか?
  (コード中にファイル名を記述?ダイアログで指定?)

  テキストファイルは、あらかじめ開かれているようだが、
  マクロでテキストファイルを開いたり、読み込んだりしてはダメなのか?

  3個のテキストファイルの名前が決まっていたら教えて下さい。

具体的な使用目的からマクロの構成を考え直してみたいと思います。  

【8611】Re:windowの再取得
質問  めぐ  - 03/10/27(月) 9:51 -

引用なし
パスワード
   INAさん、度々おはようございます。
Excelは2000
windowsは95
です。

マクロブック テスト用.xls

テキストファイルの名前
【301在庫.txt】
【センター別在庫】
【棚在庫】

です。
行き詰まりっぱなしです(≧×≦)。
一応、登録したマクロも載せてみました。。
お時間がありましたら助けてください。
毎回ごめんなさい。


Sub Macro2()
'
' Macro2 Macro
' マクロ記録日 : 2003/10/23 ユーザー名 :
'
  Workbooks.OpenText Filename:="D:\DATA\301在庫.txt", StartRow:=1, _
    DataType:=xlDelimited, TextQualifier:=xlDoubleQuote, ConsecutiveDelimiter _
    :=False, Tab:=True, Semicolon:=False, Comma:=True, Space:=False, _
    Other:=False, FieldInfo:=Array(Array(1, 2), Array(2, 2), Array(3, 2), Array(4, 2), _
    Array(5, 1), Array(6, 1), Array(7, 1), Array(8, 1), Array(9, 1), Array(10, 1), Array(11, 1), _
    Array(12, 1), Array(13, 1), Array(14, 1), Array(15, 1), Array(16, 1), Array(17, 1), Array( _
    18, 1), Array(19, 1), Array(20, 1), Array(21, 1), Array(22, 1), Array(23, 1), Array(24, 1), _
    Array(25, 1), Array(26, 1), Array(27, 2))
  Selection.End(xlDown).Select
  Range("A1:AA673").Select
  Range("A673").Activate
  Selection.Borders(xlDiagonalDown).LineStyle = xlNone
  Selection.Borders(xlDiagonalUp).LineStyle = xlNone
  With Selection.Borders(xlEdgeLeft)
    .LineStyle = xlContinuous
    .Weight = xlThin
    .ColorIndex = xlAutomatic
  End With
  With Selection.Borders(xlEdgeTop)
    .LineStyle = xlContinuous
    .Weight = xlThin
    .ColorIndex = xlAutomatic
  End With
  With Selection.Borders(xlEdgeBottom)
    .LineStyle = xlContinuous
    .Weight = xlThin
    .ColorIndex = xlAutomatic
  End With
  With Selection.Borders(xlEdgeRight)
    .LineStyle = xlContinuous
    .Weight = xlThin
    .ColorIndex = xlAutomatic
  End With
  With Selection.Borders(xlInsideVertical)
    .LineStyle = xlContinuous
    .Weight = xlThin
    .ColorIndex = xlAutomatic
  End With
  With Selection.Borders(xlInsideHorizontal)
    .LineStyle = xlContinuous
    .Weight = xlThin
    .ColorIndex = xlAutomatic
  End With
  Selection.End(xlUp).Select
  Rows("1:8").Select
  Selection.Insert Shift:=xlDown
  Range("D1:AA9").Select
  Selection.NumberFormatLocal = "@"
  Workbooks.Open Filename:="D:\DATA\サイズ一覧.xls"
  Range("B2:W9").Select
  Selection.Copy
  ActiveWindow.WindowState = xlMinimized
  With ActiveWindow
    .Top = 4
    .Left = 8.5
  End With
  Range("D2").Select
  ActiveSheet.Paste
  Columns("A:A").EntireColumn.AutoFit
  Columns("B:B").EntireColumn.AutoFit
  Columns("C:C").EntireColumn.AutoFit
  Columns("D:D").EntireColumn.AutoFit
  Range("E10").Select
  ActiveWindow.FreezePanes = True
  With ActiveWindow
    .Top = 62.5
    .Left = 13
  End With
  Workbooks.OpenText Filename:="D:\DATA\センター別在庫.txt", StartRow:=1, _
    DataType:=xlDelimited, TextQualifier:=xlDoubleQuote, ConsecutiveDelimiter _
    :=False, Tab:=True, Semicolon:=False, Comma:=True, Space:=False, _
    Other:=False, FieldInfo:=Array(Array(1, 2), Array(2, 2), Array(3, 2), Array(4, 2), _
    Array(5, 1), Array(6, 1), Array(7, 1))
  Selection.End(xlDown).Select
  Range("A1:G9550").Select
  Range("A9550").Activate
  Application.CutCopyMode = False
  Selection.Borders(xlDiagonalDown).LineStyle = xlNone
  Selection.Borders(xlDiagonalUp).LineStyle = xlNone
  With Selection.Borders(xlEdgeLeft)
    .LineStyle = xlContinuous
    .Weight = xlThin
    .ColorIndex = xlAutomatic
  End With
  With Selection.Borders(xlEdgeTop)
    .LineStyle = xlContinuous
    .Weight = xlThin
    .ColorIndex = xlAutomatic
  End With
  With Selection.Borders(xlEdgeBottom)
    .LineStyle = xlContinuous
    .Weight = xlThin
    .ColorIndex = xlAutomatic
  End With
  With Selection.Borders(xlEdgeRight)
    .LineStyle = xlContinuous
    .Weight = xlThin
    .ColorIndex = xlAutomatic
  End With
  With Selection.Borders(xlInsideVertical)
    .LineStyle = xlContinuous
    .Weight = xlThin
    .ColorIndex = xlAutomatic
  End With
  With Selection.Borders(xlInsideHorizontal)
    .LineStyle = xlContinuous
    .Weight = xlThin
    .ColorIndex = xlAutomatic
  End With
  Selection.End(xlUp).Select
  Columns("A:A").EntireColumn.AutoFit
  Columns("B:B").EntireColumn.AutoFit
  Columns("C:C").EntireColumn.AutoFit
  Columns("D:D").EntireColumn.AutoFit
  Workbooks.OpenText Filename:="D:\DATA\棚在庫.txt", StartRow:=1, _
    DataType:=xlDelimited, TextQualifier:=xlDoubleQuote, ConsecutiveDelimiter _
    :=False, Tab:=True, Semicolon:=False, Comma:=True, Space:=False, _
    Other:=False, FieldInfo:=Array(Array(1, 2), Array(2, 2), Array(3, 2), Array(4, 2), _
    Array(5, 1), Array(6, 1), Array(7, 1), Array(8, 2))
  Selection.End(xlDown).Select
  Range("A1:H7809").Select
  Range("A7809").Activate
  Selection.Borders(xlDiagonalDown).LineStyle = xlNone
  Selection.Borders(xlDiagonalUp).LineStyle = xlNone
  With Selection.Borders(xlEdgeLeft)
    .LineStyle = xlContinuous
    .Weight = xlThin
    .ColorIndex = xlAutomatic
  End With
  With Selection.Borders(xlEdgeTop)
    .LineStyle = xlContinuous
    .Weight = xlThin
    .ColorIndex = xlAutomatic
  End With
  With Selection.Borders(xlEdgeBottom)
    .LineStyle = xlContinuous
    .Weight = xlThin
    .ColorIndex = xlAutomatic
  End With
  With Selection.Borders(xlEdgeRight)
    .LineStyle = xlContinuous
    .Weight = xlThin
    .ColorIndex = xlAutomatic
  End With
  With Selection.Borders(xlInsideVertical)
    .LineStyle = xlContinuous
    .Weight = xlThin
    .ColorIndex = xlAutomatic
  End With
  With Selection.Borders(xlInsideHorizontal)
    .LineStyle = xlContinuous
    .Weight = xlThin
    .ColorIndex = xlAutomatic
  End With
  Selection.End(xlUp).Select
  Columns("A:A").EntireColumn.AutoFit
  Columns("B:B").EntireColumn.AutoFit
  Columns("C:C").EntireColumn.AutoFit
  Columns("D:D").EntireColumn.AutoFit
  Columns("H:H").EntireColumn.AutoFit
  Windows("テスト用.xls").Activate
  Sheets("Sheet1").Select
  With ActiveWindow
    .Top = 178.75
    .Left = 25.75
  End With
  Windows("301在庫.txt").Activate
  Sheets("301在庫").Copy before:=Workbooks("テスト用.xls").Sheets(1)
  Windows("301在庫.txt").Activate
  With ActiveWindow
    .Top = 59.5
    .Left = -4.25
  End With
  ActiveWindow.Close
  Windows("棚在庫.txt").Activate
  Sheets("棚在庫").Copy before:=Workbooks("テスト用.xls").Sheets(2)
  With ActiveWindow
    .Top = 144.25
    .Left = 18.25
  End With
  Windows("棚在庫.txt").Activate
  ActiveWindow.Close
  Windows("センター別在庫.txt").Activate
  Sheets("センター別在庫").Copy before:=Workbooks("テスト用.xls").Sheets(3)
  Windows("センター別在庫.txt").Activate
  ActiveWindow.Close
  With ActiveWindow
    .Top = 4.75
    .Left = 2.5
  End With
  Windows("サイズ一覧.xls").Activate
  ActiveWindow.Close
  Workbooks.OpenText Filename:="D:\DATA\301在庫.xls"
  Windows("テスト用.xls").Activate
  Sheets("301在庫").Copy before:=Workbooks("301在庫.xls").Sheets(1)
  With ActiveWindow
    .Top = 59.5
    .Left = -4.25
  End With
  Windows("テスト用.xls").Activate
  Sheets("棚在庫").Copy before:=Workbooks("301在庫.xls").Sheets(2)
  With ActiveWindow
    .Top = 144.25
    .Left = 18.25
  End With
  Windows("テスト用.xls").Activate
  Sheets("センター別在庫").Copy before:=Workbooks("301在庫.xls").Sheets(3)
  With ActiveWindow
    .Top = 4.75
    .Left = 2.5
  End With
  Windows("301在庫.xls").Activate
  ActiveWindow.Close
  Windows("テスト用.xls").Activate
  ActiveWindow.Close
  
  End Sub

【8637】Re:windowの再取得
回答  りん E-MAIL  - 03/10/27(月) 19:41 -

引用なし
パスワード
   めぐ さん、こんばんわ。

ちょっと短くしてみました。
変数や配列に入れて取得しておけば見失わなくてすみますよ。

Excelは2000 , windowsはXP です。

>マクロブック テスト用.xls
>テキストファイルの名前
>【301在庫.txt】
>【センター別在庫】
>【棚在庫】


Sub Macro2()
'
' Macro2 Macro
' マクロ記録日 : 2003/10/23 ユーザー名 :
'
  Dim ws(1 To 3) As Worksheet, II As Integer
  Dim wb1 As Workbook, wb2 As Workbook
  '
  Workbooks.OpenText Filename:="D:\DATA\301在庫.txt", _
   StartRow:=1, DataType:=xlDelimited, _
   TextQualifier:=xlDoubleQuote, ConsecutiveDelimiter:=False, _
   Tab:=True, Semicolon:=False, Comma:=True, Space:=False, _
   Other:=False, FieldInfo:=Array(Array(1, 2), Array(2, 2), _
   Array(3, 2), Array(4, 2), Array(5, 1), Array(6, 1), _
   Array(7, 1), Array(8, 1), Array(9, 1), Array(10, 1), _
   Array(11, 1), Array(12, 1), Array(13, 1), Array(14, 1), _
   Array(15, 1), Array(16, 1), Array(17, 1), Array(18, 1), _
   Array(19, 1), Array(20, 1), Array(21, 1), Array(22, 1), _
   Array(23, 1), Array(24, 1), Array(25, 1), Array(26, 1), _
   Array(27, 2))
  Set ws(1) = ActiveSheet '301在庫.txt
  '
  With ws(1)
   With .UsedRange.Borders
     .LineStyle = xlContinuous
     .Weight = xlThin
     .ColorIndex = xlAutomatic
   End With
   .Rows("1:8").Insert Shift:=xlDown
   .Range("D1:AA9").NumberFormatLocal = "@"
  End With
  '↓ここがよくわからないので保留(ペースト先は301在庫.txt?)
  Set wb1 = Workbooks.Open(Filename:="D:\DATA\サイズ一覧.xls")
  Range("B2:W9").Copy
  ActiveWindow.WindowState = xlMinimized
  With ActiveWindow
    .Top = 4
    .Left = 8.5
  End With
  Range("D2").Select
  ActiveSheet.Paste
  '
  Columns("A:D").AutoFit
  Range("E10").Select
  ActiveWindow.FreezePanes = True
  '↑ここまでよくわからない。
  Workbooks.OpenText Filename:="D:\DATA\センター別在庫.txt", _
   StartRow:=1, DataType:=xlDelimited, _
   TextQualifier:=xlDoubleQuote, ConsecutiveDelimiter _
   :=False, Tab:=True, Semicolon:=False, Comma:=True, _
   Space:=False, Other:=False, FieldInfo:=Array(Array(1, 2), _
   Array(2, 2), Array(3, 2), Array(4, 2), Array(5, 1), _
   Array(6, 1), Array(7, 1))
  Set ws(2) = ActiveSheet 'センター別在庫.txt
  With ws(2)
   With .UsedRange.Borders
     .LineStyle = xlContinuous
     .Weight = xlThin
     .ColorIndex = xlAutomatic
   End With
   .Columns("A:D").AutoFit
  End With
  '
  Workbooks.OpenText Filename:="D:\DATA\棚在庫.txt", _
   StartRow:=1, DataType:=xlDelimited, TextQualifier:= _
   xlDoubleQuote, ConsecutiveDelimiter:=False, Tab:=True, _
   Semicolon:=False, Comma:=True, Space:=False, Other:=False, _
   FieldInfo:=Array(Array(1, 2), Array(2, 2), Array(3, 2), _
   Array(4, 2), Array(5, 1), Array(6, 1), Array(7, 1), _
   Array(8, 2))
  Set ws(3) = ActiveSheet '棚在庫.txt
  '
  With ws(3)
   With .UsedRange.Borders
     .LineStyle = xlContinuous
     .Weight = xlThin
     .ColorIndex = xlAutomatic
   End With
   .Columns("A:D").AutoFit
   .Columns("H").AutoFit
  End With
  '
  Set wb2 = Workbooks("テスト用.xls") 'いつ開いたの?
  Set wb3 = Workbooks.Open(Filename:="D:\DATA\301在庫.xls")
  '
  For II = 1 To 3
   ws(II).Copy before:=wb2.Sheets(II)
   ws(II).Copy before:=wb3.Sheets(II)
   With ws(II).Parent
     .Saved = True
     .Close savechanges:=False
   End With
  Next
  '
  '保存していいのかな?
  '
  'With wb2 'テスト用.xls
  '  .Save
  '  .Close savechanges:=False
  'End With
  'With wb3 '301在庫.xls
  '  .Save
  '  .Close savechanges:=False
  'End With
  '
  Erase ws
  Set wb1 = Nothing: Set wb2 = Nothing: Set wb3 = Nothing
End Sub

エラーになりますか?

【8681】Re:windowの再取得
質問  めぐ  - 03/10/29(水) 11:19 -

引用なし
パスワード
   りんさん、こんにちは。
ご丁寧にありがとうございました。


>  Workbooks.OpenText Filename:="D:\DATA\301在庫.txt", _

やってみたのですが、構文エラーで上記の部分で止まってしまいます。
ファイル名もあっているのですが、どーしてでしょう。。。。。。。

【8684】Re:windowの再取得
お礼  めぐ  - 03/10/29(水) 11:36 -

引用なし
パスワード
   りんさん、ありがとうございました。
動きました。本当に助かったと同時に、すごいなぁ〜。っと感心するばかりです。
また何かありましたらよろしくお願いいたします。
お忙しいところありがとうございました。

【8705】Re:windowの再取得
質問  めぐ  - 03/10/29(水) 16:56 -

引用なし
パスワード
   りんさん、こんにちは。
形がだんだんと出来てきました。
下記のりんさんのご質問に答えますと。。。。

テスト用.xlsのファイルを開いたと同時にマクロを起動させるようにしています。
Private Sub Workbook_Open()を使って・・

そしてサイズ一覧.xlsのペースト先は301在庫.txtです。
そのあと、【301在庫.txt】【センター在庫.txt】【棚在庫.txt】を
テスト用.xlsにシート別にペーストします。
(ちなみにテスト用.xlsのシート名は、301在庫、センター別在庫、棚在庫です。)
そしてテスト用.xlsに貼り付けたものを、そのまま【301在庫.xls】
にコピー、ペーストします。
昔の私のマクロですと、普通に思ってるように流れるのですが、
テスト用.xlsから自動起動するとどうもとまってしまって。。。
でもりんさんのやりかたですと、自動起動してもとまりません。すごい!
ただコピー、ペースト方法がちょっとわからないのですが。。。
お時間がありましたらよろしくお願い致します。

>>マクロブック テスト用.xls
>>テキストファイルの名前
>>【301在庫.txt】
>>【センター別在庫】
>>【棚在庫】
>
>
>Sub Macro2()
>'
>' Macro2 Macro
>' マクロ記録日 : 2003/10/23 ユーザー名 :
>'
>  Dim ws(1 To 3) As Worksheet, II As Integer
>  Dim wb1 As Workbook, wb2 As Workbook
>  '
>  Workbooks.OpenText Filename:="D:\DATA\301在庫.txt", _
>   StartRow:=1, DataType:=xlDelimited, _
>   TextQualifier:=xlDoubleQuote, ConsecutiveDelimiter:=False, _
>   Tab:=True, Semicolon:=False, Comma:=True, Space:=False, _
>   Other:=False, FieldInfo:=Array(Array(1, 2), Array(2, 2), _
>   Array(3, 2), Array(4, 2), Array(5, 1), Array(6, 1), _
>   Array(7, 1), Array(8, 1), Array(9, 1), Array(10, 1), _
>   Array(11, 1), Array(12, 1), Array(13, 1), Array(14, 1), _
>   Array(15, 1), Array(16, 1), Array(17, 1), Array(18, 1), _
>   Array(19, 1), Array(20, 1), Array(21, 1), Array(22, 1), _
>   Array(23, 1), Array(24, 1), Array(25, 1), Array(26, 1), _
>   Array(27, 2))
>  Set ws(1) = ActiveSheet '301在庫.txt
>  '
>  With ws(1)
>   With .UsedRange.Borders
>     .LineStyle = xlContinuous
>     .Weight = xlThin
>     .ColorIndex = xlAutomatic
>   End With
>   .Rows("1:8").Insert Shift:=xlDown
>   .Range("D1:AA9").NumberFormatLocal = "@"
>  End With
>  '↓ここがよくわからないので保留(ペースト先は301在庫.txt?)
>  Set wb1 = Workbooks.Open(Filename:="D:\DATA\サイズ一覧.xls")
>  Range("B2:W9").Copy
>  ActiveWindow.WindowState = xlMinimized
>  With ActiveWindow
>    .Top = 4
>    .Left = 8.5
>  End With
>  Range("D2").Select
>  ActiveSheet.Paste
>  '
>  Columns("A:D").AutoFit
>  Range("E10").Select
>  ActiveWindow.FreezePanes = True
>  '↑ここまでよくわからない。
>  Workbooks.OpenText Filename:="D:\DATA\センター別在庫.txt", _
>   StartRow:=1, DataType:=xlDelimited, _
>   TextQualifier:=xlDoubleQuote, ConsecutiveDelimiter _
>   :=False, Tab:=True, Semicolon:=False, Comma:=True, _
>   Space:=False, Other:=False, FieldInfo:=Array(Array(1, 2), _
>   Array(2, 2), Array(3, 2), Array(4, 2), Array(5, 1), _
>   Array(6, 1), Array(7, 1))
>  Set ws(2) = ActiveSheet 'センター別在庫.txt
>  With ws(2)
>   With .UsedRange.Borders
>     .LineStyle = xlContinuous
>     .Weight = xlThin
>     .ColorIndex = xlAutomatic
>   End With
>   .Columns("A:D").AutoFit
>  End With
>  '
>  Workbooks.OpenText Filename:="D:\DATA\棚在庫.txt", _
>   StartRow:=1, DataType:=xlDelimited, TextQualifier:= _
>   xlDoubleQuote, ConsecutiveDelimiter:=False, Tab:=True, _
>   Semicolon:=False, Comma:=True, Space:=False, Other:=False, _
>   FieldInfo:=Array(Array(1, 2), Array(2, 2), Array(3, 2), _
>   Array(4, 2), Array(5, 1), Array(6, 1), Array(7, 1), _
>   Array(8, 2))
>  Set ws(3) = ActiveSheet '棚在庫.txt
>  '
>  With ws(3)
>   With .UsedRange.Borders
>     .LineStyle = xlContinuous
>     .Weight = xlThin
>     .ColorIndex = xlAutomatic
>   End With
>   .Columns("A:D").AutoFit
>   .Columns("H").AutoFit
>  End With
>  '
>  Set wb2 = Workbooks("テスト用.xls") 'いつ開いたの?
>  Set wb3 = Workbooks.Open(Filename:="D:\DATA\301在庫.xls")
>  '
>  For II = 1 To 3
>   ws(II).Copy before:=wb2.Sheets(II)
>   ws(II).Copy before:=wb3.Sheets(II)
>   With ws(II).Parent
>     .Saved = True
>     .Close savechanges:=False
>   End With
>  Next
>  '
>  '保存していいのかな?
>  '
>  'With wb2 'テスト用.xls
>  '  .Save
>  '  .Close savechanges:=False
>  'End With
>  'With wb3 '301在庫.xls
>  '  .Save
>  '  .Close savechanges:=False
>  'End With
>  '
>  Erase ws
>  Set wb1 = Nothing: Set wb2 = Nothing: Set wb3 = Nothing
>End Sub
>
>エラーになりますか?

【8812】Re:windowの再取得
回答  りん E-MAIL  - 03/11/3(月) 23:20 -

引用なし
パスワード
   めぐ さん、こんばんわ。

>ただコピー、ペースト方法がちょっとわからないのですが。。。
>お時間がありましたらよろしくお願い致します。
シートのコピーということでしょうか。

  データシートが3つあるのでループは3回 
>>  For II = 1 To 3
    II番目のシートの前に、ws(II)にSetしたシートをコピーします。
>>   ws(II).Copy before:=wb2.Sheets(II)'テスト用.xlsにコピー
>>   ws(II).Copy before:=wb3.Sheets(II)'301在庫.xlsにコピー
    コピーのすんだシートを含むブック(SheetのParentはBook)を
    保存せずに閉じます
>>   With ws(II).Parent
>>     .Saved = True
>>     .Close savechanges:=False
>>   End With
    次のシートへ
>>  Next
 
 前もって配列に格納しておいたワークシートをSheetのCopyメソッドで、位置を指定してコピーするようにしています。
 テスト用.xlsを保存せずに閉じるならば、wb2にコピーする処理は省いていいです。

#前にこれを書いたときに、送信を押したらエラーでけられてしまって(泣)
 その後返事が遅くなってすみませんでした。

【8879】Re:windowの再取得
質問  めぐ  - 03/11/7(金) 10:23 -

引用なし
パスワード
   りんさんこんにちは。いつもご丁寧にありがとうございます。
以前頂きましたご返答で、下記の文章の【よくわからないので保留】という部分を
どのようにしたらよいか悩んでしまっています。
301在庫.txtの301在庫シートに8行挿入し、その行を文字列に置き換えます。
次にザイコ一覧.xlsにあるデータをコピーしまして、それを301在庫.txtの301在庫シートのD2からはりつけます。
この内容でいきたいのですが、どうも止まってしまいます。
どうように組んでいったらようのでしょうか。。。。


Sub Macro2()
'
' Macro2 Macro
' マクロ記録日 : 2003/10/23 ユーザー名 :
'
  Dim ws(1 To 3) As Worksheet, II As Integer
  Dim wb1 As Workbook, wb2 As Workbook
  '
  Workbooks.OpenText Filename:="D:\DATA\301在庫.txt", _
   StartRow:=1, DataType:=xlDelimited, _
   TextQualifier:=xlDoubleQuote, ConsecutiveDelimiter:=False, _
   Tab:=True, Semicolon:=False, Comma:=True, Space:=False, _
   Other:=False, FieldInfo:=Array(Array(1, 2), Array(2, 2), _
   Array(3, 2), Array(4, 2), Array(5, 1), Array(6, 1), _
   Array(7, 1), Array(8, 1), Array(9, 1), Array(10, 1), _
   Array(11, 1), Array(12, 1), Array(13, 1), Array(14, 1), _
   Array(15, 1), Array(16, 1), Array(17, 1), Array(18, 1), _
   Array(19, 1), Array(20, 1), Array(21, 1), Array(22, 1), _
   Array(23, 1), Array(24, 1), Array(25, 1), Array(26, 1), _
   Array(27, 2))
  Set ws(1) = ActiveSheet '301在庫.txt
  '
  With ws(1)
   With .UsedRange.Borders
     .LineStyle = xlContinuous
     .Weight = xlThin
     .ColorIndex = xlAutomatic
   End With
   .Rows("1:8").Insert Shift:=xlDown
   .Range("D1:AA9").NumberFormatLocal = "@"
  End With
  '↓ここがよくわからないので保留(ペースト先は301在庫.txt?)
  Set wb1 = Workbooks.Open(Filename:="D:\DATA\サイズ一覧.xls")
  Range("B2:W9").Copy
  ActiveWindow.WindowState = xlMinimized
  With ActiveWindow
    .Top = 4
    .Left = 8.5
  End With
  Range("D2").Select
  ActiveSheet.Paste
  '
  Columns("A:D").AutoFit
  Range("E10").Select
  ActiveWindow.FreezePanes = True
  '↑ここまでよくわからない。
  Workbooks.OpenText Filename:="D:\DATA\センター別在庫.txt", _
   StartRow:=1, DataType:=xlDelimited, _
   TextQualifier:=xlDoubleQuote, ConsecutiveDelimiter _
   :=False, Tab:=True, Semicolon:=False, Comma:=True, _
   Space:=False, Other:=False, FieldInfo:=Array(Array(1, 2), _
   Array(2, 2), Array(3, 2), Array(4, 2), Array(5, 1), _
   Array(6, 1), Array(7, 1))
  Set ws(2) = ActiveSheet 'センター別在庫.txt
  With ws(2)
   With .UsedRange.Borders
     .LineStyle = xlContinuous
     .Weight = xlThin
     .ColorIndex = xlAutomatic
   End With
   .Columns("A:D").AutoFit
  End With
  '
  Workbooks.OpenText Filename:="D:\DATA\棚在庫.txt", _
   StartRow:=1, DataType:=xlDelimited, TextQualifier:= _
   xlDoubleQuote, ConsecutiveDelimiter:=False, Tab:=True, _
   Semicolon:=False, Comma:=True, Space:=False, Other:=False, _
   FieldInfo:=Array(Array(1, 2), Array(2, 2), Array(3, 2), _
   Array(4, 2), Array(5, 1), Array(6, 1), Array(7, 1), _
   Array(8, 2))
  Set ws(3) = ActiveSheet '棚在庫.txt
  '
  With ws(3)
   With .UsedRange.Borders
     .LineStyle = xlContinuous
     .Weight = xlThin
     .ColorIndex = xlAutomatic
   End With
   .Columns("A:D").AutoFit
   .Columns("H").AutoFit
  End With
  '
  Set wb2 = Workbooks("テスト用.xls") 'いつ開いたの?
  Set wb3 = Workbooks.Open(Filename:="D:\DATA\301在庫.xls")
  '
  For II = 1 To 3
   ws(II).Copy before:=wb2.Sheets(II)
   ws(II).Copy before:=wb3.Sheets(II)
   With ws(II).Parent
     .Saved = True
     .Close savechanges:=False
   End With
  Next
  '
  '保存していいのかな?
  '
  'With wb2 'テスト用.xls
  '  .Save
  '  .Close savechanges:=False
  'End With
  'With wb3 '301在庫.xls
  '  .Save
  '  .Close savechanges:=False
  'End With
  '
  Erase ws
  Set wb1 = Nothing: Set wb2 = Nothing: Set wb3 = Nothing
End Sub

【8955】Re:windowの再取得
回答  りん E-MAIL  - 03/11/11(火) 19:23 -

引用なし
パスワード
   めぐ さん、こんばんわ。
遅くなってすみません。

>301在庫.txtの301在庫シートに8行挿入し、その行を文字列に置き換えます。
>次にザイコ一覧.xlsにあるデータをコピーしまして、それを301在庫.txtの301在庫シートのD2からはりつけます。

Active(Window,Sheet)やSelectにまかせてシートやブックを移動しながら処理すると、自分の意思と違うところに処理する可能性があるので、出来る限り処理対象のオブジェクトは明確にすることがエラー回避と処理速度向上の第一歩だと思います。

Sub Macro2()
'
' Macro2 Macro
' マクロ記録日 : 2003/10/23 ユーザー名 :
'
  Dim ws(1 To 3) As Worksheet, II As Integer
  Dim wb1 As Workbook, wb2 As Workbook
  '
  Workbooks.OpenText Filename:="D:\DATA\301在庫.txt", _
   StartRow:=1, DataType:=xlDelimited, _
   TextQualifier:=xlDoubleQuote, ConsecutiveDelimiter:=False, _
   Tab:=True, Semicolon:=False, Comma:=True, Space:=False, _
   Other:=False, FieldInfo:=Array(Array(1, 2), Array(2, 2), _
   Array(3, 2), Array(4, 2), Array(5, 1), Array(6, 1), _
   Array(7, 1), Array(8, 1), Array(9, 1), Array(10, 1), _
   Array(11, 1), Array(12, 1), Array(13, 1), Array(14, 1), _
   Array(15, 1), Array(16, 1), Array(17, 1), Array(18, 1), _
   Array(19, 1), Array(20, 1), Array(21, 1), Array(22, 1), _
   Array(23, 1), Array(24, 1), Array(25, 1), Array(26, 1), _
   Array(27, 2))
  Set ws(1) = ActiveSheet '301在庫.txt
  ActiveWindow.FreezePanes = True 'ウィンドウ枠の固定
  '
  With ws(1)
   With .UsedRange.Borders
     .LineStyle = xlContinuous
     .Weight = xlThin
     .ColorIndex = xlAutomatic
   End With
   .Rows("1:8").Insert Shift:=xlDown
   .Range("D1:AA9").NumberFormatLocal = "@"
  End With
  '
  Set wb1 = Workbooks.Open(Filename:="D:\DATA\サイズ一覧.xls")
  wb1.Worksheets(1).Range("B2:W9").Copy 'サイズ一覧.xlsの一つめのシートからコピー
  '301在庫.txtのD2にペースト
  With ws(1)
   .Range("D2").PasteSpecial Paste:=xlPasteValues
   .Columns("A:D").AutoFit
  End With
  Workbooks.OpenText Filename:="D:\DATA\センター別在庫.txt", _
   StartRow:=1, DataType:=xlDelimited, _
   TextQualifier:=xlDoubleQuote, ConsecutiveDelimiter:=False, _
   Tab:=True, Semicolon:=False, Comma:=True, Space:=False, _
   Other:=False, FieldInfo:=Array(Array(1, 2), Array(2, 2), _
   Array(3, 2), Array(4, 2), Array(5, 1), Array(6, 1), Array(7, 1))
  '
  Set ws(2) = ActiveSheet 'センター別在庫.txt
  With ws(2)
   With .UsedRange.Borders
     .LineStyle = xlContinuous
     .Weight = xlThin
     .ColorIndex = xlAutomatic
   End With
   .Columns("A:D").AutoFit
  End With
  '
  Workbooks.OpenText Filename:="D:\DATA\棚在庫.txt", _
   StartRow:=1, DataType:=xlDelimited, TextQualifier:= _
   xlDoubleQuote, ConsecutiveDelimiter:=False, Tab:=True, _
   Semicolon:=False, Comma:=True, Space:=False, Other:=False, _
   FieldInfo:=Array(Array(1, 2), Array(2, 2), Array(3, 2), _
   Array(4, 2), Array(5, 1), Array(6, 1), Array(7, 1), _
   Array(8, 2))
  Set ws(3) = ActiveSheet '棚在庫.txt
  '
  With ws(3)
   With .UsedRange.Borders
     .LineStyle = xlContinuous
     .Weight = xlThin
     .ColorIndex = xlAutomatic
   End With
   .Columns("A:D").AutoFit
   .Columns("H").AutoFit
  End With
  '
  Set wb3 = Workbooks.Open(Filename:="D:\DATA\301在庫.xls")
  '
  For II = 1 To 3
   ws(II).Copy before:=wb3.Sheets(II)
   With ws(II).Parent
     .Saved = True
     .Close savechanges:=False
   End With
  Next
  '
  '保存します
  With wb3 '301在庫.xls
    .Save
    .Close savechanges:=False
  End With
  '保存しません
  With wb2 'テスト用.xls
    .Saved = True
    .Close savechanges:=False
  End With
  '
  Erase ws
  Set wb1 = Nothing: Set wb2 = Nothing: Set wb3 = Nothing
End Sub

これでもエラーになりますか?

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