• 締切済み

2つのブックに各々複数のシートがあります。これをユーザーフォームのリストで選択したシート間のコピーをしたい

------------------------------------------------------------ Private Sub UserForm_Initialize() Dim lstFsheet As Worksheet 'コピー元シート名格納リスト Dim lstTsheet As Worksheet 'コピー先シート名格納リスト Dim txtFline As Integer 'コピー元行数格納項目 Dim txtTline As Integer 'コピー先行数格納項目 'コピー元シート名リスト 設定 frmCopyNaka.lstFsheet.AddItem "販売台帳11月" frmCopyNaka.lstFsheet.AddItem "販売台帳12月" 'コピー先シート名リスト 設定 frmCopyNaka.lstTsheet.AddItem "2009.11.9" frmCopyNaka.lstTsheet.AddItem "2009.11.13" frmCopyNaka.lstTsheet.AddItem "2009.12.3" End Sub ---------------------------------------------------------- Private Sub cmdCopy_Click() Dim Fsheet As Worksheet Dim Tsheet As Worksheet ' Set Fsheet = Workbooks("販売台帳.xls").Worksheet(lstFsheet) Set Tsheet = Workbooks("申込書.xls").Worksheet(lstTsheet) Tsheet.Cells(txtTline, 2) = Fsheet.Cells(txtFline, 3) ------------------------------------------------------------ という感じでうまくいくと思ったのですが、 Set Fsheet = Workbooks("販売台帳.xls").Worksheet(lstFsheet) の[worksheet(lstFsheet)]で[型が一致しない]のエラーになります。 シート名を変数として扱う事は出来ないのでしょうか? 基礎の勉強が不足しているのに、見よう見まねでやっているから こんな事になるんでしょうね… わかりやすい説明をお願いします。

みんなの回答

  • rivoisu
  • ベストアンサー率36% (97/264)
回答No.3

Dim lstFsheet As Worksheet lstFsheetははワークシート型ですね。 Worksheets(lstFsheet) この括弧の中は文字列型(シートの名前)または数値型(index)ですので Worksheets(lstFsheet.name) とすべきじゃないでしょうか。 lstFsheetはモジュール変数でいいのでしょうか? 他にも問題があるかもしれませんが ,

miyu03_001
質問者

お礼

ご回答ありがとうございます。 ワークシート型、モジュール変数…とか余り理解できていませんでした。 Worksheets(lstTsheet.List(lstTsheet.ListIndex)) 上記のように直したらうまくいきました。 ありがとうございました。

  • nattocurry
  • ベストアンサー率31% (587/1853)
回答No.2

ところで、販売台帳.xls は開いていますか? 質問文に書いてあるコードには、販売台帳.xls を開いているところが無いのですが。

miyu03_001
質問者

補足

ご回答ありがとうございます。 解決しました。 ありがとうございました。

  • nattocurry
  • ベストアンサー率31% (587/1853)
回答No.1

ちゃんと読んでいなくて、検証もしておらず、単なる勘ですが、 Worksheet(lstFsheet) じゃなくて Worksheets(lstFsheet) じゃないですかねぇ?

miyu03_001
質問者

補足

Worksheets(lstFsheet)でもだめでした。 実行時のエラーなので、たぶん[lstFsheet]が シート名と認識されていないと思うんですが、どうすれば良いのか…

