• ベストアンサー

エクセルVBA ユーザーフォームからシートの操作

name_mm_okの回答

  • ベストアンサー
回答No.4

tmgolf さま Call MyRowNoXXX("XXX") 内のXXXはワークシート名称です。 アクティブになっているワークブック内にXXXが含まれない 場合、メッセージが表示されるようにしています。 大文字、小文字の区別があるので、おそらく新規ワークブック でテストされ、シート名称がSheet1、Sheet2のSが大文字の シート名称でテストされていないでしょうか? 再度確認してみて下さい。 下記に先程の回答にコメントを追加しました、わかりやすく 記述したつもりですが、一部どうしても代替できない部分が ありました。 意味が理解できない単語がありましたら、ネットの辞書で検索 されると私が説明するよりも正しく詳しく記載されています。(笑 Private myRowNoS As Long Private Sub testcall() Call MyRowNoXXX("sheet1") Call MyRowNoXXX("sheet2") End Sub Sub MyRowNoXXX(ByVal wshName As String) '現在アクティブになっているワークブック内の 'ワークシートクラスを一時的に格納するための '宣言 'クラスについての詳しい説明は避けますが、 '簡単にいうと、データとメソッド(関数、プロシージャ)を 'ひとまとめにし、再利用するための雛形です。 '詳しい内容については、少しずつネット又は書籍で '知識を深めて下さい。 Dim WSh As Worksheet 'ここは現在作成中の処理の仕様に基づき適切な '処理を記述して下さい。 myRowNoS = 4 '現在アクティブになっているワークブック内の '全てのワークシート数分ループを繰り返します。 '同時に、WSh変数に対しワークシートクラスを '順に割り当てます。 '仮に、Sheet1、Sheet2を含むワークブックの場合、 'ループは2回発生します。 For Each WSh In ActiveWorkbook.Worksheets 'ワークシート名称を判定し、引数で指定された 'ワークシート名称と完全一致するかを判定します。 If WSh.Name = wshName Then 'ワークシート名称と完全一致した場合ループ '処理を抜けます。 Exit For End If Next WSh '以下の判定は、ループ内で行われた、ワークシート '名称の判定処理において、一度も一致しなかった場合、 'メッセージを出力するようにしています。 '上記のループで一致する場合は、途中でループ処理を '抜けるため、wshName に格納されたシート名称を持つ 'ワークシートクラスのインスタンスが格納されている 'ため、WSh は解放された状態(Nothing)になりません。 If WSh Is Nothing Then MsgBox "ワークシート[" & wshName & "]が見つかりません。", _ vbCritical + vbOKOnly Exit Sub End If Do Until WSh.Cells(myRowNoS, 1) = "" myRowNoS = myRowNoS + 1 Loop '一時的に使用したオブジェクト変数の解放 Set WSh = Nothing MsgBox "未入力は" & Format(myRowNoS) & "行目です。", _ vbInformation + vbOKOnly End Sub

参考URL:
http://e-words.jp/p/c-programming-object.html
tmgolf
質問者

お礼

補足と解説を丁寧にしていただいてありがとう ございます。ご指摘の通り、sheetのsが小文字 だったためでした(汗) 解説の方もとても丁寧にしていただき、誠に ありがとうございます。また、URLもつけて いただきありがとうございます。 とても勉強になりました。

関連するQ&A

  • エクセルでプロシージャが終了しません。

    ユーザーフォームのボタンをクリックしたら、特定のセルに現在の時刻を入力するマクロを作っています。 入力するところまではうまくいったのですが、プロシージャが終了しないので保存することができません。 どこが違うのかわからないので、わかる方よろしくお願いいたします。 Private Sub cmd1_Click() Dim hiduke As Date Dim hiduke2 As Integer hiduke = Now() hiduke2 = CInt(Day(hiduke)) If chk1.Value = True Then Cells(4, 1).Select Do Until ActiveCell.Value = hiduke2 ActiveCell.Offset(1, 0).Select Loop ActiveCell.Offset(0, 2).Value = hiduke Else Cells(4, 1).Select Do Until ActiveCell.Value = hiduke2 ActiveCell.Offset(1, 0).Select Loop ActiveCell.Offset(0, 8).Value = hiduke End If End Sub

  • VBAでフォームからシートへ入力

    シートが「回答フォーム」と「用語」と言うのがあります。 (1)「回答フォーム」シートに"入力"ボンタをクリックすると「用語」のシートに入力される。 (2)回答フォーム」シートに"検索"ボンタをクリックすると「用語」のシートからフォームへ表示される。 用語のシートに項目は、A列から、ナンバー、検索、フリガナ、用途、用語、意味とあります。 TextBox1に用語、TextBox2に用途、TextBox3に意味 とあります。 (1)には Private Sub 入力_Click()   Sheets("用語").ActiveSheet・・・ここがエラーになります。 「オブジェクトはこのプロパティまたはメソッドをサポートしていません。」 行 = ActiveCell.Row 列 = ActiveCell.Column Cells(行, 列) = UserForm1.TextBox1.Value Cells(行, 列 + 1) =UserForm1.TextBox2.Value   Cells(行, 列 + 2)=UerForm1.TextBox3.Value UserForm1.TextBox1.SetFocus Cells(行 + 1, 列).Select End Sub (2)には Private Sub CommandButton1_Click() Set sh1 = bk.Worksheets("回答フォーム") Set sh5 = bk.Worksheets("用語") cnt1 = 2 UserForm1.TextBox1.Value・・・・ここのVALUEがエラーになります。 「コンパイルエラー プロパティの使い方が不正です。」 ActiveCell.FormulaR1C1 = "=MATCH(RC[-1],用語!C[-5],0)" n = ActiveCell.Value '用語 sh5.Cells(n, 2).Value = sh1.TextBox1.Value '意味 sh5.Cells(n, 3).Value = sh1.TextBox3.Value '用途 sh5.Cells(n, 4).Value = sh1.TextBox2.Value End Sub 申し訳ないですがよろしくお願い致します。

  • Excel ユーザーフォームの入力値をシートに転記

    Excelでユーザーフォームを作りました。 ユーザーフォームには、テキストボックスを2個、ボタンを1個("記入"という文字が入っています)置いてあります。 テキストボックスに入れた数値をSheet1のセル"C24","C25"に転記したいので、ユーザーフォームのコードを次のようにしましたが、エラーメッセージは出ないかわりに何も動いてくれません。 「どこ」と「なに」が違いどうするのが正しいのか教えて下さい。よろしくお願いします。 Private Sub Tbox1_Change() a = Tbox1.Value End Sub ---------------------------- Private Sub Tbox2_Change() b = Tbox2.Value End Sub ---------------------------- Sub 記入Button_Click() '入力値をSheet1に転記 Dim a As Range Dim b As Range Sheets("Sheet1").Select Set a = Range("C24") Set b = Range("C25") End Sub

  • VBA エクセル 実行時エラー13:型が一致しません

    またまたお世話になります。 下記のマクロを走らせると、タイトルのようなエラーメッセージが出てしまいます。 Sub rows_hdn() Dim n As Integer Sheets("ABC").Select n = 3 Do Until Cells(n, 2).Value = "" n = n + 1 Loop Sheets("EFG").Select If n <> 3 Then Rows("3:n-1").Select Selection.EntireRow.Hidden = True End If End Sub シートABCに入力がされているライン数だけ、シートEFGの3行目から隠したいのですが、どのようにすればよろしいのでしょうか? よろしくお願いいたします。

  • ユーザーフォームからワークシートへの転記について

    ●質問の主旨 エクセルVBAの初心者です。 添付画像のユーザーフォームからデータベースへの転記の コードを記述しましたが、実行しようとすると15行目の「CelData」のところが 選択され、コンパイルエラー(変数の定義がされていません) が返されます。 1.「CelData」のコンパイルエラーはどのように修正すれば   よいでしょうか? 2.またこのコンパイルエラーを修正すれば、ユーザーフォームから   ワークシートへの転記ができるでしょうか? ●質問の補足 1.ユーザーフォームにある「入力No.」と 「入力日」(赤色で囲った部分)をそれぞれ A2セル、B2セル(青色で囲った部分)に転記しようと 考えています。 2.添付画像のワークシートには手入力で「柴田8月分」 というシート名が予めつけられています。 3.ユーザーフォームやワークシートには 他に入力、転記する個所がありますが質問を 簡単にするため省略しています。 4.この質問に関するオブジェクト名は以下の 通りです。 ・「入力No.」=TextBox3 ・「入力日」=txtdate ・「データベース入力」=CommandButton3 エクセルVBAにお詳しい方ご教示願います。 使用機種はWindows Vista Excel2007です。 なお、コードは以下の通りです。 1 Option Explicit 2 'ユーザーフォームの初期化 3 Private Sub UserForm_Initialize() 4 TextBox3.Value = 1 5 txtdate = Date 6 End Sub 7 'ユーザーフォームからデータベースへの転記 8 Private Sub データベース入力_Click() 9 Dim RowPos As Integer 10 Dim ColPos As Integer 11 RowPos = 2 12 ColPos = 1 13 Do 14 RowPos = RowPos + 1 15 CelData = Worksheets("柴田8月分").Cells(RowPos, _ 16 ColPos) 17 Loop While CelData <> "" 18 With Worksheets("柴田8月分") 19 .Cells(RowPos, ColPos) = TextBox3.Value 20 .Cells(RowPos, ColPos + 1) = txtdate.Value 21 End With 22 End Sub

  • Excel VBA セルの指定の方法

    VBAの初心者です。処理1 のサブルーチンを使わずに直接記述すれば、エラーはでませんが、以下のように記述すればエラーが出てしまいます。宜しくお願いします。 Sub Macro10() i = 1 Do Until Cells(i, 1) = "" 処理1 i = i + 1 Loop End Sub Sub 処理1() Cells(i, 2).Select  ← ここでエラーになります。        ActiveCell.FormulaR1C1 = "◎" End Sub

  • マクロのユーザーフォームについて(エラー)

    現在、エクセルのマクロ・ユーザーフォームを使って書式を作っています。 ユーザーフォームを幾つか使っているのですが、ある一つのフォームを開こうとするとそれだけ”インディックスが有効範囲にありません。”とエラーが出ます。 他のフォームと構文の内容はほぼ同じなのですが、それだけ開かないのです。どこが間違っているのか、教えていただけないでしょうか? ■ユーザーフォーム2からユーザーフォーム7を開きたい■ -----ユーザーフォーム2の構文----- Private Sub CommandButton2_Click() '出張期間を閉じて業務内容を開く Unload UserForm2 Dim myRow As Long Dim myMaxNo As Integer   myRow = 12 myMaxNo = Worksheets("規定").Range("E25").Value Do Until Cells(myRow, 22) = "" myRow = myRow + 1 Loop If (myRow - 12) >= myMaxNo Then MsgBox "入力できる件数を超えています。" Else UserForm7.Show ※←ここで止まってしまいます。 End If End Sub

  • エクセルユーザーフォームで困ってます。

    エクセル初心者です。 自分のユーザーフォーム(住所、商品登録)を作りたくて大変困ってます。 下記は、ネットなどをみて貼り付けたのですが、上手くいきません。 まずTOPページを作り、ユーザーフォームを呼び出すボタンを作り、クリックすると フォームが出るようにしてあります。 そこに、自分の入力したいものをユーザーフォームにテキストでつくり、シート9に 登録ボタンを作りクリックしたら、シートに反映させたいと思ってます。 登録ボタンを押したら、入力画面はクリアにしたいです。 他にいろいろやりたい事もあるのですが、入力した順番に001・002・003と顧客番号をつけたり 検索ボタンを作って、名前や、顧客番号を入れると情報を呼び出したり、請求書用のプリントシートや、封筒シートに簡単に反映できればと思っています。 しかし、まだまだそこまではいかず、最初でつまずいてます。 現状は、フォームを呼び出すときに実行時エラーがでます。 どうしても、自分の使い勝手のいいものを作りたいので どうか、助けてください。大変まいってます。 長文になりますが、どうかよろしくお願いします。 下記の入力中のものをみていただけて、いろいろ意見をいただけるとありがたいです。 Sub FormShow() UserForm1.Show End Sub 'Sheet9へ書き込む Private Sub 登録_Click() Dim i As Integer With Worksheets(9) 'テキストボックスの値を書き出し For i = 1 To 80 .Range("B" & i) = UserForm1.Controls("TextBox" & i).Text Next End With End Sub 'Formを呼び出したとき、Sheet9から読み込む Private Sub UserForm_Initialize() Dim i As Integer With Worksheets(9) 'テキストボックスの値を読み込み For i = 1 To 80 UserForm1.Controls("TextBox" & i).Text = .Range("B" & i) Next End With End Sub '終了ボタン Private Sub CommandButton2_Click() Unload Me End Sub

  • エクセルマクロ・ユーザーフォームの初期設定

    マクロのユーザーフォームを使って、書式を作っています。 ユーザーフォームを開くと、自動的にシリアルナンバーが出るようにしたいのですが、出てきません。 どのように訂正すれば宜しいでしょうか? ※マクロのテキストを元に、値のみ変更して入力しています。 -----Private Sub UserForm7_Initialize()----- Dim myRow As Long '行番号の変数 Dim mySno As Integer '登録開始番号の変数 Dim myMaxNo As Integer '最大登録件数の変数 With Worksheets("規定") '規定'シートで担当者の入力が始まる行 myRow = 4 '登録開始番号と最大登録件数をセット mySno = 1 myMaxNo = 4 '担当者データを読み込みコンボボックスに登録 Do Until .Cells(myRow, 2).Value = "" omboBox1.Value.AddItem .Cells(myRow, 2).Value myRow = myRow + 1 Loop End With '「精算書」シートの1件目の行番号をセット myRow = 12 '「精算書」データシートの登録No.の新規入力行を求める。 Do Until Cells(myRow, 22).Value = "" myRow = myRow + 1 Loop '登録No.テキストボックスに新規の番号をセット TextBox1.Value = mySno + myRow - 12 ----End Sub------

  • VBAでコマンドボタン操作で他のシートにコピーする方法を教えてください。

    エクセルのVBAでコマンドボタン操作でセルの値を他のシートのセルへコピーしたいのですが、やり方がわかりません。 自分なりに作ってみたのですが何が悪いのか教えてください。 Private Sub CommandButton1_Click() ' Range("A1").Select Selection.Copy Sheets("Sheet2").Select Range("A1").Select Selection.End(xlDown).Select ActiveCell.Offset(1, 0).Select ActiveCell.PasteSpecial Paste:=xlPasteValues Application.CutCopyMode = False End Sub Private Sub が怪しいのですが対処もわかりません。 ちなみにsheets2のA1には値がはいっています。 よろしくおねがいします。