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

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

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

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

Q&A

解決済

1回答

499閲覧

VBA:関数が走らない!?条件分岐上のトラップ?

masafumi55

総合スコア12

VBA

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

0グッド

0クリップ

投稿2020/10/19 03:52

編集2020/10/19 04:32

いつも大変お世話になっております。masafumiです。今回も調べても全くわからないことが起きてしまいました。
どなた様かご教授のほどお願いいたします。

▼今回の問題点
ボタンを押し、Boolean型がTrueの場合に下図「★2.のコード: Call businessCardCreate」が走るという内容になります。
しかしながら、それが走りません。どうすれば★2.を走らせることができるのでしょうか。。

<モジュール>

Function cheacker(ByVal TextBox1 As Object) Dim bln As Boolean If TextBox1 = "" Then bln = False cheacker = bln Else bln = True cheacker = bln End If End Function

<フォーム>

Private Sub BusinessCardCreateButton_Click() Dim bln As Boolean bln = cheacker(TextBox1) ← ◆「cheaker(TextBox1)」を「True」と直接入れると問題なく走る。 If bln = True Then MsgBox "開始します" ←★1. 処理が走る。 Call businessCardCreate←★2. 処理が走らない。 MsgBox "終了しました"←★3. 処理が走る。 Else MsgBox "使用不可" End If End Sub

<フォーム側続き・すべて続きになっております。>
・・・長くて誠に申し訳ありません。

'【clear】イメージ画像への反映 Sub businessCardCreate() Dim MaxRow As Integer Dim MaxCol As Integer Dim sheetPurchaseOrder As Worksheet Set sheetPurchaseOrder = ThisWorkbook.Worksheets("purchaseOrder") With ThisWorkbook.Worksheets("imageCardView") .Range("i11").Value = bcName.Value .Range("i10").Value = bcAffiliation.Value .Range("j17").Value = "E-mail : " & bcMailAdress.Value .Range("v15").Value = bcTelNumber.Value .Range("v16").Value = bcFaxNumber.Value .Range("k14").Value = bcPostalCode.Value .Range("v14").Value = bcAddress.Value End With '【clear】印刷用取り込みデータ作成。 If TextBox1.Value = "" Then MaxRow = ThisWorkbook.Worksheets("printDataList").Cells(Rows.count, 1).End(xlUp).Row + 1 With ThisWorkbook.Worksheets("printDataList") .Range("A" & MaxRow).Value = bcName.Value .Range("B" & MaxRow).Value = bcAffiliation.Value .Range("C" & MaxRow).Value = "E-mail : " & bcMailAdress.Value .Range("D" & MaxRow).Value = bcTelNumber.Value .Range("E" & MaxRow).Value = bcFaxNumber.Value .Range("F" & MaxRow).Value = bcPostalCode.Value .Range("G" & MaxRow).Value = bcAddress.Value If selectTwenty.Value = True Then .Range("H" & MaxRow).Value = "20" End If If selectFifity.Value = True Then .Range("H" & MaxRow).Value = "50" End If If selectOneHundred.Value = True Then .Range("H" & MaxRow).Value = "100" End If End With End If MaxRow = ThisWorkbook.Worksheets("purchaseOrder").Cells(Rows.count, 3).End(xlUp).Row + 1 '■. '【clear】注文書への転記 If TextBox1.Value = "" Then With sheetPurchaseOrder .Range("C" & MaxRow).Value = "名刺" .Range("D" & MaxRow).Value = bcName.Value .Range("E" & MaxRow).Value = 10 If selectTwenty.Value = True Then .Range("F" & MaxRow).Value = "20" End If If selectFifity.Value = True Then .Range("F" & MaxRow).Value = "50" End If If selectOneHundred.Value = True Then .Range("F" & MaxRow).Value = "100" End If End With '【clear】各シートへの情報入力。 Call ImgExport Unload BusinessCard End If End Sub

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

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

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

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

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

ttyp03

2020/10/19 04:16

★1★3が呼ばれることが確認できているのなら、★2が呼ばれないはずがありません。 businessCardCreate関数に何かしらの問題があると思うので、businessCardCreateのコードを提示してください。 また★2の「処理が走らない」と断定した理由もお答えください。
tabuu

2020/10/19 04:22

>bln = cheacker(TextBox1) TextBox1という変数はどこで定義していて、どのような値が入っていますか? 名称からしてテキスト入力フォームのような感じもしますが、文字列でしょうか?
masafumi55

2020/10/19 04:39

ttyp03様  さっそくご覧になっていただきありがとうございます! businessCardCreateのコードを追記させていただきました。長くて誠に申し訳ありません。初心者についきご容赦ください。。 >また★2の「処理が走らない」と断定した理由もお答えください。  当件については、businessCardCreateの中で実行されるべき、「イメージ画像の反映」、「印刷用取り込みデータ作成。」、「注文書への転記」、「各シートへの情報入力」がいずれも実行されない中、★3が走ったためです。エラーコメントもなくデバックについてはまだ容要領がわかわず確認出来ておりません。こんな感じです(汗)。重ねてありがとうございます。
masafumi55

2020/10/19 04:46

tabuu様  さっそくご指摘ありがとうございます。 >TextBox1という変数はどこで定義していて、どのような値が入っていますか? 名称からしてテキスト入力フォームのような感じもしますが、文字列でしょうか? 当件につきまして、TextBox1はUserForm1の中に設置(=定義)してあります。TextBox1はテキスト入力フォームで間違いありません。しかしながら、スピンボタンと連動しております。そのスピンボタンによる値変更に基づき、数字が増減する形となっております。 空白の場合は問題なくMsgBoxを呼び出すという処理が走るのですが、それ以外はbusinessCardCreateを走らせる目的の中で、その処理が走りません。。 文章長くなってしまい申し訳ありません。
hatena19

2020/10/19 04:48 編集

まずはデバッグ方法を覚えましょう。 VBAのステップインなどのデバッグメニューの使い方を初心者向けに丁寧に解説します https://asatte.biz/vba-debug-menu/ 今回なら、businessCardCreateプロシージャにブレークポイントを設定して、F8キーを押して1行ずつ実行していって想定通りの動きになっているか確認ですね。
masafumi55

2020/10/19 04:49

tabuu様  さきほど、ttyp03さんより回答いただくことができました!! いろいろ相談に乗っていただきありがとうございました!!
masafumi55

2020/10/19 04:53

hatena19様 ありがとうございます!!こちらのサイトわかりやすいです! さっそくデバック習得します(^^)
guest

回答1

0

ベストアンサー

businessCardCreate関数内でTextBox1=""のIf文があるためですね。
cheacker関数でTrueを返す条件はTextBox1が空でないときなので、矛盾した処理になっています。

参考までにデバッグするときは、businessCardCreate関数内先頭にMsgBoxを入れたり、ブレイクポイントを貼ったりして確実にどこまで動いているのかを確認するといいでしょう。

投稿2020/10/19 04:45

ttyp03

総合スコア16998

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

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

masafumi55

2020/10/19 05:09

ttyp03 エラー解決いたしました!長いコードご覧になっていただきありがとうございました。 おっしゃられるとおり、矛盾していました笑  こういった形でも挙動がおかしくなることについて学べて感謝しております。 今度はデバック方法についてもきっちり抑えていこうと思います。 丁寧なご対応誠にありがとうございました(^^)
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.46%

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

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

質問する

関連した質問