Autor
|
Thema: button inkl. makro kopieren (13665 mal gelesen)
|
Markus 1979 Mitglied Holztechniker/ Konstruktion & AV
Beiträge: 48 Registriert: 13.09.2007 Auto Cad 2006/2008 Excel 2007
|
erstellt am: 09. Feb. 2012 09:01 <-- editieren / zitieren --> Unities abgeben:
guten Morgen, ich habe eine Frage zu meinem Makro zur Beschreibung: Ich habe 2 verschiedene Arbeitsmappen: 1. Materialaufstellung, hier sind im Tabellenblatt "Zukaufteile" meine gesamten Zukaufteile als Daten hinterlegt. 2. Stückliste, hier trage ich die Projekt-/Auftragsbezogenen Daten ein, z.B. in das Tabellenblatt "Einkauf" damit die Mappe Stückliste nicht zu groß wird, möchte ich nur die Benötigten Daten aus der Mappe Materialaufstellung "Zukaufteile" in die Mappe Stückliste "Einkauf" kopieren. Hierzu habe ich ein Makro das von der Mappe Stückliste Automatisch in die Mappe Materialaufstellung "Zukaufteile" wechselt. Private Sub CommandButton1_Click() ActiveWindow.ActivateNext Sheets("Zukaufteile").Select End Sub und eins was mir die Daten aus einer Zeile in die Mappe Stückliste "Einkauf" kopiert Private Sub CommandButton1_Click() 'Zukaufteil kopieren Range("c7:y7").Select Selection.Copy ActiveWindow.ActivateNext Sheets("Einkauf").Select Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks:=False, Transpose:=False ActiveCell.Offset(0, 1).Select End Sub so weit klappt das auch gut, aber ich müsste diesen Button in jeder Zeile neu erstellen, da ich ja immer auf die jeweilige Zeile verweise, "c7:y7" gibt es die möglichkeit einen Button mit Makro so zu erstellen, das ich Ihn nur in die Zeilen Kopieren muss, der sich dann auf die eingefügte Zeile bezieht?? gruß Markus Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
StefanBerlitz Ehrenmitglied V.I.P. h.c. IT Admin (CAx)
Beiträge: 8756 Registriert: 02.03.2000 SunZu sagt: Analysiere die Vorteile, die du aus meinem Ratschlag ziehst. Dann gliedere deine Kräfte entsprechend und mache dir außergewöhnliche Taktiken zunutze.
|
erstellt am: 09. Feb. 2012 10:05 <-- editieren / zitieren --> Unities abgeben: Nur für Markus 1979
Hallo Markus, ich glaub so was, wie dir vorschwebt, geht nicht so einfach. Du könntest [i]einen[(i] Knopf machen, die Zelle aus der Zeile markieren, die du kopieren möchtest und dann in dem einen Knopf ermitteln, in welcher Zeile die Selektion ist. Wenn du es mit vielen Knüpfen machen möchtest solltest du die eigentlich Funktion auslagern und über die Knöpf mit einem Parameter aufrufen. Beispiel:
Code: Sub KopierMich(ByVal kopierzeile As Long) 'Zukaufteil kopieren Range("c" & kopierzeile & ":y" & kopierzeile).Select Selection.Copy ActiveWindow.ActivateNext Sheets("Einkauf").Select Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks:=False, Transpose:=False ActiveCell.Offset(0, 1).Select End Sub Private Sub CommandButton1_Click() KopierMich (1) End Sub Private Sub CommandButton2_Click() KopierMich (2) End Sub Private Sub CommandButton3_Click() KopierMich (3) End Sub
Steuerelementfelder, wie in VB, gibt es in VBA leider nicht. Deswgen muss du es etwas umständlicher machen.Ciao, Stefan ------------------ Inoffizielle deutsche SolidWorks Hilfeseite http://solidworks.cad.de Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Comos User Mitglied
Beiträge: 112 Registriert: 23.03.2010
|
erstellt am: 09. Feb. 2012 10:34 <-- editieren / zitieren --> Unities abgeben: Nur für Markus 1979
Hallo Markus, 1. kugst du hier: http://www.online-excel.de/excel/singsel_vba.php?f=61 [rredit] link repariert [/rredit]
2. Zitat: gibt es die möglichkeit einen Button mit Makro so zu erstellen, das ich Ihn nur in die Zeilen Kopieren muss, der sich dann auf die eingefügte Zeile bezieht??
- mit Application.caller bekommst du den namen des Aufrufers (also des Buttons) - dieser hatt eine Eigenschaft "TopLeftCell", wie der name vermuten läßt die zelle der linken oberen Ecke. - Zeile ermitteln (EntireRow) und darin den Bereich C bis Y also aus: Code: Range("c7:y7").Select Selection.Copy
wirdCode: ActiveSheet.Buttons(Application.Caller).TopLeftCell.EntireRow.Range("C1:Y1").Copy
Den rest des Codes unbedingt gemäß Punkt 1 nacharbeiten, besonders ActiveWindow.ActivateNext ist sehr anfällig. Du kannst nur schwer kontrollieren wer den nun der nächste ist.Gruß Peter Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Markus 1979 Mitglied Holztechniker/ Konstruktion & AV
Beiträge: 48 Registriert: 13.09.2007 Auto Cad 2006/2008 Excel 2007
|
erstellt am: 09. Feb. 2012 12:05 <-- editieren / zitieren --> Unities abgeben:
schönen Dank erstmal, @ Stefan: Ich habe dein Makro eingefügt und klappt eigentlich ganz gut. hierbei brauche ich nur die Zahl in der Klammer zu ändern, auf die Zeile, in der der Button liegt. eine Erleichterung der ganzen Sache ist es ja schon, wenn mal 100, 200 Zeilen damit ausstattet, nur ich muss dabei auch noch zu fuß gehen und die einzelnen Zahlen auf die Zeilen Abstimmen. @Peter den Beitrag aus deinem link habe ich jetzt nur überflogen, werde mir den heute abend mal genauer ansehen. die Zeilen habe ich ausgetauscht, dabei kam die Fehlermeldung: Laufzeitfehler '1004': Die Buttons-Eigenschaft des Worksheet-Objektes kann nicht zugeordnet werden. werde nachher nochmal genauer ausprobieren woran es liegen könnte. gruß Markus Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Comos User Mitglied
Beiträge: 112 Registriert: 23.03.2010
|
erstellt am: 09. Feb. 2012 13:36 <-- editieren / zitieren --> Unities abgeben: Nur für Markus 1979
Hallo Markus, warscheinlich nutzt du Bottons aus SteuerelementeToolbox. Für diese gilt das von Stephan gesagte. Diese sind nur über die Shapes Auflistung erreichbar. Das Problem: jeder dieser Buttons hat zwangsläüfig ein eigenes Klick Event. Meine Version erfordert Buttons aus der Symbolleiste "Formular". Alle Buttons bekommen dann das selbe Macro zugewiesen. Oder einfacher dem 1. zuweisen und dann kopieren. getestet mit MSO 2003 Gruß Peter Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Beverly Mitglied Dipl.-Geologe (Rentner)
Beiträge: 394 Registriert: 11.08.2007
|
erstellt am: 09. Feb. 2012 15:20 <-- editieren / zitieren --> Unities abgeben: Nur für Markus 1979
Hi Markus, für die ActiveX-Steuerelemente, die du verwendest, müsstest du das mittels Klassenprogrammierung lösen - das ist aber nicht ganz so einfach. Wesentlich einfacher ist es, wenn du Rechtecke aus den Formen verwendest, sie entsprechend formatierst und ihnen das Makro zum Kopieren zuweist. Durch Verwendung von ApplicationCaller kann man das Makro für alle "Schalter" vereinheitlichen und durch TopLeftZell kann man sich auf genau die Zeile beziehen, in der sich der "Schalter" befindet. Schreibe folgenden Code in ein allgemeines Modul:
Code: Sub Kopieren() Dim lngZeile As Long lngZeile = ActiveSheet.Shapes(ActiveSheet.Application.Caller).TopLeftCell.Row Range(Cells(lngZeile, 2), Cells(lngZeile, 25)).Copy Workbooks("Stückliste.xlsm").Worksheets("Einkauf").Range("A1").PasteSpecial Paste:=xlValues Application.CutCopyMode = False End Sub
Dieses Makro wird den "Schaltern" zugewiesen und damit werden dann die Daten aus den zutreffenden Zeilen kopiert. Leider kann ich deine Arbeitsmappe "Stückliste.xlsm" nicht herunterladen, sodass ich nicht weiß, wo genau eingefügt werden soll - im Code habe ich mal einfach A1 angenommen, das musst du entsprechend an deine Bedingungen anpassen.Für das eigentliche Erstellen der "Schalter" kannst du den folgenden Code verwenden:
Code: Sub SchalterErstellen() Dim intSchalter As Integer For intSchalter = 7 To 20 With ActiveSheet.Shapes.AddShape(msoShapeRectangle, Columns(4).Left, Cells(intSchalter, 4).Top, Columns(4).Width, Rows(intSchalter).Height) With .Fill .Visible = msoTrue .ForeColor.RGB = RGB(0, 176, 80) .Transparency = 0 .Solid End With With .Line .Visible = msoTrue .ForeColor.ObjectThemeColor = msoThemeColorBackground1 .ForeColor.TintAndShade = 0 .ForeColor.Brightness = -0.0500000007 .Transparency = 0 End With With .ThreeD .BevelTopType = msoBevelCoolSlant .BevelTopInset = 9 .BevelTopDepth = 4 End With .OnAction = "Kopieren" End With Next intSchalter End Sub
Damit werden ab Zeile 7 bis 20 "Schalter" erstellt und ihnen das Makro zum Kopieren zugewiesen (Anzahl musst du anpassen). Sollte dir das Aussehen der "Schalter" nicht gefallen, kannst du das natürlich per Makrorekorder aufzeichnen und entsprechend im Code ändern.
------------------ Bis später, Karin Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Comos User Mitglied
Beiträge: 112 Registriert: 23.03.2010
|
erstellt am: 09. Feb. 2012 16:15 <-- editieren / zitieren --> Unities abgeben: Nur für Markus 1979
@Karin ich habe hier nur Excel 2003, kann also zu 2007 und 2010 nichts sagen. Gibt es dort keine Forms Steuerelemente auf Arbeitsblättern mehr? oder was ist nun der Unterschied zu meiner Lösung. Denkbar wäre aus die Nutzung von BeforeDoubleClick oder BeforeRightClick, deine Rechtecke oder meine Buttons dienen dann nur noch der optischen Kentlichmachung, daß hier was passiert wenn man klickt. Gruß Peter Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Beverly Mitglied Dipl.-Geologe (Rentner)
Beiträge: 394 Registriert: 11.08.2007
|
erstellt am: 09. Feb. 2012 16:29 <-- editieren / zitieren --> Unities abgeben: Nur für Markus 1979
Hi Peter, ich kann dem Link aus deinem Beitrag leider nicht folgen und mir anschauen was dort steht, sodass ich dazu nichts sagen kann. Die Steuerelemente aus der Formular-Symbolleiste 2003 gibt es auch ab 2007, nur heißen sie dort schlicht und einfach Formularsteuerelemente. Der Nachteil dieser Steuerelemente generell ist, das man ihnen keine Farbe und andere Formatierungen zuweisen kann. Was du mit Denkbar wäre aus die Nutzung von BeforeDoubleClick oder BeforeRightClick meinst, weiß ich leider nicht, da die Formular-Steuerelemente und die Zeichnungs-Elemente keine derartigen Ereignisse kennen. ------------------ Bis später, Karin Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Markus 1979 Mitglied Holztechniker/ Konstruktion & AV
Beiträge: 48 Registriert: 13.09.2007 Auto Cad 2006/2008 Excel 2007
|
erstellt am: 09. Feb. 2012 17:31 <-- editieren / zitieren --> Unities abgeben:
ich habe jetzt mal Karins Vorschlag ausprobiert. der erste Teil mit dem "Sub Kopieren" ist das, was ich mir (fast) vorgestellt habe. ich werde nur versuchen das mit dem makro von mir zu kombinieren, so das er die Daten nicht in Zelle "A1" kopiert, sondern in die Zelle, die gerade ausgewählt ist der zweite Teil "Sub Schaltererstellen" funktioniert bei mir leider nicht: Laufzeitfehler 438 Objekt unterstützt diese Eigenschaft oder Methode nicht er bleibt in Zeile: .ForeColor.Brightness = -0.050000007 stehen Ps.: den Link von Peter konnte ich auch nicht öffnen, habe ihn kopiert und in die Befehlszeile vom Explorer eingefügt vorerst schon mal vielen Dank, ich bin schon ein großes Stück Weiter gekommen. da ich mich mit dem Bereich makros in Excel erst seit kurzem beschäftige, werde ich mir die Tip´s und Links noch mal in ruhe ansehen, um sie (besser) zu verstehen gruß Markus
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Beverly Mitglied Dipl.-Geologe (Rentner)
Beiträge: 394 Registriert: 11.08.2007
|
erstellt am: 09. Feb. 2012 18:34 <-- editieren / zitieren --> Unities abgeben: Nur für Markus 1979
Hi Markus, kommentiere die Zeile mal aus und lass dann den Code laufen - wird der Fehler immer noch angezeigt? Ich habe ihn mit Excel2010 getestet und er läuft problemlos - vlt. hat Excel2007 diese Eigenschaft nicht oder sie wird dort anders angesprochen. ------------------ Bis später, Karin Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Markus 1979 Mitglied Holztechniker/ Konstruktion & AV
Beiträge: 48 Registriert: 13.09.2007 Auto Cad 2006/2008 Excel 2007
|
erstellt am: 09. Feb. 2012 21:18 <-- editieren / zitieren --> Unities abgeben:
hi Karin, die Betreffende Zeile habe ich heraus gelöscht, und danach klappt es. einziges Problem, wenn der Button in Zeile 8 liegt, kopiert er Zeile 7 kopiere ich den selbst erstellten Button "Sub Kopieren" in eine beliebige Zeile funktioniert es super Sub Kopieren() Dim lngZeile As Long lngZeile = ActiveSheet.Shapes(ActiveSheet.Application.Caller).TopLeftCell.Row Range(Cells(lngZeile, 3), Cells(lngZeile, 25)).Copy Workbooks("Stückliste1.xlsm").Worksheets("Einkauf").Range("D7").PasteSpecial Paste:=xlValues Application.CutCopyMode = False End Sub und Sub SchalterErstellen() Dim intSchalter As Integer For intSchalter = 7 To 10 With ActiveSheet.Shapes.AddShape(msoShapeRectangle, Columns(4).Left, Cells(intSchalter, 4).Top, Columns(4).Width, Rows(intSchalter).Height) With .Fill .Visible = msoTrue .ForeColor.RGB = RGB(0, 176, 80) .Transparency = 0 .Solid End With With .Line .Visible = msoTrue .ForeColor.ObjectThemeColor = msoThemeColorBackground1 .ForeColor.TintAndShade = 0 .Transparency = 0 End With With .ThreeD .BevelTopType = msoBevelCoolSlant .BevelTopInset = 9 .BevelTopDepth = 4 End With .OnAction = "Kopieren" End With Next intSchalter End Sub und, wo ich noch nicht hinter komme ist, bei dem Makro was ich selber aufgezeichnet habe: Private Sub CommandButton1_Click() 'Zukaufteil kopieren Range("c7:y7").Select Selection.Copy ActiveWindow.ActivateNext Sheets("Einkauf").Select Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks:=False, Transpose:=False ActiveCell.Offset(0, 1).Select End Sub kopiert er die Zellen in die Zelle, die ich vorher in der "Arbeitsmappe Stückliste1 Tabellenblatt Einkauf" gewählt habe. und bleibt dann auch in dieser Arbeitsmappe auch nach mehrmaligen austauschen komme ich nicht dahinter welche befehle ich Tauschen muss, zum einen ja Range("D7"), und dann ????? mit öhhh?? hast du da noch einen tip für mich Gruß Markus Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Markus 1979 Mitglied Holztechniker/ Konstruktion & AV
Beiträge: 48 Registriert: 13.09.2007 Auto Cad 2006/2008 Excel 2007
|
erstellt am: 09. Feb. 2012 22:41 <-- editieren / zitieren --> Unities abgeben:
so, habe es geschafft: ich bin in der Mappe Stückliste 1 und wähle die Zelle, in die die Daten eingefügt werden sollen und betätige den Button:
Code: Private Sub CommandButton1_Click() Windows("Materialaufstellung.xlsm").Activate Sheets("Zukaufteile").Select End Sub
damit bin ich in der Mappe Materialaufstellung, wähle hier einen Beschlag aus und drücke den Button, der sich in der selben Zeile befindet:
Code: Sub Kopieren() Dim lngZeile As Long lngZeile = ActiveSheet.Shapes(ActiveSheet.Application.Caller).TopLeftCell.Row Range(Cells(lngZeile, 3), Cells(lngZeile, 25)).Copy Windows("Stückliste1.xlsm").Activate Sheets("Einkauf").Select Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks:=False, Transpose:=False ActiveCell.Offset(0, 1).Select End Sub
dieser kopiert mir die gewünschte Zeile und ich bin wieder in der Mappe Stückliste1, wo ich wieder in die nächste Zeile gehe, in die eingefügt werden soll, und betätige wieder den Button um nochmal in die Mappe Materialaufstellung zu gehen um das nächste zu kopieren, usw. uswdas einzigste, was jetzt noch nicht funktioniert, ist das Makro "Schalter erstellen" aber ich kann mir den Button mit Strg C Strg V in jede Zeile kopieren ohne bei jedem einzelnen Button das Makro verändern zu müssen, wie am Anfang schönen Dank an alle Gruß Markus Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Beverly Mitglied Dipl.-Geologe (Rentner)
Beiträge: 394 Registriert: 11.08.2007
|
erstellt am: 10. Feb. 2012 01:00 <-- editieren / zitieren --> Unities abgeben: Nur für Markus 1979
Hi Markus, den Fehler, dass die falsche Zeile kopiert wird, kann ich bei mir nicht nachvollziehen. Ich habe den Code, der den Schaltern zugewiesen wird, jetzt einfach mal dahingehend abgeändert, dass anstelle des Kopierens die Zeilennummer in einer MsgBox ausgegeben wird, mit dem Ergebnis: es wird immer die richtige angezeigt.
------------------ Bis später, Karin Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Comos User Mitglied
Beiträge: 112 Registriert: 23.03.2010
|
erstellt am: 10. Feb. 2012 08:37 <-- editieren / zitieren --> Unities abgeben: Nur für Markus 1979
Moin, ich noch mal. @Markus Derlink bezieht sich auf ein Tutorial zur Verwendung von Select und Activate, er hatt also nicht unmitellbar mit deinem Problem zu tun ist aber allemal eine Beachtung wert. Ebenso wie dieser Der Makrorekorder: Freund und Feind
@Karin Ich meine BeforeDoubleClick oder BeforeRightClick des Arbeitsblattes. Über den Parameter Target erfährt mann wo geklickt wurde. Einfach auf eine Zeile (oder Teile davon) Doppel- bzw Rechtsklicken und schon kann die gewünschte Aktion ausgelöst werden. Ohne irgentwelche Buttons oder selbstgebastelte Schaltflächen. Aber das Problem ist wohl schon gelöst, Funktion geht; Optik schick
Gruß Peter Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Markus 1979 Mitglied Holztechniker/ Konstruktion & AV
Beiträge: 48 Registriert: 13.09.2007 Auto Cad 2006/2008 Excel 2007
|
erstellt am: 10. Feb. 2012 10:56 <-- editieren / zitieren --> Unities abgeben:
hi so habe es jetzt auch dank Karins Hilfe mit den "Schaltern Kopieren" am Klappen ich habe zwar immer noch die Fehlermeldung für die Zeile ForeColor.Brightness = -0.050000007 aber nach dem ich diese wieder gelöscht habe funktioniert das ganze sehr gut ich Danke euch Allen nochmal und verteile ein paar U´s
gruß MArkus Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
| Anzeige.:
Anzeige: (Infos zum Werbeplatz >>)
|