アプリ版:「スタンプのみでお礼する」機能のリリースについて

いろんなサイトの情報を見ながら作っていたのですがどうもうまくいかないのでアドバイスなど頂きたいです。
書き方もおかしいと思うのでこう記述するべきとかあったら教えてほしいです。

<やりたいこと>
ダイアログボックスより取り込みたいcsvを選択
選択したファイルのパスを一度テキストボックスに書きだす。

新規シートを作成してシート名を変更して
先ほどテキストボックスに書きだした情報を元に
CSVファイルのデータを新規作成したシートにコピーを張り付ける
呼び出したCSVファイルを閉じる

といったようにしたいのです。
できたら欲しい情報の入った列だけとりだしたかったのですが・・・。

現状記述してあるのは下記になります。
これだととりあえずコピーできてるみたいですが、呼び出したCSVファイルが閉じないのです。

Private Sub CommandButton1_Click()
Dim OpenFileName As Variant
OpenFileName = Application.GetOpenFilename("CSVファイル(*.csv),*.csv")
TextBox1.Value = OpenFileName

End Sub

Private Sub CommandButton2_Click()
Worksheets.Add After:=Worksheets("Sheet1"), Count:=1
ActiveSheet.Name = "テスト"

Workbooks.Open Filename:=TextBox1
ActiveSheet.Cells.Copy Destination:=ThisWorkbook.Sheets("テスト").Range("A1")
Workbooks(TextBox1).Close
End Sub

A 回答 (1件)

> Workbooks(TextBox1).Close



テキストボックスには CSV ファイルのフルパスが入っているのでは?
Workbooks(hoge)
hoge の部分に入れるのは、CSV ファイルのフルパスではなく、ブック名です。
ブック名は、そいつを開いたときに Excel のウィンドウ上部にあるタイトルバーに表示されている文字列です。(ウィンドウ メニューの中にも表示されます)
ただし、Windows のオプションで "登録された拡張子を表示しない" になっているかどうかでファイル名の表示のされ方が変わってくるので、ワークブック オブジェクトを使って書いてみました。

Private Sub CommandButton2_Click()
Dim newSheet As Worksheet
Set newSheet = ThisWorkbook.Worksheets.Add(After:=ThisWorkbook.Worksheets("Sheet1"), Count:=1)
newSheet.Name = "テスト"

Dim csvBook As Workbook
Set csvBook = Workbooks.Open(Filename:=TextBox1.Value)
csvBook.ActiveSheet.Cells.Copy Destination:=newSheet.Range("A1")
csvBook.Close

End Sub
    • good
    • 0
この回答へのお礼

ありがとうございます。
できました!

やはりブック名だけじゃないといけなかったんですね。
ファイル名が毎回違うのでどうすればいいのか分からずフルパス
いれてしまいました・・・。
勉強になります 本当にありがとうございました。

お礼日時:2009/09/15 13:51

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!