• 締切済み

サンプルプログラムでエラーが出てしまいます、対処法を教えて下さい。

Sub test写真の連続挿入()   Dim myDir As String   Dim myFile As String   Dim i As Integer   Dim n As Integer   n = 10   myDir = "D:\写真\" myFile = Dir(myDir, vbNormal)   Application.ScreenUpdating = False   Do Until myFile = ""   If myFile <> "." And myFile <> ".." Then   If (GetAttr(myDir & myFile) And 16) <> 16 Then   i = i + 1   With ActiveSheet.OLEObjects("Image" & i)    .Object.PictureSizeMode = 3    .Object.Picture = LoadPicture(myDir &myFile)   End With   If i = n Then Exit Do   End If   End If   myFile = Dir   Loop   Application.ScreenUpdating = True End Sub このWith ActiveSheet.OLEObjects("Image" & i)の行でエラーが出てしまいます、対処法を教えて下さい。( 実行時エラー'1004'OLEObjects プロパティを取得できません)

みんなの回答

  • watabe007
  • ベストアンサー率62% (476/760)
回答No.1

アクティブシート上のイメージコントロールに写真を貼り付ける様になっているので 写真の数だけイメージコントロールが必要です。 [表示]-[ツールバー]-[コントロールツールボックス]-[イメージ]

yosio3198
質問者

お礼

ありがとうございました。

yosio3198
質問者

補足

元のプログラムのIf (GetAttr(myDir & myFile) And 16) <> 16 Then・・・の行の16、16はなにを意味するのでしょうか。低レベルの質問ですが教えて下さい。

