• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:コンパイルエラー:型が一致しません。)

VBAコンパイルエラー:型が一致しません。

このQ&Aのポイント
  • VBA(EXCEL2007)-Win7Proでソースコードを実行すると、コンパイルエラーが発生します。
  • 問題のソースは、参考サイトの「画面遷移待受サブルーチン」です。
  • 初心者の方がコピペした結果であり、問題点の絞り込みが必要です。

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

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

こんにちは。 > コンパイルエラー:型が一致しません。 容易に再現できるエラーですが、 コンパイルエラーの原因は、引数の渡し方、です。 オブジェクト型のまま「参照渡し」として   sub1 ie または    Call sub1(ie) のようにするのが正しのですが、    sub1 (ie) などのように余分な括弧を付けてしまうと、 オブジェクト型では「値渡し」できませんので、 「型が一致しません。 」というエラーになります。 こういうのは、ベテランでも見落とすことのあるミスですが、 何か問題にあった時に、「不必要な括弧」が残っていないか、 「不必要」や「余分」を探すようにデバッグすると、 あっけない程簡単に解決できることが結構ありますね。

全文を見る
すると、全ての回答が全文表示されます。

その他の回答 (2)

回答No.2

参照設定が不足しているからだと思う。 参照設定を活用してIEオブジェクトのメソッドやプロパティを調べる http://www.macrogirls.net/iesamplecode/vbaie_day2_4.html http://www.macrogirls.net/download.html#vbaie

全文を見る
すると、全ての回答が全文表示されます。
  • trytobe
  • ベストアンサー率36% (3457/9591)
回答No.1

