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

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

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

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

VB.NET

Microsoft Visual Basic .NETのことで、Microsoft Visual Basic(VB6)の後継。 .NET環境向けのプログラムを開発することができます。 現在のVB.NETでは、.NET Frameworkを利用して開発を行うことが可能です。

Q&A

解決済

4回答

3935閲覧

VBA関数呼び出しエラー

退会済みユーザー

退会済みユーザー

総合スコア0

VBA

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

VB.NET

Microsoft Visual Basic .NETのことで、Microsoft Visual Basic(VB6)の後継。 .NET環境向けのプログラムを開発することができます。 現在のVB.NETでは、.NET Frameworkを利用して開発を行うことが可能です。

0グッド

0クリップ

投稿2015/12/23 02:55

編集2015/12/23 08:59

お久しぶりです。pipiでございます。
金額を合計する関数MyCalc()を標準モジュールに移動し呼び出そうとしておりますが、
**Function GetGoukeiKingaku関数で『型が一致しません』**というエラーになり四苦八苦しております。。。

金額を合計する関数MyCalc()は、元々、Private sub btnAdd_Click()プロージャーと同じ
プロージャー内にあったのですが、他のフォーム上からも呼び出せるようにするため移動しました。。

移動したとたん、なぜか**Function GetGoukeiKingaku関数で『型が一致しません』**というエラーです。

元々のコード↓

Private Sub btnAdd_Click() ' 明細行をリストボックス(lstMeisai)に追加する。 With lstMeisai .AddItem 0 .List(.ListCount - 1, 1) = cboGoodsID.Text .List(.ListCount - 1, 2) = txtGoodsName.Text .List(.ListCount - 1, 3) = Format(txtGoodsPrice, "##,#0") .List(.ListCount - 1, 4) = Format(txtQuantity, "##,#0") .List(.ListCount - 1, 5) = txtGoodsUnit.Text .List(.ListCount - 1, 6) = txtAmount.Text .List(.ListCount - 1, 7) = txtTax.Text .List(.ListCount - 1, 8) = txtSumWithTax.Text End With ' リストボックス内の税込金額を合計する関数GetGoukeikingakuの呼び出し。 lblGoukeiKingaku.Caption = Format(GetGoukeiKingaku(8, lstMeisai), "#,##0") ClerMeisaiRecord Me cboGoodsID.SetFocus btnAdd.Enabled = False End Sub Private Sub MyCalc() On Error GoTo eh Dim Kingaku As Long Kingaku = txtGoodsPrice.Text * txtQuantity.Text On Error GoTo 0 txtAmount.Text = Format(Kingaku, "##,#0") txtTax.Text = Format(Kingaku * 0.08, "##,#0") txtSumWithTax.Text = Format(Kingaku * 1.08, "##,#0") Exit Sub eh: End Sub Public Function GetGoukeiKingaku(ByVal ColumNo As Integer, ByVal LB As MSForms.ListBox) As Long ' 第二引数のリストボックスのにおける第一引数の列の合計を算出する関数 Dim c As Integer c = LB.ListCount - 1 If c = -1 Then GetGoukeiKingaku = 0 Exit Function End If Dim Ans As Long Dim i As Integer Ans = 0 For i = 0 To c Ans = Ans + LB.List(i, ColumNo) Next GetGoukeiKingaku = Ans

金額を合計する関数MyCalc()を標準モジュールに移動

`標準モジュールに記載 Public Sub MyCalc(ByRef TarGetForm As MSForms.UserForm) With TarGetForm On Error GoTo eh Dim Kingaku As Long Kingaku = txtGoodsPrice.Text * txtQuantity.Text On Error GoTo 0 .txtAmount.Text = Format(Kingaku, "##,#0") .txtTax.Text = Format(Kingaku * 0.08, "##,#0") .txtSumWithTax.Text = Format(Kingaku * 1.08, "##,#0") Exit Sub eh: .txtAmount.Text = "" .txtTax.Text = "" .txtSumWithTax.Text = "" End With End Sub
Public Function GetGoukeiKingaku(ByVal ColumNo As Integer, ByVal LB As MSForms.ListBox) As Long ' 第二引数のリストボックスのにおける第一引数の列の合計を算出する関数 Dim c As Integer c = LB.ListCount - 1 If c = -1 Then GetGoukeiKingaku = 0 Exit Function End If Dim Ans As Long Dim i As Integer Ans = 0 For i = 0 To c Ans = Ans + LB.List(i, ColumNo) `MyCalc()を標準モジュールに記載するとここでエラーとなる。 Next GetGoukeiKingaku = Ans

