ネットが遅くてイライラしてない!?

Public Sub MPlus(txt as TextBox)
End Sub
という関数があって、この関数に引数としてTextBoxコントロールを渡したいのですが、
Call MPlus(txt_MHantei)や、Call MPlus(Me.txt_MHantei)では、
TextBox.Textの値が引数として渡ってしまい型が違うというエラーが出てしまいます。
どうしたらよいのでしょうか?教えてください。

A 回答 (2件)

No.1です。



> Accessではなく、Excel2002です。

完全に思い込みで回答しました(汗)
大変失礼致しました。

さて、Excel VBAは殆ど触らないのですが・・・(汗)

やってみたところ、ご質問の現象が再現できました。
どうやら、ExcelのSheetでは、「!」は対応していないようです。


ともあれ、解決策ですが、以下のようにしてみてください。

【現在】
Public Sub MPlus(txt As TextBox)
【修正】
Public Sub MPlus(txt As MSForms.TextBox)
    • good
    • 0
この回答へのお礼

回答ありがとうございます。
さっそく試してみたいと思います。

お礼日時:2009/01/22 15:49

こちらの環境(XP Pro/Access2003)で同様のものを


作成して確認した限りでは、型不一致エラーは
発生しませんでした。

推測になりますが、テキストボックスと同名の変数が
宣言されていないでしょうか。
(Option Explicitが宣言されていても、コントロールと
 変数での名前重複はエラーになりません)

試しに、「Call MPlus(txt_MHantei)」の代わりに、
「Call MPlus(Me!txt_MHantei)」としてみてください。
(コントロール名と変数名が重複する場合、「.」では変数
 やプロパティが優先ますが、「!」ではコントロールが
 参照されますので)


参考(以前の回答):
http://oshiete1.goo.ne.jp/qa4462597.html

この回答への補足

説明が足りなかったようで、すみません。
Accessではなく、Excel2002です。
テキストボックスと同名の変数は宣言されていません。

Call MPlus(Me!txt_MHantei)で、試してみたのですが、
「オブジェクトは、このプロパティまたはメソッドをサポートしていません」というエラーがでました。

Excelシート上にあるテキストボックスコントロールを、引数として渡したいのです。

補足日時:2009/01/22 13:15
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

Qフォームのテキストボックスなどの変数名を標準モジュールから参照は可能か?

フォームのテキストボックスなどの変数を標準モジュールの関数から参照する方法を教えてください。
お願いします。

Aベストアンサー

>test(form1.Text1.Text)
>
>Public Function test(コントロール変数パラメータ)
>
>コントロール変数パラメータ=値を代入
>
>End Fuction
可能ですよ。サンプルです。試してみてください。

まず、フォームと標準モジュールを準備してください。
フォーム:
Form[Form1]にTextbox[Text1]とCommandButton[Command1]を配置してください。
([]内は、オブジェクト名です。)
Private Sub Command1_Click()
  Call test(Text1)
End Sub

標準モジュール:
Public Function test(txt As TextBox)
  txt.Text = "aaa"
End Function

CommandButtonを押すと、Textboxに”aaa”と表示されます。

※Public Function test(txt As ****)の****は、
「Textbox」又は「Object」又は「Control」 いずれでもOKです。
例:
Public Function test(txt As Textbox)
Public Function test(txt As Object)
Public Function test(txt As Control)
この辺りは、人それぞれになると思いますが・・・。

>test(form1.Text1.Text)
>
>Public Function test(コントロール変数パラメータ)
>
>コントロール変数パラメータ=値を代入
>
>End Fuction
可能ですよ。サンプルです。試してみてください。

まず、フォームと標準モジュールを準備してください。
フォーム:
Form[Form1]にTextbox[Text1]とCommandButton[Command1]を配置してください。
([]内は、オブジェクト名です。)
Private Sub Command1_Click()
  Call test(Text1)
End Sub

