2016-08-02 16 views
0

Ich versuche, ein Bild aus einem Benutzerformular in das Excel-Blatt einzufügen, aber wenn ein Bild nicht ausgewählt ist, wenn ich die Übergabeschaltfläche im Formular drücken, sagt Laufzeitfehler '424': Objekt erforderlich . Wie kann ich dieses Problem lösen? Das Folgende ist für die Durchsuchen-Schaltfläche.Einfügen von Bild in VBA

Und das folgende ist der Code, der das Bild der spezifischen Zelle zuweist.

Cells(emptyrow, 10).Select 
With xlApp.ActiveSheet.Pictures.Insert(picname) 'it is this line the debugger always points to when I submit the form without a picture 
    With .ShapeRange 
     .LockAspectRatio = msoTrue 
     .Height = 150 
    End With 
    .Left = xlApp.ActiveSheet.Cells(emptyrow, 10).Left 
    .Top = xlApp.ActiveSheet.Cells(emptyrow, 10).Top 
    .Placement = 1 
    .PrintObject = True 
End With 
+0

Überprüfen Sie die Anzahl der ausgewählten Elemente, bevor Sie etwas tun. –

Antwort

0

Dies sollte für das Bild Userform und Einfügen arbeiten, ist die wichtigste Änderung, dass wir die Office.FileDialog für das Window Picker und trennen die Auswahl des Bildes und Einstellung, statt mit dem Bild Objekt, das wir verwenden Sie einfach den Pfad Dim . Sie müssen die _Click-Namen anpassen.

Public PicPath As String 'this is where we'll store the picture path 

Private Sub Browse_Click() 'getting the picture path 

Dim fDialog As Office.FileDialog 
Set fDialog = Application.FileDialog(msoFileDialogFilePicker) 

With fDialog 

    .AllowMultiSelect = False 
    .ButtonName = "Submit" 
    .Title = "Select an image file" 
    .Filters.Add "Image", "*.gif;*.jpg;*.jpeg", 1 

    If .Show = -1 Then 
     PicPath = .SelectedItems(1) 
     'getting picture full path to use when submit click 
    End If 

    If PicPath = "" Then Unload Me 

End With 

End Sub 

Private Sub Submit_Click()'setting picture in active cell 

    If Not PicPath = "" Then 
     CellAddress = ActiveCell.Address 
     With ActiveSheet.Pictures.Insert(PicPath) 
      With .ShapeRange 
       .LockAspectRatio = msoTrue 
       .Height = 150 
      End With 
      .Left = ActiveSheet.Range(CellAddress).Left 
      .Top = ActiveSheet.Range(CellAddress).Top 
      .Placement = 1 
      .PrintObject = True 
     End With 
     picselectedbool = True 
    Else 
     msgbox ("Please select a picture") 
    End If 

    If picselectedbool Then 
     Unload Me 
    End If 

End Sub 
+0

Vielen Dank !!! Der Code funktioniert, wenn ich ihn in den Submit-Button lege, aber jetzt hat er sich in eine Situation geändert, in der selbst dann, wenn ich nach dem Klicken auf "Senden" kein Bild ausgewählt habe, automatisch ein Bild angezeigt wird. Könnte es mit Hilfe von Fehleranweisungen gelöst werden? –

+0

Hallo, ich dachte, dein Ziel war es, das Bild in das Excel-Blatt mb einzufügen. Können Sie mir genau sagen, was Sie erwarten, dass sich das Bild einfügen wird (wie soll etwas zwischen dem Öffnen und Einfügen des Bildes geschehen?), Weil ich denke, dass ich es falsch interpretiert habe. @ 白羽 ル カ –

+0

Was ich erwartet habe, ist, dass ich ein Bild über ein Benutzerformular auswählen kann und sobald ich die Senden-Schaltfläche auf dem Benutzerformular gedrückt habe, würde es das Bild automatisch in die Zielzelle einfügen, die ich es wollte. Entschuldigung für die Verwirrung. @Miguel_Ryu –