EXCEL2003でマクロをコピーして実行するとエラー表示が出ます

このQ&Aのポイント
  • EXCEL2003にて、特定のマクロを別のBOOKにコピーし実行すると「コンパイルエラー Sub またはFunctionが定義されていません」というエラー表示が出ます。
  • マクロのインポートを使用しても同様のエラーが発生します。
  • 解決策については調査中ですが、現時点では解決できていません。
回答を見る
  • ベストアンサー

教えてください。

教えてください。 EXCEL2003にて、以下のマクロが正常に動いているBOOKがあります。 そのBOOKのマクロをコピーして別のBOOKに貼り付けて、実行すると 「コンパイルエラー Sub またはFunctionが定義されていません」 というエラー表示となります。 いといろと調べてはいるのですが、解決できない状況です。 因みにマクロのインポートを使っても同様となります。 Sub MacroDOG() Dim FileName As String Dim strDATA As String Dim iFN As Integer 'オープンファイル番号 On Error GoTo Err FileName = ThisWorkbook.Path & "\dogs.csv" iFN = FreeFile Open FileName For Input As #iFN Line Input #iFN, strDATA Range("CX3").Value = Piece(strDATA, ",", 1) Range("CY3").Value = Piece(strDATA, ",", 2) Range("CZ3").Value = Piece(strDATA, ",", 3) Range("DA3").Value = Piece(strDATA, ",", 4) Range("DB3").Value = Piece(strDATA, ",", 5) Range("DC3").Value = Piece(strDATA, ",", 6) Range("DD3").Value = Piece(strDATA, ",", 7) Range("DE3").Value = Piece(strDATA, ",", 8) Exit Sub Err: MsgBox "確認して下さい。", vbInformation End Sub よろしくお願いいたします。

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

  • ベストアンサー
  • MARU4812
  • ベストアンサー率43% (196/452)
回答No.1

タイトルは、一覧表を見たときに判別できるよう分かり易いものを付けてください。 Piece っていう関数は見たこと無いですね。 WEB 上で検索しても引っ掛からないので、自作の関数ではないでしょうか。 通常は、標準モジュール等で定義します。 ただ、凝った人は、DLL にして参照設定する場合もあるかもです。 標準モジュール等がある場合はそれもインポート(コピーでもいいけどモジュール名とかも合わせた方が良い)してみてください。 正常に動くファイルで ・コードの Piece を選択状態にし、右クリックで「定義」に飛んでみる。 ・[F2]キーで「オブジェクトブラウザ」を表示し、Piece を検索してみる。 ・メニューの[ツール]-[参照設定]でチェックの付いている DLL を確認する。 あたりをすると何か分かるかもしれません。

do1780
質問者

お礼

タイトルの件、失礼いたしました。以後気をつけます。 ありがとうございます。 ご指摘の通り、Pieceの定義を探したところ、ありました。 この定義付きで、実行したところうまくいきました。 本当にありがとうございました。

