Excel2016 VBAコンパイルエラーの解消方法

このQ&Aのポイント
  • Excel2016 VBAでAttributeの箇所にコンパイルエラーと構文エラーが出る場合、正しい書き方を教えてください。
  • 質問者はWindows10とExcel2016 バージョン1809を使用しており、VBA7.1を使っています。コードを実行しようとするとエラーが発生しています。
  • Moduleの名前を変更したり、Attributesの表記を変更してもエラーが解消されません。どのようにすれば正常にコンパイルできるのでしょうか?
回答を見る
  • ベストアンサー

Excel2016 VBA

Windows10 ,Excel2016 バージョン1809 , VBA7.1を使用しています。 下記のコード(ホームページに掲載されているコードを写して実行しようとした。)で、 Attributeの箇所に、 コンパイルエラーと構文エラーが出ます。 Module1をaaaにしたり、Attributesと書き換えたりしてもエラーが消えません。 どなたか正常にコンパイルする書き方を教えてください。 お願いします。 Attribute VB_Name = "Module1" '************************************ 'ラベル発行のサンプル '************************************ Option Explicit ' 各項目の配置定義用ユーザー定義 Private Type typLocation X As Long Y As Long COL As Long End Type Private Const cnsSH1 = "DATA" Private Const cnsSH2 = "LABEL" Private Const cnsSH1 = "設定" Private Const cnsOMIT = "除外" '******************************************************************************* ' ラベル発行 '******************************************************************************* Sub PrintLabels() Dim xlApp As Application Dim WBK As Workbook '本ブック Dim SH1 As Worksheet 'DATA Dim SH2 As Worksheet 'LABEL Dim SH3 As Worksheet '設定 Dim tblLoc(1 To 10) As typLocation '項目配置定義(ユーザー定義を配列化) End Sub

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

  • ベストアンサー
  • m3_maki
  • ベストアンサー率64% (295/459)
回答No.2

Excel のモジュールにコピペするなら > Attribute VB_Name = "Module1" この行は不要です。 削除するなり、コメントアウトするなりしいぇください。 コピペせずに保存して インポートするなら そのまま メモ帳に貼り付け 「Module1.bas」という名前で保存します。 2016 で確認できませんので、違っていたら御免なさい、ですが、 VBE の画面から 「ファイル」 -「ファイルのインポート」で 「Module1.bas」を選択し、開くで Module1 が インポートされます。 インポートされたソースには Attribute VB_Name = "Module1" の記述は見えません。

situmonn9876
質問者

お礼

インポートの方法を教えてくださりありがとうございます。

その他の回答 (1)

  • notnot
  • ベストアンサー率47% (4848/10262)
回答No.1

VBAにAttribute という文は無いと思いますが、 Attribute VB_Name = "Module1" の意図は何ですか?

situmonn9876
質問者

お礼

お返事ありがとうございます。 仕事に「Microsoft Excel」を活用しようという方を応援するサイトで、VBAの便利さを紹介する記事で紹介されていた、コードを写そうとしたので意図はわかりません。インターネットで調べたりしてもわかりませんでした。