説明が悪くて申し訳ありませんが、どなたかご教授いただけららと思います。

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

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

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

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

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

ExcelVBAer

2015/12/23 05:35

F8等を使用してステップ実行させた結果、 どこでデバッグが起きているかを明確にしてもらえますか?
退会済みユーザー

退会済みユーザー

2015/12/23 05:56

Ans = Ans + LB.List(i, ColumNo)で黄色くなって型が一致しませんと書いていますが・・・・
ExcelVBAer

2015/12/23 06:39 編集

コードの中に書かれていたんですね。見落としていました。 では、デバッグ時のLB.List(i,ColumnNo)には何が入っていますか? イミディエイトウィンドウで 「?LB.List(i,ColumnNo)」で出してみるか、 Variant型の変数を作成し、そこに入れて見てもらえませんか??
退会済みユーザー

退会済みユーザー

2015/12/23 10:00 編集

ウオッチ式の追加で、GetGoukeiKingaku関数の引数、ColumNo、LBそれから、 エラーとなって黄色く表示された箇所の、LB.List(i, ColumNo)を追加して見たところ、エラーとなった場合のそれぞれの値は、 関数の引数となるColumnNo=8、型:intteger、LB=NULL 型:ListBoxとなっており、LB.List(i, ColumNo)="" 型:Variant/stringとなっておりました。
guest

回答4

0

ベストアンサー

もう一度、最初から作り直してみます。一旦Closeとさせていただきます。

アドバスありがとうございました。

投稿2015/12/23 10:57

退会済みユーザー

退会済みユーザー

総合スコア0

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

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

0

質問の回答で「LB.List(i, ColumNo)="" 型:Variant/string」と頂いておりますが、
直接の原因はまさにこの「String」という部分です。

Variantの器に、String型として値が格納されているということです。

そして、Long型の変数に、String型は入りません。
基本的には、異なる型を格納する場合にはデバッグ出ます。
(自動変換してくれる場合もあります)

次に、質問の回答で「LB=NULL 型:ListBox」とありますが、
NULLといのは空という意味です。
何故ListCountが実行できているか分かりませんが、
引数が正しく渡っていない可能性が考えられます。

ここで気になるのが引数の渡し方で、
「MyCalc」では「ByRef」なのに、
「GetGoukeiKingaku」では「ByVal」になっていることです。

これが原因かはさておき、ByRefとByValの使い分けは意図されていますか?
もし意図されていないのであれば、ByRef(デフォルト)で処理する方が、
今後も処理が分かりやすいと思いますがいかがでしょうか。

投稿2015/12/23 10:02

ExcelVBAer

総合スコア1175

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

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

0

該当するかわかりませんが、
「ExcelのVBAですが、ワークシートなどのオブジェクトは普通に引数として渡すことができますが、
ワークシート上のコントロールは渡すことができません。」
と参考URLに書かれています。

参考URL
http://blog.jojo.jp/?eid=1240771

GetGoukeiKingakuの引数をObject型にしてみてはいかがでしょうか?

投稿2015/12/23 04:05

tomo.ina

総合スコア357

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

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

退会済みユーザー

退会済みユーザー

2015/12/23 04:23

Object型にしても同じです。。。。
tomo.ina

2015/12/23 04:44

そうですか。 ではLB.List(i, ColumNo) がString型になっていませんか?
guest

0

なぜかFunction GetGoukeiKingaku関数で『型が一致しません』というエラーです

じゃなくて、本当に型が一致していないからエラーが出てるのでは?

ステップ実行で
Ans
とか
LB.List(i, ColumNo)
がどんな型できてるか確認してみては?

投稿2015/12/23 03:14

dojikko

総合スコア3939

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問