関連するQ&A

  • ExcelでBookを開くPasswordにエラーを出さないには

    Sub Dim FileName As String FileName = "D:\集計表.xls" Dim Sheet_Name As String Dim Book_Name As String Workbooks.Open FileName:=FileName Sheet_Name = "Sheet1" Book_Name = ActiveWorkbook.Name Workbooks(Book_Name).Sheets(Sheet_Name).Select Range("A1").Select End Sub 上記の構文でBookを開く時に「Password」を要求して開くようにしています。 ただ、Passwordを間違えた時は「実行時エラー1004」とな、「デバック」するか「終了」するしかありません。 デバック」・「終了」をせずに再度Password入力に戻るにはどの様にすれば良いでしょうか。

  • Excel vba 実行エラー1004

    (1)アクティブブックの名前を取得してセルO2に貼り付けた。ex. 1234567b.CSV (2)VBAを使って1234567k.CSV におきかえた。 (3)(2)のセルに入力された内容でブックを開きたいが、エラー1004が出て開けない。 (4)開けたとして、そのブックのA1セルを 元のブックをアクティブにして D1に 貼り付けたい。 (5)またさっきのブックに戻ってF1セルを 元のブックをアクティブにして E1セルに貼り付けたい。 というようなVBAを組みたいと思っています。 現在(1)(2)はできましたが(3)でエラーが出たため止まっていますし、その後もわかりません。 Dim bb As String Dim kb As String bb = ActiveWorkbook.Name Cells(2, "O").Value = ActiveWorkbook.Name Cells(3, "O").Value = ActiveWorkbook.Name Range("O2").Formula = Replace(bb, "b.CSV", "k.CSV") kb = Range("O2") 'シート名を取得する Dim bbs As String bbs = Left(bb, 10) Cells(4, "O").Value = bbs Dim kbs As String kbs = Left(kb, 10) Cells(5, "O").Value = kbs 'コピーして貼り付ける kbn = Cells(2, 15) Workbooks.Open Filename:=kbn Range("F1").Select Range("F1").Copy として作ってるんですが、 Workbooks.Open Filename:=kbn でエラーが出てブックが開けません。 ご指導お願いします。

  • EXCEL、VBAについて

    ' GLOBAL変数の定義 Dim CurrentDir As String '現在のディレクトリ Dim ThisBook As String '現在のブック名 Dim WorkSheetName1 As String Dim WorkSheetName2 As String Dim ConfigSheetName As String Dim ListSheetName1 As String Dim ListSheetName2 As String Dim ListSheetName3 As String Dim ListSheetName4 As String Dim ListSheetName5 As String Dim ListSheetName6 As String Dim ListSheetName7 As String Dim ErrorFlag As Integer 'エラーフラグ 0:正常 1:エラー Sub 初期設定() CurrentDir = ActiveWorkbook.Path '現在のディレクトリ ThisBook = ActiveWorkbook.Name '現在のブック名 WorkSheetName1 = "work1" WorkSheetName2 = "work2" ConfigSheetName = "設定" ListSheetName1 = "****" ListSheetName2 = "****" ListSheetName3 = "****" ListSheetName4 = "****" ListSheetName5 = "****" ListSheetName6 = "****" ListSheetName7 = "****" Application.DisplayAlerts = False 'EXCELの警告を無視する End Sub Sub CSV取り込み() Dim LoadBook As String '読み込みブック名 Dim DataMaxCol As Integer '読み込みデータ有効最大カラム数 Dim WorkStartRow As Integer 'workシート開始行 Dim WorkEndRow As Integer 'workシート終了行 Dim ListMaxCol As Integer '一覧シート有効最大カラム数 Dim ListStartRow As Integer '一覧シート開始行 '初期設定コール Call 初期設定 'workシートをクリア DataMaxCol = Sheets(ConfigSheetName).Range("F2").Value WorkStartRow = Sheets(ConfigSheetName).Range("F3").Value WorkEndRow = Sheets(ConfigSheetName).Range("F4").Value Sheets(WorkSheetName1).Select Range(Cells(WorkStartRow, 1), Cells(WorkEndRow, DataMaxCol)).ClearContents '受注データファイルを選択しオープン SelectedPath = Application.GetOpenFilename("CSVファイル (*.csv), *.csv") If SelectedPath <> "False" Then Workbooks.Open Filename:=(SelectedPath) Else 'キャンセル時は終了 Exit Sub End If LoadBook = ActiveWorkbook.Name '現在のブック名 '受注データの開始行をチェック I = WorkStartRow '受注データの最終行をチェック Do Until ActiveCell.Value = "" I = I + 1 Cells(I, 1).Select Loop WorkEndRow = I - 1 '受注データをコピー Range(Cells(WorkStartRow, 1), Cells(WorkEndRow, DataMaxCol)).Select Selection.Copy 'workシートへペースト Windows(ThisBook).Activate Sheets(WorkSheetName1).Select Range("A1").PasteSpecial Paste:=xlPasteValues Application.CutCopyMode = False '受注データファイルをクローズ Windows(LoadBook).Close End Sub このマクロを実行するとインデックスが有効範囲にありませんとなりエラーとなってしまいます。 あと最後のデータファイルをクローズできればOKなのですが・・。 どこがいけないんでしょうか?

  • マクロ:別ブックのデータの値を転記

    ExcelでVlook関数を使ってデータを検索していたのですが、マスタの件数(15,000件)と数式が多くなってしまいブックの容量が大きくなってしまって動きづらくなってしまったので、マスタと検索のブックに分け、マクロを使おうと思ってます。 簡単にいうと、 【マスタブック】   A列  B列 1  1   あ 2  2   い 【検索ブック】   A列  B列 1  2   い 2 検索ブックA列1行目に、「2」を入力してマクロを実行すると「い」が表示されるようにしたいのです。   開いておくのは検索ブックはのみです。 Sub 転記() Dim マスタ As Workbook Dim 検索 As Workbook Dim 行, 数字 As Long Dim Bname As String Bname = ActiveWorkbook.Name Workbooks.Open Filename:="C:\Documents and Settings\mi200274\デスクトップ\\マスタ.xls" Workbooks("マスタ.xls").Activate Set マスタ = Workbooks("マスタxls") Set 検索 = ThisWorkbook Set ws1 = マスタ.Worksheets("Sheet1") Set ws2 = 検索.Worksheets("Sheet1") On Error Resume Next 行 = 1 Do Until ws2.Range("A" & 行).Value = "" 数字 = ws2.Range("A" & 行).Value 対象 = ws1.Range("A:A").Find(数字, lookat:=xlWhole).Row ws2.Range("B" & 行).Value = ws1.Range("B" & 対象).Value 行 = 行 + 1 Loop ActiveWorkbook.Close Workbooks(Bname).Activate End Sub 以上のマクロを知人に教わりながら作ってみたのですが、マスタを一度開かないと検索はできないのでしょうか? 重たいデータなのでできれば開かずに検索して値を転記したいので、そのようなコマンド等ご存知の方教えてください。 ちなみにマクロは「新しいマクロの記録」から作る程度の初心者です。よろしくお願いします。

  • vba ファイルの移動について

    フォルダAの中にあるたくさんのpdfファイルの中から、 ファイル名の頭文字3つがE列に記載した「aaa」だったら フォルダBに移動させるという内容にしたいです。 ネット検索などで、近いものを作成しましたが(下に貼り付け)、 下から4行目、「fso.moveFile FolderA & "\" & fileName, FolderB & "\" & fileName」で 「実行時エラー'53'  ファイルが見つかりません。」 とエラーが出てしまいます。 どの様に書き直せばよいのでしょうか? どなたかご存じでしたら、ぜひお教え下さい。 よろしくお願いします。 エクセル2010を使用しています。 Sub CheckAndMoveFiles() Dim FolderA As String Dim FolderB As String FolderA = Range("D1").Value FolderB = Range("B2").Value Dim fso As Object Set fso = CreateObject("Scripting.FileSystemObject") Dim ws As Worksheet Set ws = ActiveSheet Dim lastRow As Long lastRow = ws.Range("E" & Rows.Count).End(xlUp).Row Dim r As Long Dim fileName As String For r = 1 To lastRow If ws.Cells(r, "E").Value <> "" Then fileName = ws.Cells(r, "E").Value dFileName = Dir(FolderA & "\" & Left(fileName, 3) & "*.pdf") Do While dFileName <> "" dFileName = Dir() Loop fso.moveFile FolderA & "\" & fileName, FolderB & "\" & fileName 'ここでストップ End If Next End Sub

  • テキストボックスの日付の変更時のみマクロ実行する

    Windows7とExcel2007でマクロ作成中の、初心者です。 (1)ブックAにマクロ書き込み、Bブックに処理データがあります。 (2)Bブックは毎月一回だけ、書式の変更マクロを実行します。 (3)そのため、苦肉の策として Range("E3")が0のときは、実行するが、1のときはマクロ実行しないように しています。 (4)以上の方法では、更新するときは、いちいちRange("E3")の値を手動で0に する必要があります。面倒です。 (5)そこでAブックのユーザーフォームに日付の入ったテキストボックスを取り付け ここの日付けが変更されたときだけ、マクロを実行するようにしたいのですが。 難しくて出来ません。教えていただきたいです。お願いします。 Sub 書式の変更操作() Application.ScreenUpdating = False Dim n As Long Dim myBtn As Integer Dim myMsg As String, myTitle As String Dim mydate As Date mydate = Worksheets("集計").Range("D2").Value If Range("E3").Value = 0 Then myMsg = "この" & Format(Range("D2").Value, "m月") & "分 表の書式等を更新します。" myTitle = "書式変更の確認" myBtn = MsgBox(myMsg, vbOKOnly + vbExclamation, myTitle) 書式更新のマクロ実行 Range("E3").Formula = "1" ’ここで次回起動時マクロ実行しない MsgBox "書式を更新しました。" Else MsgBox "既に変更済みです。", vbOKOnly + vbExclamation Exit Sub End If Application.ScreenUpdating = True End Sub

  • エクセルで100以上のシートからデータを読み込むのに時間がかかり困っています

    エクセル2003でAuto_Open時にデータの更新をしてみましたが、一々画面を読んでしまい時間がかかってしまいます。 まだコードがよく理解できていませんので、どなたかよい方法を教えてください。 コードは以下のようです。 シートは180あり、一覧表にシート名の表を作りました。 よろしくお願いします。 Sub Auto_Open() 'シートオープンで一覧表のデータ更新 '変数の宣言 Dim MyDA As Integer Dim MyDB As String Dim MyDC As String Dim MyDD As String Dim MyDE As String Dim MyDF As String Dim MyDG As String Dim MyDH As String Dim MyDI As String Dim MyDJ As String Dim MyDK As String For MyDA = 3 To 173 '一覧表を呼びシート名の代入 Worksheets("一覧表").Activate MyDB = Range("T" & MyDA).Value '必要なデータの代入 Worksheets(MyDB).Activate MyDC = Range("J3").Value MyDD = Range("J4").Value MyDE = Range("B6").Value MyDF = Range("F6").Value MyDG = Range("K6").Value MyDH = Range("C9").Value MyDI = Range("B8").Value If MyDI = "" Then MyDI = "-" End If MyDJ = Range("F8").Value If MyDJ = "" Then MyDJ = "-" End If MyDK = Range("K8").Value If MyDK = "" Then MyDK = "-" End If Sheets("一覧表").Activate Range("B" & MyDA) = MyDC Range("C" & MyDA) = MyDD Range("D" & MyDA) = MyDE Range("E" & MyDA) = MyDF Range("F" & MyDA) = MyDG Range("G" & MyDA) = MyDH Range("H" & MyDA) = MyDI Range("I" & MyDA) = MyDJ Range("J" & MyDA) = MyDK Next MyDA End Sub

  • screenupdatingが機能しなくて困ってます

    お願いします。 長文失礼します。 下記マクロを実行しても、screenupdatingが機能せず、 ブック展開やページ移動が丸見えで、わずらわしいです。 ブックopenや他のマクロに移ると機能しないものなのですか? それとも、コード記述に誤りがあるのでしょうか? excel2007 「管理表.xlsmにて指定された過去データ.csvファイルを開いて、それを表示用xlsmブックに書き出し表示するマクロ」 (管理表.xlsm、表示.xlsmそれぞれに) Thisworkbook.Open にて「画面最大化」のマクロ (管理表.xlsmファイルの標準モジュールに記載) Sub 検索する() On Error GoTo ErrorHandler Dim bn As String Dim sheetn As String Dim セル1 As String Dim セル2 As String Dim セル3 As String Dim 年 As String Dim 月 As String Dim 日 As String Dim 検索日 As String Dim アドレス As String Dim nsheet As String Dim nbook As String Dim csheet As String Dim cbook As String Dim nアドレス As String Dim fso Dim sFile As String bn = "管理表.xlsm" sheetn = "検索" セル1 = "M30" セル2 = "Q30" セル3 = "V30" 年 = Workbooks(bn).Sheets(sheetn).Range(セル1).Value 月 = Workbooks(bn).Sheets(sheetn).Range(セル2).Value 日 = Workbooks(bn).Sheets(sheetn).Range(セル3).Value 検索日 = (年) & (月) & (日) & (235400) アドレス = "C:\モニターシステム\管理者用\DB\DB" & (検索日) & ".csv" 'パス変更注意 nアドレス = "C:\モニターシステム\管理者用\system\program\表示.xlsm" cbook = "DB" & (検索日) & ".csv" csheet = "DB" & (検索日) nbook = "表示.xlsm" nsheet = "手動操作" Workbooks.Open Filename:=nアドレス, ReadOnly:=True Workbooks(nbook).Sheets("検索中").Select Application.ScreenUpdating = False sFile = アドレス Set fso = CreateObject("Scripting.FilesystemObject") If fso.FileExists(sFile) = True Then Workbooks.Open Filename:=アドレス Workbooks(cbook).Sheets(csheet).Copy_After:=Workbooks(nbook).Sheets(nsheet) Application.Run (nbook) & "!" & "データ転送" '転送表示マクロ Application.Run (nbook) & "!" & "シート保護" 'シート保護マクロ UserForm4.Show (vbModeless) Else MsgBox "ファイルが存在しません" End If Exit Sub ErrorHandler: MsgBox "検索表示に失敗しました。入力数字を確認してください。 ※一桁の数字は、必ず先頭に0を付けてください。", vbInformation, "検索失敗" Err.Clear End Sub (workbook(表示.xlsm)の標準モジュールに記載) Sub データ転送() Dim bn As String Dim sheetn As String Dim セル1 As String Dim セル2 As String Dim セル3 As String Dim 年 As String Dim 月 As String Dim 日 As String Dim 検索日 As String Dim csheet As String Dim ccell As String Dim psheet As String Dim pcell As String Dim pbook As String Dim cbookad As String bn = "管理表.xlsm" '変更注意 sheetn = "検索" セル1 = "M30" セル2 = "Q30" セル3 = "V30" 年 = Workbooks(bn).Sheets(sheetn).Range(セル1).Value 月 = Workbooks(bn).Sheets(sheetn).Range(セル2).Value 日 = Workbooks(bn).Sheets(sheetn).Range(セル3).Value 検索日 = (年) & (月) & (日) & (235400) cbook = "DB" & (検索日) & ".csv" cbookad = "C:\モニターシステム\管理者用\DB\DB" & (検索日) & ".csv" pbook = "表示.xlsm" csheet = "DB" & (検索日) ccell = "A3:P160" psheet = "管理" pcell = "F10:P160" Workbooks(pbook).Activate Application.ScreenUpdating = False ThisWorkbook.Worksheets("管理").Visible = xlSheetVisible Workbooks.Open Filename:=cbookad Workbooks(cbook).Sheets(csheet).Range(ccell).Copy _ Workbooks(pbook).Sheets(psheet).Range(pcell) Workbooks(cbook).Close savechanges:=False Sheets("記録表").Select Range("A1").Select ThisWorkbook.Worksheets("管理").Visible = xlSheetHidden UserForm14.Show '終了ボタン Application.ScreenUpdating = True End Sub 汚く拙いマクロで申し訳ありませんが、 宜しくお願いします。

  • AccessからExcel内のマクロ無効について

    いつもお世話になっております 以下の内容についてご存知の方、ご教授お願い致します win2000 office2000 マクロを含むExcelファイル内のデータをマクロを無効にし アクセスから取り込むという処理を行いたいのですが、何故か マクロが無効になりません。WinXP、Office2000の環境ですと マクロを実行せず走るのですがwin2000だとダメです win2000だとマクロを無効には出来ないのでしょうか? Dim objMyxl As Object Dim wbk As Excel.Application Dim vrtA As Variant Dim intCnt As Integer On Error GoTo err Set objMyxl = CreateObject("Excel.Application") objMyxl.EnableEvents = False objMyxl.Workbooks.Open Filename:="C:\test\Makuro.xls"  ←マクロが走る vrtA = objMyxl.worksheets(1).Range("A1").CurrentRegion.Value objMyxl.Workbooks.Close objMyxl.Quit objMyxl.EnableEvents = True ちなみに、Excelのマクロ側はこの様な感じでテストしてます Private Sub Workbook_Open() MsgBox "open" End Sub

  • 配列のメリットは?

    下記のコードは同じ動作をします。 Sub 普通() Dim moji1 As String Dim moji2 As String moji1 = Range("a1").Value moji2 = Range("a2").Value MsgBox moji1 & moji2 End Sub --------------------------------------------- Sub 配列() Dim moji(2) As String moji(1) = Range("a1").Value moji(2) = Range("a2").Value MsgBox moji(1) & moji(2) End Sub こういう場合は配列を使ったほうがいいのでしょうか? それとも配列は避けたほうがいいのでしょうか?

専門家に質問してみよう