2010-12-02 10 views
0

Ich versuche, ein Makro für eine Befehlsschaltfläche zu erstellen, die nach dem Klicken die Auftragsnummer aus dieser Zeile abrufen und nach einer Datei für diesen Auftrag suchen. Wenn es nicht existiert, möchte ich, dass es von einer Vorlage kopiert und unter einem neuen Namen gespeichert wird, ansonsten öffne einfach die Datei.Ein Klicken Sie auf Befehlsschaltfläche Makro

Allerdings kann ich nicht herausfinden, wie die Informationen für die Befehlsschaltfläche abgerufen werden, die das Makro aufruft. Das ist, was ich habe, so weit:

Public Function ShapeExists(OnSheet As Object, Name As String) As Boolean 

    On Error GoTo ErrShapeExists 
    If Not OnSheet.Shapes(Name) Is Nothing Then 
     ShapeExists = True 
    End If 
ErrShapeExists: 
    Exit Function 

End Function 

Private Sub Worksheet_Change(ByVal Target As Excel.Range) 
Dim buttonName As String 
buttonName = (Target.Row - 1) 
    If Not ShapeExists(ActiveSheet, buttonName) Then 
     If Range("O" & Target.Row).Value = "" And Target.Column <= 14 And Target.Row > 1 Then 
      ActiveSheet.Buttons.Add(910.5, Range("O" & Target.Row).Top, 80, 20).Select 
      Selection.Name = buttonName 
      Selection.OnAction = "Sheet1.JobButton" 
      ActiveSheet.Shapes(buttonName).Select 
      Selection.Characters.Text = "Open Job" 
     End If 
    End If 
End Sub 

Private Sub JobButton() 
Dim newText As String 
ActiveSheet.Shapes(Application.Caller).Select 

If Range("N" & Selection.TopLeftCell.Row).Value <> "" Then 
    newText = "Job " & Range("N" & Selection.TopLeftCell.Row).Value 
    Dim checkFilename As String 
    Dim check As String 
    check = "N" & Selection.TopLeftCell.Row 
    checkFilename = newText & ".xlsm" 
    If Dir(checkFilename) <> "" Then 
    Workbooks.Open (newText) 
    Else 
    Dim SrcBook As Workbook 
    Set SrcBook = ThisWorkbook 
    Dim NewBook As Workbook 
    NewBook = Workbooks.Open("Job Template.xlsm") 
    SrcBook.Worksheets(1).Range("D" & Selection.TopLeftCell.Row).Copy 
    NewBook.Worksheets(2).Range("B15").PasteSpecial 
     With NewBook 
      .Title = newText 
      .Subject = newText 
      .SaveAs Filename:=newText 
     End With 
    End If 
Else 
ErrMsg: 
MsgBox ("Job Should always have a number."), , "NO JOB NUMBER" 

End If 
End Sub 

Wie Sie mir gerade sehen ActiveSheet.Shapes (Application.Caller) .Select versucht, dies einen „Laufzeitfehler‚13‘: Typenkonflikt“ verursacht .

Jede Hilfe wäre sehr geschätzt, danke!

Antwort

1

Rechtsklick auf die Schaltfläche -> Code anzeigen -> hier setzen Sie Ihre JobButton Code

+0

Ich bin nicht sicher, ob ich das erklärt, aber die Tasten werden immer automatisch generiert, ist es eine Möglichkeit, dies zu tun ohne den Code manuell auszuwählen? – henryprescott

+0

Sie müssen den Code in das private Sub CommandButton1_Click() Sub im Arbeitsblattmodul des Blattes, das die Schaltfläche enthält, abrufen. Abhängig davon, wie Sie das Blatt und die Schaltfläche generieren, können Sie dies tun, indem Sie ein Vorlagenblatt kopieren oder das VBE-Objektmodul verwenden, um dem Arbeitsblattmodul Code hinzuzufügen. Oder es könnte einfacher sein, die Schaltfläche aus der Symbolleiste Formulare zu verwenden. –

Verwandte Themen