How to Use Functions Defined in a Standard Module on a Form in Visual Basic 6.0

このQ&Aのポイント
  • Learn how to use functions defined in a standard module on a form in Visual Basic 6.0.
  • Make changes to the code to make the functions accessible on the form.
  • Use the viVPrintf function in the standard module to print formatted output to the instrument.
回答を見る
  • ベストアンサー

定義した関数がフォームで使用できません。

Visual Basic初心者です。 VB6.0を使用しています。 標準モジュールで関数を定義したのですが、フォームでその関数を使用することができません。 標準モジュールで定義した関数をフォーム上で使用するには、どのような点を変更すればよろしいでしょうか。 フォーム上コード抜粋 Sub test() Dim stats As Long Dim vi As Long stats = viVPrintf(vi, "*RST" + Chr$(10), 0) End Sub 標準モジュール上コード抜粋 Global Const VI_SPEC_VERSION = &H400000 Declare Function viVPrintf Lib "VISA32.DLL" Alias "#270" (ByVal vi As Long, ByVal writeFmt As String, params As Any) As Long

質問者が選んだベストアンサー

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

関数やFunctionに、Public属性やPrivate属性を付けるようにするべきです。 この場合、 Public Declare Function hogehoge() としないと、Private属性のFunctionになり、外部からアクセスできません。

ibfezuki
質問者

お礼

有難うございます。 関数をフォームで使えるようになりました。

その他の回答 (2)

  • uruz
  • ベストアンサー率49% (417/840)
回答No.3

No,1です 失礼しました、質問を読みそこねていました。 No.2さんの回答が正解です。 Declare定義をパブリック化してください。 Public Declare Function viVPrintf Lib "VISA32.DLL" Alias "#270" (ByVal vi As Long, ByVal writeFmt As String, params As Any) As Long

ibfezuki
質問者

お礼

回答有難うございます。 助かりました。

  • uruz
  • ベストアンサー率49% (417/840)
回答No.1

Sub test() ↓↓↓ Public Sub test() で、いかが?