このように ie という名前の Object を明示的に作って、その Object である ie を引数で関数 sub1() に渡していますよ、と明示してもダメでしょうか。 '呼ばれる側 Public Sub sub1(ie As Object) End Sub '呼び出し側 Public Sub Test() Dim ie As InternetExplorer Set ie = CreateObject("InternetExplorer.Application") sub1 (ie) End Sub

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • 配列と互換性のない型の要素にアクセスしようとしまし

    以下のソースでサブルーチン呼び出し行で例外「配列と互換性のない型の要素にアクセスしようとしました」が出ます。 -------------------------------------------------------------------------- Private Sub メインルーチン()  Dim Rows() As Data.DataRow = MyDataSet.Tables(MyTableName).Select("条件") if Rows.Count <> 0 then サブルーチン (Rows(0)) end if End Sub Private Sub サブルーチン(ByRef Row As Data.DataRow) '処理 End Sub ---------------------------------------------------------------------------- サブルーチンを呼び出す前に以下のようにするとエラーはでません。 Dim Row as Data.DataRow = Rows(0) サブルーチン (Row) これはなぜなのでしょうか?RowはData.DataRow型であり、配列の要素Rows(0)もData.DataRow型でありエラーが出る意味が分からないのですが。

  • VBA「型が一致しません」とエラーが出ます

    下記記事の関連質問です。 Excel 文字列抜き出しについて https://okwave.jp/qa/q9979633.html 記事を参考に複数行にマッチするように下記のようにコードを考えましたが msplit(mRng, " ", iii)で「型が一致しません」とエラーが出ます。 なぜでしょうか? テスト用のA4セル 1 01 45124422 ミント 09/01~03/01 108 98 01/05~02/01 Option Explicit Sub test() Dim msplit As Variant Dim buf As String, i As Long, ii As Long, iii As Long, cnt As Long Dim mRng As Range For ii = 4 To Cells(Rows.Count, 1).End(xlUp).Row buf = Cells(ii, "A") For i = 1 To Len(Cells(ii, "A")) If Mid(buf, i, 1) = " " Then cnt = cnt + 1 Next For iii = 1 To cnt Set mRng = Cells(ii, "A") ’Stop Cells(iii + 1, ii) = msplit(mRng, " ", iii) Next Next Set mRng = Nothing End Sub Function msplit(ByRef mRng As Range, ByVal Spstr As String, ByVal num As Long) As Variant msplit = Split(mRng, Spstr)(num - 1) End Function

  • 型が一致しません

    下記はセルが0の時、行全体を表示しないにするようにするVBAですが、型が一致しませんとエラーになります、どこを直せばいいのですか。 Dim I As Integer Sub Macro4() For I = 4 To 76 If Cells(I, 8) = 0 Then Rows("I:I").Select Selection.EntireRow.Hidden = True End If Next I End Sub

  • 型が一致しない というエラー

    Private Sub Worksheet_Change(ByVal Target As Range) If Target = Range("B1") Then Range("B3:B8").Select Selection.ClearContents End If End Sub というコードを書いています。 B3~B8は「数字」という書式です。 型が一致しない13番のエラーが出ます。 原因と対処法を教えてください。 宜しくお願いします。

  • コンパイルエラーて なんですか!

    コンパイルエラーて なんですか! 下記の式を 張り付けるとエラーが、出ましたが、解決方法が知りたい。 Sub Macro1() For i = 1 To Sheets.Count Sheets(i).Range("C14:E14,E12,C16:E46").ClearContents Next i End Sub

  • VBで、型が一致しません、というエラーがでます

    下記のcodingが、コンパイルエラー 「型が一致しません:配列またはユーザー定数型を  指定してください。」 とエラーがでます myFileDump3()という関数を作り test、から、それを呼び出しています myFileDump3(ary1)のary1がエラーとして指摘されます WindowXPでACCESSのVBです Function test() Dim ary1(3, 3) As Long ary1(1, 1) = 11: ary1(1, 2) = 12: ary1(1, 3) = 13 ary1(2, 1) = 21: ary1(2, 2) = 22: ary1(2, 3) = 23 ary1(3, 1) = 31: ary1(3, 2) = 32: ary1(3, 3) = 33 myFileDump3 (ary1) End Function '--------------------------------------------- Function myFileDump3(ary1() As Long)    ・    ・    ・    ・

  • アクセスVBA コンパイルエラー

    フォームを開いた時にフォームの高さを設定したいので Private Sub Form_Open(Cancel As Integer) Me.Height = 12000 End Sub としてるのですが「.Height =」の部分がコンパイルエラーになってしまいます。 何がいけないのでしょうか?

  • String だと「 ByRef引数の型が一致しません 」というエラーが出ます。なぜ?

    ここで「Kaplan-Meyer 生存分析に便利なソフトを教えて」と質問した shuu_01 です。ここで VisualBasic のソースのありかを教えて頂き、自分に使いやすいようソースを書き換えようと奮闘中です(それまで VisualBasic の経験がなく 無謀!と実感中です)。 元々のソースはグラフが1本だけだったので、肺癌だと「腺癌」「扁平上皮癌」「小細胞癌」、、といろんな癌の種類別にグラフを数本 書くのが目標です。そこで、 Sub km_test() Dim nc As Integer, gr() As String nc = 2 ReDim gr(nc) gr(0) = "腺癌" gr(1) = "扁平上皮癌" gr(2) = "小細胞癌" km_group_test nc, gr End Sub Sub km_group_test(nc As Integer, gr As String) End Sub というソースを書くと: String の変数 gr の色が変わり、「 ByRef引数の型が一致しません 」というエラーが出ます。 Integer の変数 nc ではエラーが出ません。 きちんと型を一致させているつもりなのに、なぜ???

  • コンパイルエラーの解決方法が分かりません

    VB.NET(VB 2010 Express)でIE9をWebBrowserコントロールではなく直接制御するアプリを作成しています。 そこで、次のURLのVBAによるHTMLソースのフレーム処理を参考にさせて頂いています。 http://vbaie.blog111.fc2.com/blog-entry-20.html その中の下記ファンクションでコンパイルエラーとなっています。 'フレームのDocumentを取得する関数 Public Function IEFrameDocument(objIE As Object, url As String) As HtmlDocument Dim objFrames As mshtml.FramesCollection Dim frameDoc As HtmlDocument Dim i As Integer objFrames = objIE.document.frames For i = 0 To objFrames.Length - 1 frameDoc = objFrames.item(i).document If InStr(frameDoc.Url, url) Then     'コンパイルエラーの行 Exit For End If Next IEFrameDocument = frameDoc End Function コメントで表示しているエラー行のエラー内容は、「型 'System.Url' の値を 'String' に変換できません。」です。 解決方法を教えて頂きたくよろしくお願い致します。

  • Access2010 「型が一致しません。」エラー

    お世話になっております。 テキストファイルからデータを取り込んで、テーブルにあるデータと同じデータのみを表示させるプログラムがあります。 コードが「001」のように整数の場合は問題ないのですが、「A001」のように英数のデータの場合は、このエラーが出てしまいます。 「実行時エラー13 型が一致しません。」 デバッグをクリックすると、下記の部分が黄色に反転します。 「If DFirst("コード", "テーブル", "コード = '" & avarFldData(0) & "'") Then」 テキストファイルのデータがテーブルにない場合はエラーが出ませんので、一致したデータがある場合のみエラーが出ます。 VBAはあまり詳しくありませんので、エラーが出なくなる方法を教えていただければ助かります。 よろしくお願いいたします。 Private Sub Form_Load() Dim dbs As Database Dim rst As Recordset Dim strImportDir As String Dim strFile As String Dim lngFileNum As Long Dim strData As String Dim avarFldData As Variant Dim iintLoop As Integer DoCmd.Hourglass True strImportDir = Application.CurrentProject.Path & "\" strFile = strImportDir & "File.TXT" Set dbs = CurrentDb GoSub ReadFile Me.Requery DoCmd.Hourglass False Exit Sub ReadFile: Set rst = dbs.OpenRecordset("履歴", dbOpenDynaset, dbAppendOnly) lngFileNum = FreeFile() Open strFile For Input As #lngFileNum Do Until EOF(lngFileNum) Line Input #lngFileNum, strData avarFldData = Split(strData, ",", , vbTextCompare) For iintLoop = 0 To UBound(avarFldData) avarFldData(iintLoop) = Trim$(avarFldData(iintLoop)) Next iintLoop If DFirst("コード", "テーブル", "コード = '" & avarFldData(0) & "'") Then With rst .AddNew !コード = avarFldData(0) .Update End With End If ' End If Loop Close #lngFileNum rst.Close Kill strFile Return End Sub

専門家に質問してみよう