関連するQ&A

  • エクセルにフォルダにある画像を貼付&整列する方法

    下記にあるマクロより、 選択したフォルダ内の画像ファイル(jpgファイル)すべてをA列に挿入、 B列にA列のファイル名の書き込みは出来ましたが、、、 この画像ファイルをファイル名ごとに整列する方法をお教え願います。 目的は、画像を横に並べ写真を比較したいです。 (例) 頭に「1」が付くファイル名・・・A列 頭に「2」が付くファイル名・・・C列 頭に「3」が付くファイル名・・・E列 よろしくお願いします。 (マクロ) Sub InsertPictures()  Dim i As Integer  Dim myDir As String  Const myHeight = 200 '行の高さ。0-409を指定。写真のサイズがこれで調整される。  Const myWidth = 50 '列の幅。0 - 255を指定。  Dim myFName As String    myDir = Application.GetOpenFilename(FileFilter:="すべての図(*.jpg),*.jpg")  If myDir = "False" Then Exit Sub  myDir = Left(myDir, Len(myDir) - Len(Dir(myDir)))    Application.ScreenUpdating = False   ActiveSheet.DrawingObjects.Delete   Columns(2).ClearContents   Rows.AutoFit      i = 1   myFName = Dir(myDir & "*.jpg")     Do While myFName <> ""    With Cells(i, 1)     .Activate     .RowHeight = myHeight    End With    With ActiveSheet     .Pictures.Insert myDir & myFName     With .Shapes(i)      .LockAspectRatio = msoTrue      .Height = myHeight     End With    End With    Cells(i, 2).Value = myFName    myFName = Dir    i = i + 1   Loop   Columns(1).ColumnWidth = myWidth   Columns(2).AutoFit  Application.ScreenUpdating = True End Sub

  • ExcelのAutoFilter への変数の使用がうまく行きません!

    ExcelのAutoFilter への変数の使用がうまく行きません! Windows XP Home Edition SP3 Office XP Personal 2002 Excel 2002 下記の NNN に 「 InputBox に 入力した整数 」 を変数で使用したいのですが、 どのようにすればよろしいでしょうか? 何卒、ご教示のほどをお願い致します。 Sub TEST1() Dim NNN As Integer Dim msg As String Dim i As Integer Application.ScreenUpdating = False   msg = "【整数】 を入力してください。"   NNN = InputBox(msg)   If ActiveSheet.AutoFilterMode Then    With ActiveSheet.AutoFilter    For i = 88 To 90    .Range.Rows(1).Cells(i).AutoFilter Field:=i, Criteria1:="<=NNN" '←この NNN です    Next i   End With   End If Application.ScreenUpdating = True End Sub

  • Excelの既存シートへの写真自動貼付け

    With ActiveSheet.OLEObjects("Image" & i) .Object.PictureSizeMode = 3 .Object.Picture = LoadPicture(myDir & myFile) ・・・のようなimage等を使わず、単純に貼りつけるだけのプログラムを教えて下さい。  具体的にはエクセルの挿入で貼りつけた図1~n の写真を得ることです。

  • 写真をリンクではなく挿入する

    リンク元の写真を削除して開くと 「元のリンクされたイメージを表示できません・・・・」と、なります。 ならないようにするための、挿入方法を教えてください。 拙策な質問ですが、よろしくお願いします。 Application.ScreenUpdating = False Dim EndRow As Long Dim j As Integer Dim shp As Shape Dim myFolder As String, myFile As String For Each shp In ActiveSheet.Shapes EndRow = Application.Max(EndRow, shp.BottomRightCell.Row) Next Worksheets("施工写真【T】").Cells((EndRow) + 3, 3).Activate With Application.FileDialog(msoFileDialogFolderPicker) .Title = "*** 対象フォルダを選択し、[OK]をクリック ***" .InitialFileName = "D:\" If .Show = True Then myFolder = .SelectedItems(1) myFile = Dir(myFolder & "\*.jpg") Do While myFile <> "" ActiveSheet.Pictures.Insert(myFolder & "\" & myFile).Select With Selection .Top = ActiveCell.Top .Left = ActiveCell.Left .Width = ActiveCell.Width * 14 .Height = ActiveCell.Height * 8 End With ActiveCell.Offset(11, 0).Activate myFile = Dir() Loop Else Exit Sub End If End With 写真整理.写真NO.Value = ((EndRow) / 11) Worksheets("施工写真【T】").Cells(1, 1).Value = 1 For j = 11 To EndRow Step 11 Worksheets("施工写真【T】").Cells(j, 1).Value = Cells(j - 11, 1) + 1 Next j ActiveCell.Offset(0, 0).Activate Unload Me 写真整理.Show vbModeless Application.ScreenUpdating = True

  • VBA実行時のエラー

    下記のプログラムは私が作った物では無いのですが、作った方と連絡をとる事が出来なくなってしまった為、質問させて頂きます。 このプログラムをシートから実行した所 エラー:400『既にフォームは表示されています。モーダルにできません。』 なるものが表示されてしまいます。 またコードを記述する所から実行しますと 実行時エラー:1004『アプリケーション定義またはオブジェクト定義のエラー』 となってしまいます。 私の努力が足りないのは重々承知ですが、解決する事が出来ません。 皆様のお力を借りることが出来たらと思い投稿しました。 宜しくお願い致します。 Sub syoutotumen() Dim i As Long Dim j As Long Dim k As Long Dim kyori As Long Dim n As Integer n = 1 i = 1 j = 1 k = 1 Const cnsYEN = "\" Dim xlAPP As Application Dim objWBK As Workbook Dim strPATHNAME As String Dim strFILENAME As String strPATHNAME = "C:\Documents and Settings\tata41\デスクトップ\画像処理\" If strPATHNAME = "" Then Exit Sub strFILENAME = Dir(strPATHNAME & "dem******", vbNormal) If strFILENAME = "" Then MsgBox "このフォルダにはExcelワークブックは存在しません" Exit Sub End If Set xlAPP = Application With xlAPP .ScreenUpdating = False .EnableEvents = Fales .EnableCancelKey = xlErrorHandler .Cursor = xlWait End With Set WS1 = Worksheets("sheet1") Range("A1") = "0" Range("A2") = "1" Range("A1:A2").Select Selection.AutoFill Destinaton:=Range("A1:A512") Do While strFILENAME <> "" DoEvents If swESC = True Then If MsgBox("ESCが押されました。ここで終了しますか?", vbInformation + vbYesNo) = vbYes Then GoTo Button1_Click_Exit Else swESC = False End If End If xlAPP.StatusBar = trFILENAME & "処理中..." Set objWBK = Workbooks.Open(Filename:=strPATHNAME & cnsYEN & strFILENAME, UpdateLinks:=False, ReadOnly:=True) Do If Cells(i, 2) = 255 Then Exit Do i = i + 1 Loop Do If Cells(j, 3) = 255 Then Exit Do j = j + 1 Loop Do If Cells(k, 4) = 255 Then Exit Do k = k + 1 Loop kyori = (i + j + k - 21) / 3 WS1.Cells(n, 2) = kyori n = n + 1 i = 1 j = 1 k = 1 objWBK.Close savechanges:=False strFILENAME = Dir Loop GoTo Button1_Click_Exit Button1_Click_ESC: If Err.Number = 18 Then swESC = True Resume ElseIf Err.Number = 1004 Then Resume Next Else MsgBox Err.Description End If Button1_Click_Exit: With xlAPP .StatusBar = False .ScreenUpdating = True .EnableEvents = True .EnableCancelKey = xlInterrupt .Cursur = xlDefault Set objWBK = Nothing Set xlAPP = Nothing End With End Sub

  • 一部マクロを変更したいので教えてください。

    現在、下記のようなマクロを使用しています。 Sub sample() Dim myFile As String, myPath As String, i As Long Application.ScreenUpdating = False myPath = InputBox("フルパスでフォルダーを指定") myFile = Dir(myPath & "\*.xls", vbNormal) Do Workbooks.Open myPath & "\" & myFile For i = 1 To ActiveWorkbook.Sheets.Count If WorksheetFunction.CountA(Sheets(i).Range("B7:B11")) = 0 Then Sheets(i).Range("B7") = "*" End If Next ActiveWorkbook.Close True myFile = Dir() Loop While myFile <> "" Application.ScreenUpdating = True MsgBox "完了 !!" End Sub 上から4行目のmyPath = InputBox("フルパスでフォルダーを指定")を パスを入力するマクロではなくてもっと簡単にフォルダを選択するマクロに変更したいのですが どうすればいいですか?

  • マクロを使用してCSVファイルの結合を行いたい

    過去の質問の中から、素晴らしい結合のマクロを見つけましたが、パソコンをwindows7にエクセルを エクセル2010に変更した後、マクロが使えなくなりました。 どなたか修正して頂けないでしょうか? 列の項目は定形で、10~200行のデータが書かれたCSVファイルが1つのフォルダに多数あります。 新しいファイルに、NO.1のファイルのデータの続きにNO.2、NO.3・・・と続けてデータが下の行に連続 して並ぶようにマクロで結合させたいと思っていますので、宜しくお願いします。 Sub Test1() Dim files As FileSearch, FilesCnt As Integer, i As Integer Dim cBook As Workbook, pBook As Workbook  FilesCnt = mySearch(files, ThisWorkbook.Path)  If FilesCnt = 0 Then Exit Sub  Set pBook = Workbooks.Add(xlWBATWorksheet)   For i = 1 To FilesCnt    Workbooks.Open files.FoundFiles(i)    Set cBook = ActiveWorkbook    cBook.ActiveSheet.UsedRange.Copy    With pBook.ActiveSheet     If i > 1 Then      .Cells(.Range("A65536").End(xlUp).Row + 1, 1). _       PasteSpecial (xlPasteAll)     Else      .Cells(.Range("A65536").End(xlUp).Row, 1). _       PasteSpecial (xlPasteAll)     End If    End With    Application.CutCopyMode = False    cBook.Close   Next i  Set cBook = Nothing: Set pBook = Nothing End Sub '******************************************************************** Function mySearch(files As FileSearch, myDir As String) As Integer  mySearch = 0  Set files = Application.FileSearch  With files    .NewSearch    .LookIn = myDir    .SearchSubFolders = True    .Filename = "*.csv"    If .Execute() > 0 Then mySearch = .FoundFiles.Count  End With End Function

  • 最大行数を取得するVBAコードとは?

     人生で初めてエクセルのマクロに挑戦してみた。が、《最大行数を取得するVBAコード》で躓いた。2時間ばかり、悪戦苦闘したがサッパリ判らない。苦肉の策で、SQL文を使った。でも、それじゃー解決したことにはならない。 Public Sub Do_XferPer()   Dim I As Integer   Dim N As Integer      Application.ScreenUpdating = False   '   ' 先頭行の取得   '   N = DLookup("SELECT COUNT(*) FROM [Sheet3$A:A1000]") - 1   Debug.Print N   For I = 2 To N     If 0 Then       Cells(I, 1) = XferPer(Cells(I, 1))     End If   Next I   Application.ScreenUpdating = True      With ThisWorkbook.Worksheets("Sheet3").UsedRange     N = .Rows.Count - 1     Debug.Print N   End With   With Range("A1").SpecialCells(xlLastCell)     N = .Row - 1     Debug.Print N   End With End Sub 【質問】 みなさんは、最大行数を取得するのにどのようなコードを書かれていますか?  宜しくお願いします。

  • 複数のエクセルファイルとシートからデータ抽出したい

    以前に http://soudan1.biglobe.ne.jp/qa8369459.html でやられている内容なのですが、私の場合はシートすべての[i4」のセル値を一覧でひっぱりたいです。 keithinさんご回答の sub macro1()  dim myPath as string  dim myFile as string  dim w as worksheet  mypath = thisworkbook.path & "\"  myfile = dir(mypath & "*.xls*")  application.screenupdating = false  do until myfile = ""   if myfile <> thisworkbook.name then    workbooks.open mypath & myfile    for each w in workbooks(myfile).worksheets    with thisworkbook.worksheets("Sheet1").range("A65536").end(xlup).offset(1)     .value = myfile     .offset(0, 1) = w.name     .offset(0, 2).value = w.cells(w.rows.count, "C").end(xlup).value              ↑をRange("i4").Value      end with    next    workbooks(myfile).close false   end if   myfile = dir()  loop  application.screenupdating = true end sub にて実施しましたが、ファイル名・シート名は正確に抽出するものの 参照したい「i4」のデータが先頭のシートのi4だけを拾ってしまいます 1.xls、2.xls、3xlsがありそれぞれ名前がばらばらなシート「あ」、「い」、「う」の3つがある。2.xlsには「え」、「お」、「か」のしーとがあると仮定、マクロを実行すると、一覧のエクセルに 1、xls  あ  あのシートi4の値 1、xls  い  あのシートi4の値 1、xls  う  あのシートi4の値 2.xls  え  えのシートi4の値 2.xls  お  えのシートi4の値 2.xls  か  えのシートi4の値 子のようなか形で出力されます い のところには いのシートのi4が、う のところには うのシートのi4が、 抽出されるには構文をどう買えればよいのでしょうか

  • やはり図形のクリアで実行時エラー1004

     図形を二行三列で一枡とし図形を貼り付けていますが、どうしても実行時エラー 「1004」が出て図形のクリアができません。(尚、四角形は枠線上にあります。) 対処法がありましたらお願いします。 Windows7・SP1 Office2010 Sub 図形の貼付け() Dim i As Integer Dim j As Integer For i = 10 To 43 Step 2 For j = 9 To 99 Step 3 Select Case Cells(i, j).Value Case 1: ActiveSheet.Shapes("四角形1").Select Selection.Copy Cells(i + 1, j + 1).Select ActiveSheet.Paste Case 2: ActiveSheet.Shapes("四角形2").Select Selection.Copy Cells(i + 1, j).Select ActiveSheet.Paste Case 4: ActiveSheet.Shapes("四角形3").Select Selection.Copy Cells(i + 1, j + 1).Select ActiveSheet.Paste Case 5: ActiveSheet.Shapes("四角形3").Select Selection.Copy Cells(i + 1, j + 2).Select ActiveSheet.Paste Case 6: ActiveSheet.Shapes("円1").Select Selection.Copy Cells(i, j).Select ActiveSheet.Paste End Select Next Next End Select End Sub Sub 図形のクリア() Dim myRng As Range Set myRng = Range("I10:CW43") Dim n As Integer, sp As Variant For n = ActiveSheet.Shapes.Count To 1 Step -1 Set sp = ActiveSheet.Shapes(n) If Not Intersect(Range(sp.TopLeftCell, sp.BottomRightCell), myRng) Is Nothing  (ここで実行時エラー1004になります。) Then sp.Delete End If Next Set myRng = Nothing End Sub

専門家に質問してみよう