質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

Q&A

解決済

1回答

2084閲覧

VBA 来客リストを入力するユーザーフォームを作成したい

yutan

総合スコア8

VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

0グッド

0クリップ

投稿2018/08/09 14:02

編集2018/08/09 14:08

前提・実現したいこと

担当者ごとの件数などを集計するために、毎日エクセルのリスト(A~I No・日付・区分-新規・区分-継続・会員番号・氏名・紹介-実施・紹介-過去実施・担当者)に入力しています。入力の簡易化のため、ユーザーフォーム作成中に以下のエラーメッセージが発生しました。Rangeメソッドがそもそも該当部分になく、どう修正すればいいのかわかりません。

よろしくお願いいたします。

発生している問題・エラーメッセージ

実行時エラー'1004': 'Range'メソッドは失敗しました:'_Global'オブジェクト デバック: If 実施入力.doModal(ActiveCell.Row) = True Then

該当のソースコード

<ワークシートモジュール> Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean) If 実施入力.doModal(ActiveCell.Row) = True Then MsgBox "登録されました。" Else MsgBox "登録できませんでした。" End If Cancel = True End Sub <標準モジュール> Sub FormShow() If 実施入力.doModal(ActiveCell.Row) = True Then MsgBox "登録されました。" Else MsgBox "登録できませんでした。" End If Unload 実施入力 End Sub <ユーザーフォームモジュール> Option Explicit Private ActiveRow As Long Private bln登録 As Boolean Public Function doModal(ByVal argRow As Long) As Boolean Dim i As Integer ActiveRow = argRow With Worksheets("来客リスト") '日付セル Me.txt日付.Text = .Cells(ActiveRow, 2) '区分セル If .Cells(ActiveRow, 3) = "○" Then Me.opt新規.Value = True ElseIf .Cells(ActiveRow, 4) = "○" Then Me.opt継続.Value = True End If '会員番号~氏名セル Me.txtID.Text = .Cells(ActiveRow, 5) Me.txt氏名.Text = .Cells(ActiveRow, 6) '紹介セル If .Cells(ActiveRow, 7) = "○" Then Me.chb実施.Value = True ElseIf .Cells(ActiveRow, 7) = "×" Then Me.chb実施.Value = False End If If .Cells(ActiveRow, 8) = "○" Then Me.chb過去実施.Value = True ElseIf .Cells(ActiveRow, 8) = "×" Then Me.chb過去実施.Value = False End If '担当者セル Me.cmb担当者.Text = .Cells(ActiveRow, 9) End With bln登録 = False Me.Show doModal = bln登録 End Function Private Sub UserForm_Initialize() Select Case True Case Me.opt新規.Value Case Me.opt継続.Value Case Else End Select Me.cmb担当者.List = Range("担当者").Value End Sub Private Sub btn登録_Click() With Worksheets("来客リスト") '日付セル .Cells(ActiveRow, 2) = Me.txt日付.Text '区分セル If Me.opt新規.Value = True Then .Cells(ActiveRow, 3) = "○" Else .Cells(ActiveRow, 3) = "" End If If Me.opt継続.Value = True Then .Cells(ActiveRow, 4) = "○" Else .Cells(ActiveRow, 4) = "" End If '会員番号~氏名セル .Cells(ActiveRow, 5) = Me.txtID.Text .Cells(ActiveRow, 6) = Me.txt氏名.Text '紹介セル If Me.chb実施.Value = True Then .Cells(ActiveRow, 7) = "○" Else .Cells(ActiveRow, 7) = "×" End If If Me.chb過去実施.Value = True Then .Cells(ActiveRow, 8) = "○" Else .Cells(ActiveRow, 8) = "×" End If '担当者セル .Cells(ActiveRow, 9) = Me.cmb担当者.Text End With bln登録 = True Me.Hide End Sub Private Sub btn閉じる_Click() bln登録 = False Me.Hide End Sub

試したこと

ユーザーフォーム自体は問題なく作成できましたが、シートのダブルクリックで表示できるようにコードを追加したところ、エラーになってしまいました。シートからユーザーフォームへのデータの受け渡しがうまく出来ていないということでしょうか?

補足情報(FW/ツールのバージョンなど)

Windows10/Excel2010

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

可能性としては、
UserForm_Initialize内の
Me.cmb担当者.List = Range("担当者").Valueでエラーが起きている
でしょうか(名前付き範囲が参照出来ない?)


ユーザーフォームの処理内でエラーが起きたとき、デフォルトの設定ではどこでエラーが起きたのかわかりにくいです。

以下の設定をすることで、エラーの発生箇所がわかりやすくなるはずです。

VBEのツール > オプション > 全般 > エラートラップ
「エラー処理対象外のエラーで中断」から「クラス モジュールで中断」へ変更。
(ユーザーフォームもクラスモジュールの一種であるため)

投稿2018/08/09 14:27

imihito

総合スコア2166

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

yutan

2018/08/09 14:36 編集

名前の定義の参照範囲がエラーになっていました…。修正し、無事開くことができました、迅速なご解答ありがとうございました!エラートラップの設定も変更できました!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問