関連するQ&A

  • EXCEL2010エラーVBA

    下記を実行するとエラーになりEXCEL2010が終了してしまいます。 fDebug:0 offset00009391 がエラーメッセージです。 何が原因でしょうか。 Private Sub Worksheet_Change(ByVal Target As Range) Dim ws As Worksheet Dim rg As Range Dim r As Variant Dim c As Long Dim hanni1 As Range Dim atai As Range Set ws = Worksheets("あああ") Set rg = Worksheets("コード").Range("A1:B10") r = ws.Cells(Rows.Count, 1).End(xlUp).Row Set hanni1 = ws.Range(Cells(2, 2), Cells(r, 3)) Set atai = ws.Range(Cells(2, 3), Cells(r, 3)) atai = Application.VLookup(hanni1, rg, 2, False) End Sub

  • VBA なんですが

    VBA なんですが すべてのワークシートを順番に選択して 指定した範囲をコピーし『まとめ』と言う別のシートに貼り付けたいのですが どうしたらいいのかわかりません。 それらしいのは考えたのですが Set sh = Worksheets(sh.Name)でエラーになります。 頭がいいかた教えてください。   Dim sh3 As Worksheet Dim sh As Worksheet Dim en As Long Set sh3 = Worksheets("まとめ") For Each sh In ActiveWorkbook.Worksheets If sh.Name <> "まとめ" Then en = sh.UsedRange.Rows.Count Set sh = Worksheets(sh.Name) sh.Range(Cells(2, 1), Cells(en, 10)).Copy

  • VBAでのORの使い方

    以下のようなVBAがあります。指定したフォルダーに保存されているエクセルのファイル名を取得するものです。 ここでやりたいのは、AとJPから始まるファイルを取得したいのですがうまくいきません。これですのコンパイルエラーが出ます。 どう変更すべきかご教示願います。 Sub ファイル名取得() Const SEARCH_DIR As String = "\\SOGKF01.JP.TakataCorp.com\XXXXXXXX\YYYYY" Const SEARCH_FILE As String = "AS*.xlsm" Or Const SEARCH_FILE As String = "JP*.xlsm" Dim tmpFile As String Dim strCmd As String Dim buf() As Byte Dim FileList() As String Dim myArray() As String Dim cnt As Long, pt As Long, i As Long 続く

  • VBA EXCEL ""の付いた文字列に""""を読み込んで""""をつける方法

    EXCELのダブルクォーテーションの付いた文字列を読み込んで""""""をCSVファイルに書き込むためにはどのように記述したらよいでしょうか? CSVファイルにデータの出力はできていますがダブルクォーテーションが一つしか入らないという状況なので分かる方がいらしたら、ご教授の程お願いします。 です。 Private Const g_cnsCOLEDIT = "77777777777777777777777777777777777777777777777777" Private Function FP_EDIT_COLUMN(SH As Worksheet, GYO As Long, COL As Long) As String Dim strTEXT As String strTEXT = Trim(SH.Cells(GYO, COL).Value) Select Case Mid(g_cnsCOLEDIT, COL, 1) Case "7" ' 自動判定(ダブルクォーテーションの付いた文字のみ「""」囲い) If strTEXT = "" Then FP_EDIT_COLUMN = strTEXT ElseIf strTEXT = g_cnsDQ Then ' ダブルクォーテーション FP_EDIT_COLUMN = g_cnsDDQ & strTEXT & g_cnsDDQ Else FP_EDIT_COLUMN = strTEXT ' その他(文字列) End Select ' カラムを加算 COL = COL + 1 End Function

  • エクセルVBAで

    登録ボタンを作りたいのですが うまくいきません。 応答無しになってしまいます。 仕事でコードを入力して、住所やその他の関連事項を 登録して、検索し、封筒に宛名印刷し、登録内容の修正をしたいと思っています。 登録ボタンは下記のようなものを作りました。 Private Sub CommandButton1_Click() Dim bk As Workbook Dim sh1 As Worksheet Dim sh2 As Worksheet Dim cnt1 As Long Set bk = ThisWorkbook Set sh1 = bk.Worksheets("現場登録検索") Set sh2 = bk.Worksheets("一覧") cnt1 = 6 Do While sh2.Cells(cnt1, 2).Value <> "" cnt = cnt1 + 1 Loop '得意先CD sh2.Cells(cnt1, 2).Value = sh1.Cells(2, 3).Value '現場CD sh2.Cells(cnt1, 3).Value = sh1.Cells(3, 3).Value '送り方 sh2.Cells(cnt1, 22).Value = sh1.Cells(4, 3).Value '封筒 sh2.Cells(cnt1, 23).Value = sh1.Cells(5, 3).Value MsgBox "登録できました。" End Sub 何が悪いのでしょうか? よろしくお願い致します。

  • VBAで修正ボタンを作成

    先ほどは登録ボタンを作成したのでが、 修正ボタンもあれば便利だと思い作りたいのですが 一向にできません。 一覧表より、番号を検索して一致するセルの場所に 上書き?保存をするようにしたいのですが どのようにすればよいでしょうか? 先ほどから新たに訂正を加えたのですが、 やはりダメでした。 Private Sub CommandButton2_Click() '修正ボタン Dim bk As Workbook Dim sh1 As Worksheet Dim sh2 As Worksheet Dim cnt1 As Long Set bk = ThisWorkbook Set sh1 = bk.Worksheets("現場登録検索") Set sh2 = bk.Worksheets("一覧") cnt1 = 6 'マッチ Range("F2").Select n = ActiveCell.FormulaR1C1 = "=MATCH(RC[-1],一覧!C[-5],0)" cnt1 = n '送り方 sh2.Cells(n, 22).Value = sh1.Cells(4, 3).Value '封筒 sh2.Cells(n, 23).Value = sh1.Cells(5, 3).Value MsgBox "修正できました。" End Sub よろしくお願い致します。

  • エクセルVBA 検索表示

    エクセルVBA 検索表示 例えばBooKの名前が”DATA”で Sheet1に下記のようなデーターがある場合   A  B  C  1 w 3  w 2 え 3  r 3 q 2  y 4 w 3  う 他のエクセルBook”検索”というエクセルを開き A1セルに”3”と表示させボタンをクリックすると 下記の表のように表示させたいです。   A   B  C 1 "3” 2 w  3  w 3 え  3  r 4 w  3  う "DATA"からB列の"3"を検索されデーターそのものが A2セル以降に表示させるにはどのようにすれば 良いですか? Private Const WBHName = "DATA.xls" Private Sub CommandButton1_Click() Dim WBH As Workbook Dim SH1 As Worksheet 'WBHのSheet1をセット Dim strMyBookPath As String Dim flag As Boolean 'ブックが空いているかの判定 Dim 最終行 As Long 'SH1の最終行を格納 Dim wb As Workbook Dim lng As Long strMyBookPath = ThisWorkbook.Path If Dir(strMyBookPath & "\" & WBHName) <> "" Then flag = False For Each wb In Workbooks If wb.Name = WBHName Then flag = True Exit For End If Next wb この後に続く記述を 教えて欲しいです。

  • vbaでmsgboxの位置を指定

    http://okwave.jp/qa/q5253604.html を参考に、http://homepage1.nifty.com/rucio/main/technique/MsgBox.htmをやってみたのですが うまくいきません。 検証はエクセル・アクセス2007で行いました。 ////////////////////////////////////////////////////////////////// Option Explicit Dim App As Object Private Declare Function SetWindowsHookEx Lib "user32" Alias "SetWindowsHookExA" _ (ByVal idHook As Long, _ ByVal lpfn As Long, _ ByVal hmod As Long, _ ByVal dwThreadId As Long) As Long Private Declare Function UnhookWindowsHookEx Lib "user32" _ (ByVal hHook As Long) As Long Private Declare Function SetWindowPos Lib "user32" _ (ByVal hwnd As Long, _ ByVal hWndInsertAfter As Long, _ ByVal x As Long, _ ByVal y As Long, _ ByVal cx As Long, _ ByVal cy As Long, _ ByVal wFlags As Long) As Long Const WH_CBT = 5 Const HCBT_ACTIVATE = 5 Public Const SWP_NOSIZE = &H1 '「サイズを指定しない」オプション Public Const SWP_NOZORDER = &H4 '「Zオーダーを指定しない」オプション Public Const SWP_NOACTIVATE = &H10 Dim HookHandle As Long '元のCBTProcプロシージャへのハンドル Dim m_Left As Long 'メッセージボックスのX座標 Dim m_Top As Long 'メッセージボックスのY座標 Public Sub SetMsgBox(Left As Long, Top As Long) m_Left = Left m_Top = Top HookHandle = SetWindowsHookEx(WH_CBT, AddressOf CBTProc, App.Hinstance, App.ThreadID) End Sub Private Function CBTProc(ByVal nCode As Long, ByVal wParam As Long, ByVal lParam As Long) As Long Dim Ret As Long If nCode = HCBT_ACTIVATE Then Ret = SetWindowPos(wParam, 0, m_Left, m_Top, 0, 0, SWP_NOSIZE Or SWP_NOZORDER Or SWP_NOACTIVATE) Ret = UnhookWindowsHookEx(HookHandle) End If CBTProc = Ret End Function ////////////////////////////////////////////////////////////////// を標準モジュールに貼りつけました。 Dim App As Objectについては、参考のページにはありませんでしたが エラーになるので勝手にObjectにしました。 そしてこのコードを書いた標準モジュールに Sub test() SetMsgBox 0, 0 MsgBox "この例では左上に表示されます。" End Sub を足しました。 そして実行すると、 HookHandle = SetWindowsHookEx(WH_CBT, AddressOf CBTProc, App.Hinstance, App.ThreadID) の部分で オブジェクト変数または With ブロック変数が設定されていません。(Error 91) になります。 VBAでの位置の指定方法を教えてください!!!

  • VBAの質問です。(初心者です。。。)

    VBAの質問です。(初心者です。。。) ”作成ファイル”には複数のシート(時系列)があり、それぞれのシートに縦(ラベルA)、横(ラベルB)のデータ値が入っています。 それをVBAによって、シート(ラベルA)、縦(時系列)、横(ラベルB)となる新しい”リスク分析”ファイルを作成します。 現在出るエラーは 「オブジェクトは、このプロパティまたはメソッドをサポートしていません。」 です。 実行すると”リスク分析”ファイルを新たに作成するところまではできているのですが、そこから新しいシートを追加する前で止まっています。(そのあたりで間違いいがあると考えられます。) 考えられる原因を教えていただけないでしょうか。 以下プログラム Sub riskfile() Dim ddd As Long ddd = Format(Date, "yyyymm") Dim ttt As Long ttt = Format(Time, "hhnnss") Dim Newbook As Workbook Set Newbook = Workbooks.Add Newbook.SaveAs Filename:="リスク分析" & ddd & ttt Workbooks("作成ファイル").Worksheets(2).Activate Dim span As Integer span = Workbooks("作成ファイル").Sheets.Count - 1 '作成ファイルのシート数(時系列) Dim month As Integer Dim portfolio As Integer For portfolio = 1 To 16 '新しいシートを追加し、シートに名前(ラベルA)を定義 Dim portname As String portname = Workbooks("作成ファイル").Worksheet(2).Cells(portfolio, 3) 'ラベルAの名前を定義 Workbooks("リスク分析" & ddd & ttt).Activate Dim NewWS As Worksheet Set NewWS = Workbooks("リスク分析" & ddd & ttt).Worksheets.Add(before:=Worksheets("Sheet1")) NewWS.Name = portname For month = 1 To span '作成ファイルの時系列シートから各ラベルAのデータ行を抽出し、リスク分析ファイルのラベルAシートへ貼り付け Workbooks("作成ファイル").Worksheet(month).Range(portfolio & ":" & portfolio) _ .Copy Destination:=Workbooks("リスク分析" & ddd & ttt).Worksheet(1).Range(month & ":" & month) Next month Next portfolio End Sub

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

    下記VBAでコンパイルエラーを起こして進みません 解消法をご教授いただけると幸いです やりたいこととしては ボタンで任意のタブ区切りのテキストを指定し 特定のシートに値をコピーすることです ---- Private Sub CommandButton1_Click() Dim Sh As Worksheet Dim FileN As String Set Sh = ThisWorkbook.Sheets("import") ' <-- 読込みシート指定(※) FileN = Application.GetOpenFilename("テキストファイル,*.txt") If FileN <> "False" Then Workbooks.OpenText Filename:=FileN, StartRow:=1, DataType:=xlDelimited, TextQualifier:=xlTextQualifierNone, Tab:=True End If Set Sh = Nothing End Sub ----

専門家に質問してみよう