標準モジュール:
Public Function test(txt As TextB...続きを読む

Q【ACCESS】フォーム名/コントロール名を文字列型変数で指定するには

バージョン:Access2002

フォーム「frm01」にテキストボックス「tb01」が作ってある場合、
Forms.frm01.tb01.Value="あいう"
とすれば、フォームもコントロールも指定できるのですが、
Dim strTxt As String
strTxt = "tb01"
Forms.frm01.strTxt.Value="あいう"
だと、文字列型変数"strTxt"が展開されないのでフォーム「frm01」のコントロール「strTxt」を探してしまいエラーになってしまいます。

文字列型変数でフォームやコントロールを指定するには、どのようにすればよいのでしょうか?

Aベストアンサー

フォームの場合
 Forms(strFrm)

フォームのコントロールの場合
 Forms(strFrm).Controls(strTxt)


これでも参照できますが、普通ここまで省略しませんね。
 Forms(strFrm)(strTxt)

あとで見たとき、訳がわからなくなりそう。

QEXCEL VBAのユーザーフォームに引数を渡す方法について

すいません、EXCEL VBAのユーザーフォームに引数を渡す方法についてご質問があります。

シート上にコマンドボタンを2つ用意する。
コマンドボタン1を押すと変数mは1
コマンドボタン2を押すと変数mは2
としてユーザーフォームを呼び出す。

Public m As Integer
Private Sub CommandButton1_Click()
 m = 1
 Call フォーム呼び出し(m)
End Sub

Private Sub CommandButton2_Click()
 m = 2
 Call フォーム呼び出し(m)
End Sub

Sub フォーム呼び出し(m As Integer)
 UserForm1.Show
End Sub

次にユーザフォームにコマンドボタンを1個置き、
ボタンを押したとき、mが1であれば「ボタン1」
mが2であれば「ボタン2」
とメッセージボックスを出し、ユーザーフォームを閉じる。

Private Sub CommandButton1_Click()
  If m = 1 Then
   MsgBox "ボタン2"
  ElseIf m = 2 Then
   MsgBox "ボタン2"
  End If
 Unload UserForm1
End Sub

プロシージャ間の引数渡しは色々なテキストに載っているのですが
ユーザーフォームに引数を渡す方法はどうも見つからず、
Private Sub CommandButton1_Click(m)
としても、コンパイルエラーとなってしまいます。
よろしくご教示をお願いいたします。

すいません、EXCEL VBAのユーザーフォームに引数を渡す方法についてご質問があります。

シート上にコマンドボタンを2つ用意する。
コマンドボタン1を押すと変数mは1
コマンドボタン2を押すと変数mは2
としてユーザーフォームを呼び出す。

Public m As Integer
Private Sub CommandButton1_Click()
 m = 1
 Call フォーム呼び出し(m)
End Sub

Private Sub CommandButton2_Click()
 m = 2
 Call フォーム呼び出し(m)
End Sub

Sub フォーム呼び出し(m As Integer)
 UserForm1...続きを読む

Aベストアンサー

こんばんは。

引数の渡し方には二種類ありますから、それを混乱しているのだと思います。必ずしも、以下の方法が良いというわけではありませんが、UserForm の立ち上げに対して、渡しようがない場合は、プロジェクト・スコープの変数を用いて、以下のようなスタイルで変数として渡すのが良いのではないかと思います。

'-------------------------------------------
'標準モジュール

Public m As Integer

'-------------------------------------------
'シートモジュール

Private Sub CommandButton1_Click()
 m = 1
 Call フォーム呼び出し
End Sub

Private Sub CommandButton2_Click()
 m = 2
 Call フォーム呼び出し
End Sub

Sub フォーム呼び出し()
 UserForm1.Show
End Sub

'-------------------------------------------
'UserForm モジュール

Private Sub CommandButton1_Click()
 MsgBox "ボタン" & m & "が押されました。", vbInformation
 Application.Wait Now + TimeSerial(0, 0, 1)
 Unload Me
End Sub

こんばんは。

引数の渡し方には二種類ありますから、それを混乱しているのだと思います。必ずしも、以下の方法が良いというわけではありませんが、UserForm の立ち上げに対して、渡しようがない場合は、プロジェクト・スコープの変数を用いて、以下のようなスタイルで変数として渡すのが良いのではないかと思います。

'-------------------------------------------
'標準モジュール

Public m As Integer

'-------------------------------------------
'シートモジュール

Private Sub CommandBu...続きを読む

QEXCEL VBAで計算値を四捨五入、切り上げ、切捨てする方法

ネットで探してみたのですが、計算結果を四捨五入して特定のセルを
返すにはどうしたらいいのでしょうか?

Sub hokangosa()

Dim ZPS As Double
Dim ZPOS As Double
Dim DMN As Double
MsgBox (" >>> 補間誤差自動計算 <<< ")
MsgBox (" >>> 初期値入力します <<< ")
ZPS = InputBox(">>> ステップを入力してください<<<")
ZPOS = Sheet1.Cells(22, 4).Value
DMN = ZPOS / ZPS
Sheet1.Cells(23, 6).Value = DMN
End Sub

ここでDMNの値を四捨五入したいです。

またこれとは別に切上げ、切捨ても教えていただけるとありがたいです。

Aベストアンサー

DMN = Application.WorksheetFunction.Round(ZPOS / ZPS, 0)
で、四捨五入
DMN = Application.RoundDown(ZPOS / ZPS, 0)
で切り捨て
DMN = Application.RoundUp(ZPOS / ZPS, 0)
で切り上げです。

引数で、対象桁を変更できます。

QエクセルVBAでテキストボックスの値の取得と変更について

エクセルのVBAを使ってシート上のテキストボックスのテキストを取得・変更するマクロを作成したいと思っていますがうまく行きませんので、お知恵を拝借したいとおもいます。

環境:WindowsXPでオフィス2002
状況:
エクセルブックa.xlsのシートに「コントロールツールボックス」のテキストボックスを配置(オブジェクト名はTEXTBOX_C)
エクセルブックb.xlsにコードを書き、a.xlsのTEXTBOX_CのプロパティのValueかTextを取りだしたい

試した事:
コントロールを配置したシートに次のマクロ
TEXTBOX_C.Text = "これはコントロールのテキストボックス"
を書くとテキストボックスに文字を入れ込めますが、別のエクセルブックからだと上手く行きません。

また、オートシェイプのテキストボックスの場合は簡単に出きるのですが、コントロールツールボックスではどうしても上手く行きませんので、対象法などご存知の方いらっしゃいましたら教えてください

Aベストアンサー

エクセルを新規に開きました。
そのSheet1に(コントロールツールボックスの)TextBoxを貼りつけました。
そのBook1から、ファイル-開くで別ブックを開きました。
別ブックのMojule1側に下記を書いて
Sub test02()
MsgBox Workbooks("book1").Worksheets("sheet1").textbox1.Text
End Sub
を実行すると、Book1のTextBoxに入れた文字列が表示
されました。
がそんな質問ではないのですか。

Qエクセル VBA ユーザーフォームを閉じる

ユーザーフォームを開く時は
UserForm1.Showですが
閉じる時は?
UserForm1.Close
だとコンパイルエラーになります。
End
にするしかないですか?

Aベストアンサー

Unload Me とか Unload UserForm1 でユーザーフォームを閉じることができます。

QAccessのRefresh・Requery・Repaintの違い

Requeryはもう一度ソースレコード(テーブル)を読み込むようです。このとき、テーブルの先頭レコードに移動してしまいます。
Refreshは最新のレコード(テーブル)を再表示するような気がします。レコードの移動は起こらない気がします。
Repaintは、VBAでキャプションなどを変更したとき使っています。
でも、よくわかっていません。
どんなときにどんなメソッドを使えばいいのでしょうか?
詳しい方、よろしくお願いいたします。

Aベストアンサー

たびたびすみません。
調べてたらこんなのがでてきました。
http://www.nurs.or.jp/~ppoy/access/access/acF007.html

参考URL:http://www.nurs.or.jp/~ppoy/access/access/acF007.html

QVBA オブジェクトが空かどうか判定する

皆様のお知恵を拝借させてください。

エクセルVBAでオブジェクトを入れる変数を定義し、その変数にオブジェクト
が入っているかどうか検査したいのですがどうしたらいいでしょうか。

例えば---
Dim a As Workbook
If a <> nothing then ←この部分が分からない。このままだとエラー。
処理
End if
---------
環境
エクセル2003
WinXPsp1

Aベストアンサー

もし、aが空だったら
If a Is Nothing Then 

もし、aが空じゃなかったら
If Not a Is Nothing Then

QExcel VBAで、ユーザーフォームの値を、モジュールで使用したい。

VBA初心者です。(おそらく)基本的な質問で、申し訳ありません。
ユーザーフォーム1には、テキストボックス1とコマンドボタン1が配置されているとします。

Sub TEST ()
Dim N
Userform1.Show
MsgBox N
End Sub

Private Sub CommandButton1_Click()
Dim N
N = TextBox1.Text
UserForm1.Hide
End Sub

Sub TESTを実行した時に、ユーザーフォーム1からNの値を引き継ぐには、どうしたら良いのでしょうか?よろしくお願いします。

Aベストアンサー

'モジュールに変数宣言(グローバル変数)
'Public 宣言すると他のモジュールやフォームと
'共有できる変数になります。
Public AA As String

'sample
'A1 を実行する。

Sub A1()
Call A2
AA = InputBox("input", , AA)
End Sub

Sub A2()
AA = InputBox("input", , AA)
End Sub

QForm間の値の渡し方

1つのForm上のコマンドボタンで別のFormを表示、そこで変数に値を入れ、そのFormを閉じ、元のFormでその変数を使いたいのですが、どうもうまくいきません。
実施したやり方は、一方のFormの宣言領域で、”Public abc As String”を宣言、両方のFormの(変数に値を入れた方と変数を使う方の)プロシージャーの宣言では引数として(abc As String)と記述しました。
因みに、両プロシージャーともイベントプロシージャーです。何か基本的なことができていないのだとは思いますが、どなたか教えていただけませんか?よろしくお願いします。

Aベストアンサー

すでに何件か回答があがっていますので、少し変わった方法をご参考までに。

あまり使われませんが、Formにはtagというプロパティがあります。
これは「文字列形式であれば何でも格納できる」という、上手く使えば便利なプロパティです。

FormAからFormBを呼び出し、FormBで変更した値をFormA.tagにセットします。
ここでFormBをUnloadしてもFormA.tagの値は影響を受けないので自由に使えます。

複数の値を呼び出し元に戻してやる場合に、区切り文字(カンマなど)で連結した文字列をtagに格納し、呼び出し元で区切り文字でsplitして、複数の値を受け渡すという手法をよく使っています。


このQ&Aを見た人がよく見るQ&A

人気Q&Aランキング