関連するQ&A

  • エクセルのシートのコピーについて

    シートのコピーをVBAで行いたいのですが、エラーになってしまいます。 間違っている箇所が分からないのでご教授お願いします。 貼り付けというブックにマクロが組まれています。 ”データ”のブックにあるシート名が”貼り付けのブックのリスト”のシートに記載されています。 リストのシートに記載されているシートを貼り付けのブックにコピーしたいです。 よろしくお願いします。 Sub シートコピー() 行数 = 2 Do Until IsEmpty(Cells(行数, 3).Value) コピー元 = Workbooks("貼り付け.xls").Worksheet("リスト").Cells(行数, 3) Workbooks("データ.xls").Worksheet(コピー元).Copy After:=Workbooks("貼り付け.xls").Sheets(Workbooks("貼り付け.xls").Sheets.Count) 行数 = 行数 + 1 Loop End Sub

  • Excelマクロ 複数のシート検索・選択して新しいブックにコピー

    何方か、回答をお願いします。 下記のマクロは、任意のフォルダに有る全てのxlsファイルのシート名が”Data”のみ 新しいブックにコピー(シート名は、元のファイル名に変更)をしていくマクロですが、 条件が下記のように変更になりました。 シート名は、DataとAppend*(*は数字で1~99)(Appendの数は毎回ばらばらでAppend シートその物が無い場合も有ります。)を選択して新しいブックにコピー (元のシート名の前に元のファイル名を足して新しいシート名は”ファイル名Append2” こんな感じにしたいです。)したいのですがどの様なマクロを書けば良いのか教えて 下さい。 Sub test-xls版() Dim myPName As String Dim myKAKUCHOSI As String Dim myPATHNAME As String Dim myLName As String Dim wb As Workbook Dim wb_New As Workbook Dim N As Byte Dim ws As Worksheet Dim myFN As String myPName = Application.GetOpenFilename("測定データ(*.xls;*.csv),*.xls;*.csv") If myPName = "False" Then Exit Sub Application.ScreenUpdating = False Set wb_New = Workbooks.Add myKAKUCHOSI = Right(myPName, 4) myPATHNAME = CurDir myLName = Dir("") N = Len(myLName) myFN = Left(myLName, N - 4) Do While myLName <> "" Workbooks.OpenText Filename:=myPATHNAME & "\" & myLName, DataType:=xlDelimited, Tab:=True, Comma:=True, Space:=True N = Len(myLName) myFN = Left(myLName, N - 4) Sheets("Data").Select 'csvの場合無し Set wb = ActiveWorkbook wb.ActiveSheet.Copy after:=wb_New.Sheets(wb_New.Worksheets.Count) Worksheets("Data").Name = myFN 'csvの場合無し wb.Close savechanges:=False myLName = Dir() Loop Application.ScreenUpdating = True Exit Sub

  • VBで既存エクセルシートを新規ブックにコピー

    VB6,Excel2003です。 既存のエクセルシートを新規ブックにコピーする プログラムを作成してみましたが タスクバーに新規ブックのタスクバーボタンが2つできてしまいます。 どこが原因か教えてください。よろしくお願いします。 Private Sub Command1_Click() Dim xlsApp As Excel.Application Dim xlsBookTemp As Excel.Workbook 'コピー元ブック Dim xlsBookCopy As Excel.Workbook 'コピー先ブック Dim xlsSheetTemp As Excel.Worksheet 'コピー元シート Dim xlsSheetCopy As Excel.Worksheet 'コピー先シート Set xlsApp = CreateObject("Excel.Application") Set xlsBookTemp = xlsApp.Workbooks.Open("C:\Temp.xls") Set xlsSheetTemp = xlsBookTemp.Sheets(1) Set xlsBookCopy = xlsApp.Workbooks.Add Set xlsSheetCopy = xlsBookCopy.Sheets(1) xlsApp.Visible = True 'コピー元のSheet1を新規ブックにコピーする xlsSheetTemp.Copy Before:=xlsSheetCopy 'コピー元のブックは閉じる xlsBookTemp.Close '///新規ブックの編集処理/// Set xlsSheetTemp = Nothing Set xlsBookTemp = Nothing Set xlsSheetCopy = Nothing Set xlsBookCopy = Nothing Set xlsApp = Nothing End Sub

  • AccessでExcelのSheet間のコピーをしたい

    ACCESSのデータを読み込み、エクセルの元帳からレイアウトをコピー、新しいExcelのSheetにレイアウトとデータを書き込もうとしていますがうまく動きません。どこが悪いのでしょうか?次のように書きました。 Private Sub NEW_BOOK() Dim xlBookOrig As Workbook Dim xlBookNew As Workbook Dim xlSheetOrig As Worksheet Dim xlSheetNew As Worksheet Set xlApp = CreateObject("Excel.Application") xlApp.Application.Visible = True Set xlBookOrig = xlApp.Workbooks.Open("C:\元帳.xls") Set xlSheetOrig = xlBookOrig.Worksheets(1) Set xlBookNew = xlApp.Workbooks.Add Set xlSheetNew = xlBookNew.Worksheets(1) xlSheetOrig.Copy xlSheetNew.Paste xlSheetNew.Name = Left$(strMODL, 9) xlSheetNew.Cells(5, 1).Value = strSTAT xlSheetNew.Cells(4, 3).Value = strITEM ..... xlSheetNew.SaveAs "C:\'" & Left$(strMODL, 7) & "'.xls" これで実行すると、BOOK1 BOOK2 の2つが生成され、 BOOK1にはSHEET名、各データが書き込まれ、BOOK2には元帳のレイアウトがコピーされレイアウトとデータが一つになりません。 どこが間違っているのでしょうか? 宜しくお願いします

  • EXCEL 別シートのコピー(3)

    こんにちは。 こちらで以前こちらで質問をさせていただき、EXCELの別ブックのシートからコピーをしています。 元のブックのコピーを作り、そこに入力してもらい、元のブックにコピーをしています。(同じフォルダに入れて) Private Sub CommandButton1_Click() Dim myBook As Workbook Set myBook = Workbooks.Open(ThisWorkbook.Path & "\コピー元ブック.xls")  with workbooks("コピー元ブック.xls").worksheets("シート名").usedrange workbooks("貼り付け先ブック.xls").worksheets("シート名").range(.address).value = .value end with end sub ここでブックがない場合、そのブックを飛ばしてあるブックだけコピーしたい場合は、どうしたらいいでしょうか。いろいろやってみましたが、コピーできませんでした。 教えてください。

  • Excel2000マクロ_ブック名に一貫性が無くて既に開いている物の間のコピー等

    何方か、回答をお願いします。 (A.xlsのAAAシート)(B.xlsのBBBシート)この2つ間のセル値をコピーしたい のですが(共にブック名シート名に一貫性は無しで、既に開いています。) マクロ付.xlsに下記のマクロを書いてA.xlsのAAAシートがアクティブの時にマクロを 実行してtwwにAAAシートをセット出来たのですが、Bk1にB.xlsのBBBシートをセット出来ません。 Application.Waitで止めている間にアクティブシートを変えようとしましたが駄目 Application.Dialogs(xlDialogWorkbookUnhide).Showでも駄目でした。 何方か、マクロ実行中のアクティブシート変更方法を教えて下さい。 又、この様なブック名に一貫性が無くて既に開いている物の間のコピー等はどの様に するのか参考になる物が有れば教えて下さい。 Sub コピー() Dim Bk1 As Worksheet Dim tww As Worksheet Set tww = ActiveWorkbook.Sheets(1) 'ここが分かりません Set Bk1 = ActiveWorkbook.Sheets(1) '-------1個目 tww.Range("D10").Value = Bk1.Range("H9").Value Set Bk1 = Nothing: Set tww = Nothing End Sub

  • VBAで複数シートを新たに作成したBookにコピー

    いつも大変お世話になります。動作環境は、WindowXPSP3、EXCEL2010です。10個の名前付きsheetがあります。Book.xlsmから新たにBook1.xlsxを作成してこのBook1.xlsxに1個のsheet名が「sheet1」を作成します。そして、Book.xlsmにある10個の名前付きsheetをBook1.xlsxに作成した一個のsheet1にコピーします。コピーの仕方は、Book.xlsmの一番左端のsheetから順番にBook1.xlsxに作成した1個のsheet1に下から上に向かってコピーしていきます。最終的には、10個の名前付きsheetが纏められます。後一つの条件は、一番最初にコピーするシートには4行目に項目書かれております。なので、一番最初にコピー4行目だけはコピーして、後は、5行目からコピーしたく、下記のマクロを作成しました。 Option Explicit Option Base 1 Public Sub シートの纏め() Dim i As Long Dim mySheetCnt As Long Dim mySheetName() As String Dim ws As Workbook Dim s As Worksheet '========================================================================== mySheetCnt = ThisWorkbook.Sheets.count ReDim mySheetName(1 To mySheetCnt) For i = 1 To mySheetCnt - 3 mySheetName(i) = Sheets(i).Name 'MsgBox "変数mySheetName(" & i & ")=" & mySheetName(i) Next i '========================================================================== Dim EffectiveRow As Long Dim EffectiveColumn As Long EffectiveRow = Range("B65536").End(xlUp).Row 'MsgBox "EffectiveRow = " & EffectiveRow & "" EffectiveColumn = Cells(4, 256).End(xlToLeft).Column 'MsgBox "EffectiveColumn = " & EffectiveColumn & "" '========================================================================== Dim Book1 As Workbook For i = 1 To mySheetCnt - 3 If mySheetCnt = 11 Then GoTo Label1 'MsgBox "mySheetName(i) = " & mySheetName(i) & "" 'MsgBox "デフォルトで" & Application.SheetsInNewWorkbook & "枚作成されます" Workbooks.Add Application.SheetsInNewWorkbook = 1 Sheets("sheet1").Select Book1 = ActiveWorkbook.Name Workbooks("Bookxlsm").Worksheets("mySheetName(i)").Range("B4:AF58").Copy _   Workbooks("Book1.xls").Worksheets("sheet1").Range("B4") ⇐ここで、実行時エラーが出ます。 Next i Label1: End Sub しかし、実行時エラーで止まってしまいます。もう、1週間格闘しております。どなたか、何卒ご教授して頂きたく、宜しくお願い申し上げます。

  • ユーザーフォームを表示されないようにしたい

    Vista excel2007 でマクロ作成中の超初心者です。 A、B、Cのブックがあります。Bブックのみマクロをワークシートに貼り付けています。 1)Aブック(マクロ記録用)の中にある、Aコマンドボタンを押すと  BブックのBシートにジャンプします。ジャンプと同時に、Bユーザーフォームを 表示しています。 2)そしてBシートには、フォームコントロールを貼り付けており、ここをクリックするとCブックCシートに飛びます。 3)ところが、CシートにはBユーザーフォームが残ったままです。このフォームを  表示されないようにしたいのです。 4)Bシートのフォームコントロールには、次のコード記述をしてあります。       Sub Cブック Cシートへ() Dim wb As Workbook Dim ws As Worksheet Dim sh As Worksheet Dim i As Long ChDrive ThisWorkbook.Path ChDir ThisWorkbook.Path On Error Resume Next '開いて作業中の場合。 Set wb = Workbooks("CCC.xls") On Error GoTo 0 If wb Is Nothing Then Set wb = Workbooks.Open(ThisWorkbook.Path & "\CCC.xls") End If Worksheets(1).Select End Sub どうかよろしくお願いします。 

  • VBAにて新規ブックへ既存シートのコピー

    みなさんのお力を貸して下さい。 現在エクセルマクロにて新規ブックを作成し、作成したブックへ既存のシートをコピーをしたいと思っています。 しかし、コピーメソッド実行時にエラー1004 WorksheetクラスのCopyメソッドが失敗しましたというエラーが発生して困っています。 Dim oXls As Object Dim oWbk As Object Dim oSheet As Object Set oXls = CreateObject("Excel.Application") Set oWbk = oXls.Workbooks.Add ThisWorkbook.Worksheets("Sheet1").Copy Before:=oWbk.Worksheets("Sheet1")  どなたかご教授、よろしくお願いします。

  • ExcelVBA ブック全データを別ブックにコピー

    お世話になります。 自分のPC環境のC:\test\配下にある"練習.xls"というブックがります。 ボタンが押された時にこのブックの全データをデスクトップにある"集計.xls"のA1から張り付けたいのです。 あるサイトで下記のようなロジックが公開されていましたので、ファイル名を変えて実行しましたが 下記★箇所で"インデックスが有効範囲にありません"とエラーが出てしまいます。 どなたか改善方法をご教授いただけませんでしょうか? よろしくお願い致します。 環境 windows XPSP3  Excel2003 Sub ボタン1_Click() Dim a As Variant Dim b As Variant Workbooks.Open Filename:="C:\test\練習.xls" ★Set a = Workbooks("\C:\test\練習.xls").Worksheets("sheet1").UsedRange Set b = Workbooks("集計.xls").Worksheets("sheet1").Range("A1") a.Copy (b) Set a = Nothing Set b = Nothing End Sub

専門家に質問してみよう