関連するQ&A

  • MSAccess で database定義されていない?

    Accessでレコードのデータを読もうと標準モジュールに次のプログラムを作りました Option Compare Database Public longTATENO As Long Public longYOKINO As Long Public Sub no_gen() Dim dbs As database Dim RS As Recordset Set dbs = CurrentDb Set RS = dbs.Openrecordset("M_基本情報") longTATENO = RS![立替処理No] longYOKINO = RS![預金処理No] End Sub 別のフォームを開くときに no_gen と書きそのフォームを開くと dbs As database の所が反転表示になり コンパイルエラー  ユーザ定義型は定義されていませんと出ます。 何が悪いのでしょう? Access初心者ですよろしくお願いします

  • コマンドボタンにEXEファイルのアイコンを表示

    コマンドボタンにEXEファイルのアイコンの表示に ついてWebで色々と調べてやってみたのですが、 どうも上手くいきません・・・。(^^; 下記の条件・コードでやってみました。 原因等わかる方いましたら、どうか宜しくお願いします。 ---環境--- OS:Windows2000 Pro VB:VB6 Pro SP6 ---ソースコード(標準モジュール)--- Public Declare Function DrawIconEx Lib "USER32" (ByVal hDC&, ByVal xLeft&, _ ByVal yTop&, ByVal hIcon&, ByVal cxWidth&, ByVal cyWidth&, ByVal istepIfAniCur&, _ ByVal hbrFlickerFreeDraw&, ByVal diFlags&) As Long Public Declare Function ExtractIconEx Lib "shell32.dll" Alias "ExtractIconExA" _ (ByVal lpszFile As String, ByVal nIconIndex As Long, phiconLarge As Long, _ phiconSmall As Long, ByVal nIcons As Long) As Long Public Const DI_NORMAL = &H3 ---ソースコード(フォームモジュール)--- Private Sub Command1_Click() Dim Ret As Long Dim nFile As String Dim L As Long Dim S As Long nFile = "C:\Windows\calc.exe" Ret = ExtractIconEx(nFile, 0, L, S, 1) DrawIconEx Form1.Picture1.hDC, 0, 0, L, 0, 0, vbNull, 0, DI_NORMAL Set Form1.Command1.Picture = Form1.Picture1.Image End Sub

  • VBA ユーザーフォームの×ボタン制御の不具合

    PowerPoint VBAで複数のユーザーフォームからなるVBAマクロを作成しました。 フォーム内の「次へ」「前へ」ボタンでのみ、マクロの実行制御をしているので、途中で右上の×を押されると、想定外エラーが発生します。 そこで、一番下に貼りつけたようなコードを全てのフォームに挿入することで、右上の×が表示されないようにしました。 あくまでフォームにしかコードは埋め込んでいません。 (標準モジュール、クラスには入ってません) ですが、極稀に、「フォームの右上×」ではなく、「PowerPointの右上×」が非表示になってしまう現象が発生します。 いろいろやるうちに再現はするのですが、厳密な再現手順がよくわかりません。 状況と下記ソースから、どこらへんに原因がありそうかアドバイス頂けないでしょうか? 全コードは出せない部分が多いのですが、アドバイスにあたり必要なコードがあれば、別途貼らせて頂きます。 Private Const GWL_STYLE = (-16) Private Const WS_SYSMENU = &H80000 ' ウィンドウに関する情報を返す Private Declare Function GetWindowLong Lib "USER32.dll" Alias "GetWindowLongA" (ByVal hWnd As Long, ByVal nIndex As Long) As Long ' ウィンドウの属性を変更 Private Declare Function SetWindowLong Lib "USER32.dll" Alias "SetWindowLongA" (ByVal hWnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As Long ' Activeなウィンドウのハンドルを取得 Private Declare Function GetActiveWindow Lib "USER32.dll" () As Long ' メニューバーを再描画 Private Declare Function DrawMenuBar Lib "USER32.dll" (ByVal hWnd As Long) As Long ' フォームアクティブ時処理 Private Sub UserForm_Activate() Dim hWnd As Long Dim Wnd_STYLE As Long hWnd = GetActiveWindow() Wnd_STYLE = GetWindowLong(hWnd, GWL_STYLE) Wnd_STYLE = Wnd_STYLE And (Not WS_SYSMENU) SetWindowLong hWnd, GWL_STYLE, Wnd_STYLE DrawMenuBar hWnd End Sub

  • VBA 標準モジュールとフォーム

    ある標準モジュール内で生成した変数の値をフォームのコマンドボタンをクリックしたら表示されるプログラムはどうやってつくるのですか? 標準モジュール sub test() dim a as integer dim b as integer dim sum as string a=5 b=1 sum=a+b End sub フォームのコマンドボタンクリック Sub CommandButton1_Click() MsgBox sum End Sub 標準モジュールで計算した答えがフォームのコマンドボタンをクリックしたら答え6が表示されるようにしたいのですが、どうしたらできますか?

  • VBAでユーザーフォームからクラスモジュールの関数を呼び出したい

    ExcelのVBAでの質問です。 クラスモジュールよりユーザーフォームを呼び出し、そこから呼び出したクラスモジュールにある関数を呼び出したいと思っています。 ところが、実行すると 実行時エラー'91': オブジェクト変数またはWithブロック変数が設定されていません。 と表示されてしまいます。 以下に、コードを抜粋します。 ------------------------------------------------------------ ・ClassDataBase(クラスモジュール) Public Function EmployeeEdit() Load DBUserEdit DBUserEdit.Show Unload DBUserEdit End Function Public Function DataBaseRead(ByVal Table As Variant, Optional ByVal Filter As Variant) DataBaseBook.Sheets(Table).Copy After:=Sheets(Sheets.Count) ActiveSheet.Name = "temp" Range(Range("B3"), ActiveCell.SpecialCells(xlCellTypeLastCell)).Select End Function ------------------------------------------------------------ ・DBUserEdit(ユーザーフォーム) Private Sub UserForm_Initialize() Dim DB As New ClassDataBase DBAuthority.List = Array("Admin", "User", "Data") DBAuthority.Value = "Admin" 'この次の行でエラーを起こしていると思われます DB.DataBaseRead ("社員情報") End Sub ------------------------------------------------------------ どうすればいいのでしょうか? よろしくお願いいたします。

  • VB.netで標準モジュールからフォームを呼び出す

    お世話になります。 標準モジュールから以下のようにフォームを呼び出しているんですがうまく表示されません。 どこが悪いんですか? 標準モジュール内----------------------   Public Sub Main()     Dim frm1 As New Form1     frm1.Show()   End Sub

  • VB6.0 テキストデータの受け取り

    VB初心者です。 VB6.0を使用しています。 Agilentのスペアナからのトレースデータをテキストで、"RecvData1"という文字列に受け取らせたいと考えています。 下記のように記述したのですが、RecvData1にテキストデータをうまく受け渡すことができません。 どこを改善すればよろしいでしょうか。 Dim RecvData1 As String stats = viVPrintf(vi, "TRAC:DATA? TRACE1" + Chr$(10), 0) stats = viVScanf(vi, RecvData1, 0) viVScanfの定義 ↓ Public Declare Function viVScanf Lib "VISA32.DLL" Alias "#272" (ByVal vi As Long, ByVal readFmt As String, params As Any) As Long なお、「stats = viVPrintf(vi, "TRAC:DATA? TRACE1" + Chr$(10), 0)」の部分のコマンドが測定機に正しく送られていることは確認済みです。 やりたいことをVisa Assistantを使用して行った場合のC言語の記述と結果 ↓ -------------------------------------------------------------------- viPrintf(vi,"TRAC:DATA? TRACE1\n"); char buf[32768]; int bufLength = sizeof(buf); ViScanf(vi,"%#t", &bufLength, buf); buf[] = {"-28.986280,-30.730440,-44.042957,-68.885155,-80.233..... bufLength = 5071; --------------------------------------------------------------------

  • (VBA)ユーザーフォームの値を、モジュールで使用

    ユーザーフォームを使用したく UserForm1に以下を配置 TextBox1 TextBox2 CommandButton1 CommandButon1に以下のコード書き込みました Private Sub CommandButton1_Click() Dim N As Single Dim M As Single N = UserForm1.TextBox1.Text M = UserForm1.TextBox2.Text Unload UserForm1 End Sub 標準モジュールに以下を記載して ユーザーフォームの値を、モジュールで使用したいのですが [「M=~」で型が一致しません(エラー13)がでます。 「M=~とN=~」 を削除すると MsgBoxの値がM,Nともにゼロになります Public M As Single Public N As Single UserForm1.Show 1 M = UserForm1.TextBox1.Text     ----> ここでエラー13 N = UserForm1.TextBox1.Text MsgBox M MsgBox N ------------------------------ どこでコードが間違っていますか ?

  • フォームを作成すると同時にイベントを作成する方法は

    フォームを作成すると同時にイベントを作成する方法は? アクセスなのですが 標準モジュールで Sub フォームを作成() Dim myForm As Form Set myForm = CreateForm DoCmd.Close acForm, myForm.Name, acSaveYes End Sub をしたと同時に、 そのフォーム内に Private Sub Form_Open(Cancel As Integer) MsgBox "開きました" End Sub のようなイベントを同時に生成するにはどうすればいいでしょうか? クラスモジュールを使うのですか? クラスモジュールの使い方がまったくわからないのですが サンプルコードを頂けないですか?

  • 変数の扱いについて

    こんにちは。お世話になります。 ユーザーフォームモジュールで宣言した変数を標準モジュールのサブプロシージャ内で使うには どのようにしたらよいのでしょうか? ====== ユーザーフォームモジュール ======= Dim MyData1 as Long Dim MyData2 as Long Private Sub CommandButton1_Click() For MyData1 = 1 To 10 MyData2 = MyData1 * 2 Call test1 Call test2 Next MyData1 End Sub ====== 標準モジュール ======= Sub test1() Worksheets("Sheet1").Range("A" & MyData1).value = MyData2 * MyData2 End Sub Sub test2() Worksheets("Sheet2").Range("A" & MyData1).value = MyData2 + MyData2 End Sub For~Nextは標準モジュール内ではなくユーザーフォームモジュール内に作りたいのです。 おわかりの方よろしくお願いしますm(_ _)m