Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1380to1384
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

CommandButton

CommandButton
14.09.2014 22:24:33
dieter
Hey all,
Wenn ich über vba eine neue Excel Datei Tabelle öffne und beim öffnen einen CommandButton erstelle, bekomme ich es nicht hin, wenn ich den Button dann drücke das er mir einen Code ausführt. z.B. kopieren ?
wer könnte mir helfen ?
Hier ein Auszug vom Code
sPath = Application.GetOpenFilename("Excel-Dateien,*.xl?", 1)
Workbooks.Open Filename:=sPath
On Error Resume Next
ActiveSheet.Range("C:C").Select
Selection.ColumnWidth = 120
ActiveSheet.Range("A11").Select
ActiveSheet.OLEObjects.Add(ClassType:="Forms.CommandButton.1", Link:=False _
, DisplayAsIcon:=False, Left:=350, Top:=2, Width:=150, Height _
:=40).Select
ActiveSheet.Range("B2").Select
soweit geht der Code, aber ich möchte nur was aus der geöffneten Tabelle was rauskopieren in einer anderen Tabelle wenn ich den erstellten Button drücke.
Danke im Voraus der Hilfe
mfg.
dieter

21
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: CommandButton
14.09.2014 22:53:47
Mullit
Hallo,
wenn Du Buttons der Formularsteuerelemente verwendest, gehts einfacher:
Option Explicit
Public Sub test()
ActiveSheet.Buttons.Add(Left:=350, Top:=2, Width:=150, Height:=40).OnAction = "MyProg"
End Sub
Private Sub MyProg()
MsgBox "hello"
End Sub

Für ActiveX-Steuerelemente(OLEObjects) müsstest Du Klassenprogrammierung anwenden, da Du die Buttons dynamisch erstellst..
Gruß,

AW: CommandButton
15.09.2014 15:31:15
dieter
Hallo Mullit,
Danke für Deine Antwort, werde es mal versuchen ob ich es hin bekomme.
Melde mich später dazu nochmals.
Mfg.
Dieter

Anzeige
AW: CommandButton
15.09.2014 21:30:51
dieter
Hallo Mullit,
Leider komme ich nicht klar, weiß nix damit an zu fangen wo wie was von Deinem Code hinkommt.
Habe verschiedenes versucht, aber leider kein Erfolg. Hab Brett vorm Kopf. lol
Könntest du mir bitte dabei helfen wie es funzst ?
Option Explicit
Public Sub test()
ActiveSheet.Buttons.Add(Left:=350, Top:=2, Width:=150, Height:=40).OnAction = "MyProg"
End Sub

Private Sub MyProg()
MsgBox "hello"         ''  und hier käme dann mein kopier Befehl rein ?
End Sub
Ich danke im Voraus
Mfg.
Dieter

Anzeige
AW: CommandButton
15.09.2014 21:46:36
Mullit
Hallo,
und hier käme dann mein kopier Befehl rein ?

ja genau, mit der ersten Prozedur erstellst Du den Button und weist ihm die zweite Prozedur als auszuführende Routine für das Click-Ereignis zu:
Option Explicit
Public Sub test()
ActiveSheet.Buttons.Add(Left:=350, Top:=2, Width:=150, Height:=40).OnAction = "MyProg"
End Sub
Private Sub MyProg()
Sheets("Tabelle1").Cells(1, 1).Copy Destination:=Sheets("Tabelle2").Cells(3, 3)
End Sub

Gruß,

AW: CommandButton
15.09.2014 06:55:57
Hajo_Zi
Hallo Dieter,
per VBA erzeugte Button, kannst Du nur über Klassen einen Befehl zuweisen.

Anzeige
AW: CommandButton
15.09.2014 15:28:58
dieter
Hallo Hajo,
Erst mal danke für Deine Antwort, aber wie ginge das über Klassenmodul?
Da kenne ich mich nicht bei aus, habe damit noch nicht gearbeitet.
Mfg.
Dieter
Ps. kommst Du rein zufällig aus der Ecke von Lüdenscheid ? weil da kenne ich einen Hajo.
Gruß Dieter

AW: CommandButton
15.09.2014 15:36:54
Hajo_Zi
Hallo Dieter,
ich kenne mich da auch nicht aus, da ist Beverly gefragt.
Nein ich komme nicht aus Lüdenscheid.
Gruß Hajo

AW: CommandButton
16.09.2014 08:43:40
Beverly
Hi Dieter,
mittels Klassenprogrammierung geht es wie folgt:
1. erstelle in deiner Ausgangsmappe ein Klassenmodul (z.B.) mit Namen clsSchalter
2. kopiere dorthin folgenden Code:
Option Explicit
Public WithEvents cmbSchalter As MSForms.CommandButton
Private Sub cmbSchalter_click()
MsgBox cmbSchalter.Caption ' hier den Code den der CommandButton ausführen soll
End Sub
3. in ein allgemeines Modul schreibst du diesen Code:
Option Explicit
Public arrSchalter() As New clsSchalter
Dim oobElement As OLEObject
Sub SchalterErstellen()
Dim sPath
Dim cmbSchalter As MSForms.CommandButton
sPath = Application.GetOpenFilename("Excel-Dateien,*.xl?", 1)
If sPath  "Falsch" Or sPath  False Then
Workbooks.Open Filename:=sPath
With ActiveWorkbook
With ActiveSheet
If .OLEObjects.Count > 0 Then .OLEObjects.Delete
.Range("C:C").ColumnWidth = 120
.OLEObjects.Add "Forms.CommandButton.1"
Set oobElement = .OLEObjects(.OLEObjects.Count)
With oobElement
.Left = 350
.Top = 2
.Width = 150
.Height = 40
.Object.TakeFocusOnClick = False
.Object.Caption = "Bitte ausführen"
End With
End With
End With
Application.OnTime Now + TimeValue("00:00:01"), "InitSchalter"
Application.ScreenUpdating = True
End If
End Sub
Sub InitSchalter()
ReDim arrSchalter(1)
With ActiveWorkbook
With ActiveSheet
Set arrSchalter(1).cmbSchalter = .OLEObjects(oobElement.Name).Object
End With
End With
End Sub


Anzeige
AW: CommandButton
18.09.2014 21:22:42
dieter
Hallo Mullit und Beverly,
So ich habe jetzt 2 Tage lang versucht wie ein Dollen, aber ich bekomme das nicht hin. ich bin euch ja sehr dankbar für die Hilfe aber hab voll den Blackout.
Ich weiß, finde einfach nicht wie wo was rein muss, außer das Klassemodul zu erstellen, aber dann Ende im Gelände.
Frage ja ungern, aber kann mir einer Von euch genauestens erzählen wie und in welchem Blatt, Tabelle usw. was rein kommt.?
Ich habe ein Datei Namens Konto, darin ist eine Haupttabelle Namens Umsätze ges. Die anderen Tabellen sind aufgeteilt in Monate z.B. ( Umsatz 1 bis Umsatz 52 ) was die Wochen betrifft. Dann mache ich eine Userform auf wo ich dann meine Andere Excel-Tabelle öffne worauf der Button erstellt wird. Mit dem Button möchte ich nur was rauskopieren in meine Haupttabelle Umsätze ges.
Das ist der Hintergrund!! Bis jetzt mache ich das immer manuell, laden, kopieren, einfügen usw. der Rest läuft alles gut.
Nur ich weiß bekomme es einfach nicht hin wo wie was. Hab alles bis jetzt versucht wie ihr mir vorgegeben habt wo ich euch auch sehr dankbar drüber bin.
Solltet Ihr keine Lust dazu haben ist es auch nicht so schlimm, dann mache ich wie gewohnt bis jetzt.
Trotzdem herzlichen Dank.
Mfg.
dieter

Anzeige
AW: CommandButton
19.09.2014 07:59:31
Beverly
Hi Dieter,
mal eine generelle Frage: weshalb muss der Button in der zu öffnenden Arbeitsmappe erstellt werden, wenn du nur etwas herauskopieren willst? Dazu kannst du doch auch einen Button im UserForm benutzen...


AW: CommandButton
19.09.2014 16:00:09
dieter
Hallo Beverly,
Habe gedacht es geht einfacher wenn ich einen Button erstelle wenn ich die Arbeitsmappe aufmache.
In der zu öffnenden Mappe gibt es bis zu 5 verschiedene Adressen ( Zelle, Zeilen, Spalten )die ich dort rauskopiert brauche.
Wenn Dein Vorschlag über Userform und Button einfacher zu bewältigen ist, würde ich mich über Deine Hilfe freuen und es dann so versuchen.
Ansonsten trotzdem vielen Dank nochmals der Hilfe.
Mfg.
Dieter

Anzeige
AW: CommandButton
19.09.2014 16:08:26
Beverly
Hi Dieter,
da musst du schon mal genauer erklären, was und wo hin kopiert werden und wie der Ablauf sein soll.


AW: CommandButton
19.09.2014 17:30:02
dieter
Hallo Beverly,
Nachfolgend habe ich Dir mal über Macrorecoder aufgezeichnet wie es laufen kann.
Private Sub CommandButton6_Click()
Dim Dateiauswahl As Variant
Dateiauswahl = Application.GetOpenFilename
If Dateiauswahl  False Then
Else
Exit Sub
End If
Range("A12").Select
Workbooks.OpenText Filename:="F:\umsaetze-XXXXXXX-2014-09-18-19-07-06.xls", _
Origin:=xlWindows, StartRow:=1, DataType:=xlDelimited, TextQualifier:= _
xlDoubleQuote, ConsecutiveDelimiter:=False, Tab:=True, Semicolon:=False, _
Comma:=False, Space:=False, Other:=True, FieldInfo:=Array(Array(1, 1), _
Array(2, 1), Array(3, 1), Array(4, 1), Array(5, 1), Array(6, 1)), TrailingMinusNumbers  _
_
:=True
Columns("C:C").ColumnWidth = 120
Range("B7").Select
Selection.Copy
Windows("Mein Konto1.XLS").Activate
Range("B8").Select
ActiveSheet.Paste
Application.CutCopyMode = False
With Selection
.HorizontalAlignment = xlCenter
.VerticalAlignment = xlBottom
End With
Windows("umsaetze-XXXXXXX-2014-09-18-19-07-06.xls").Activate
Range("D7").Select
Selection.Copy
Windows("Mein Konto1.XLS").Activate
Range("D8").Select
ActiveSheet.Paste
Application.CutCopyMode = False
With Selection
.HorizontalAlignment = xlCenter
.VerticalAlignment = xlBottom
End With
Windows("umsaetze-XXXXXXX-2014-09-18-19-07-06.xls").Activate
Range("A11:E13").Select
Selection.Copy
Windows("Mein Konto1.XLS").Activate
Range("A11").Select
Selection.Insert Shift:=xlDown
Range("A11:B20").Select
Application.CutCopyMode = False
With Selection
.HorizontalAlignment = xlCenter
.VerticalAlignment = xlCenter
End With
Range("D8:E20").Select
With Selection
.HorizontalAlignment = xlGeneral
.VerticalAlignment = xlBottom
End With
Selection.NumberFormat = "0.00"
Range("A11").Select
Windows("umsaetze-XXXXXXX-2014-09-18-19-07-06.xls").Activate
Range("A11").Select
Windows("Mein Konto1.XLS").Activate
Range("A11").Select
End Sub
Die Datei woraus ich kopieren muß ist immer umsaetze, wobei die XXXXXXX meine Kontonr ist. Dahinter steht immer das Datum, welches sich aber ändert jenachdem ich mir die Datei hole. So wie oben
das Macro steht, geht es, aber sobald ein anderes Datum ist kommt Fehler.
Vielleicht hilft Dir das weiter
Mfg.
Dieter

Anzeige
AW: CommandButton
19.09.2014 18:30:05
Beverly
Hi Dieter,
ich habe bei deinem Code erst einmal versucht, die unnötigen Select und Activate herauszunehmen, damit er übersichtlicher und besser verständlich wird. Teste mal, ob noch genau das gemacht wird wie mit deinem Ausgangscode.
Private Sub CommandButton6_Click()
Dim Dateiauswahl As Variant
Dateiauswahl = Application.GetOpenFilename
If Dateiauswahl  False Then
Else
Exit Sub
End If
Workbooks.OpenText Filename:="F:\umsaetze-XXXXXXX-2014-09-18-19-07-06.xls", _
Origin:=xlWindows, StartRow:=1, DataType:=xlDelimited, TextQualifier:= _
xlDoubleQuote, ConsecutiveDelimiter:=False, Tab:=True, Semicolon:=False, _
Comma:=False, Space:=False, Other:=True, FieldInfo:=Array(Array(1, 1), _
Array(2, 1), Array(3, 1), Array(4, 1), Array(5, 1), Array(6, 1)), TrailingMinusNumbers:= _
True
Columns("C:C").ColumnWidth = 120
With Workbooks("Mein Konto1.XLS").Worksheets("Tabelle1") '
Verstehe ich das richtig, dass dein Problem ist, dass "umsaetze-XXXXXXX-2014-09-18-19-07-06.xls" jedes mal anders heißt, je nachdem welche Mappe du auswählst und du möchtest, dass hier der Name der ausgewählten Mappe benutzt wird?


Anzeige
AW: CommandButton
19.09.2014 20:32:10
dieter
Hallo Beverly,
Dein Code geht soweit, aber wie Du schon richtig vermutest ändert sich der Name umsaetze........ immer. Wie gesagt xxxxxxx steht für mein Konto und das Datum immer wenn ich die Datei runterlade.
Kann man nicht angeben, das er immer nur umsaetze............ aufmacht, egal was dahinter kommt ?
oder die Anweisung ändern ?
Workbooks.OpenText Filename:="F:\umsaetze-XXXXXXX-2014-09-18-19-07-06.xls
mfg.
Dieter

AW: CommandButton
19.09.2014 22:16:13
Beverly
Hi Dieter,
versuche es mal damit:
Private Sub CommandButton6_Click()
Dim strDatei As String
Dim fdDialog As FileDialog
Set fdDialog = Application.FileDialog(msoFileDialogFilePicker)
With fdDialog
.Filters.Add "Excel-Dateien", "*.xls", 1
.InitialFileName = "F:\"
.Title = "Bitte Datei auswählen"
.AllowMultiSelect = False
.ButtonName = "Auswahl"
If .Show = -1 Then
strDatei = .SelectedItems(1)
End If
End With
If strDatei  "" Then
Workbooks.OpenText Filename:=strDatei, _
Origin:=xlWindows, StartRow:=1, DataType:=xlDelimited, TextQualifier:= _
xlDoubleQuote, ConsecutiveDelimiter:=False, Tab:=True, Semicolon:=False, _
Comma:=False, Space:=False, Other:=True, FieldInfo:=Array(Array(1, 1), _
Array(2, 1), Array(3, 1), Array(4, 1), Array(5, 1), Array(6, 1)), _
TrailingMinusNumbers:=True
Columns("C:C").ColumnWidth = 120
With Workbooks("Mein Konto1.XLS").Worksheets("Tabelle1")
Range("B7").Copy .Range("B8")
With .Range("B8")
.HorizontalAlignment = xlCenter
.VerticalAlignment = xlBottom
End With
Range("D7").Copy .Range("D8")
With .Range("D8")
.HorizontalAlignment = xlCenter
.VerticalAlignment = xlBottom
End With
Range("A11:E13").Copy .Range("A11")
.Range("A11").Insert Shift:=xlDown
With .Range("A11:B20")
.HorizontalAlignment = xlCenter
.VerticalAlignment = xlCenter
End With
With .Range("D8:E20")
.HorizontalAlignment = xlGeneral
.VerticalAlignment = xlBottom
.NumberFormat = "0.00"
End With
End With
End If
Set fdDialog = Nothing
End Sub


Anzeige
AW: CommandButton
20.09.2014 14:51:29
dieter
hallo Beverly,
soweit geht es, aber in folgender Anweisung
' Range("A11:E13").Copy .Range("A11")
' .Range("A11").Insert Shift:=xlDown
' With .Range("A11:B20")
' .HorizontalAlignment = xlCenter
' .VerticalAlignment = xlCenter
' End With
ist ein Fehler. Und zwar kopiert wird nur A11 und nicht den Rest. Außerdem wenn kopiert wird, gehen die ganzen Zeilen ab ( A11 ) nach unten.
Ansonsten gut.
Dazu mal die Frage, kann man nicht die Kopieranweisung angeben, was wo hin soll, weil ich ja auch mal nur eine Zeile oder noch mehr kopieren muss.
Danke im Voraus
LG
dieter

AW: CommandButton
20.09.2014 16:44:25
Beverly
Hi Dieter,
ich habe gerade gesehen, dass in deinem Code zwar A11:A13 kopiert wird, aber nirgenwo eingefügt wird - wenn das so sein soll, dann lösche bei mir die Zeile
Range("A11:E13").Copy .Range("A11")

Zu deiner Frage: und wie sagst du Excel, WELCHE Zellen kopiert werden sollen?
Mein Code ist so geschrieben, dass immer zu Beginn der Zeile steht WAS kopiert wird und danach (durch Leerzeichen getrennt) WOHIN kopiert wird - also z.B.:
Range("D7").Copy .Range("D8")
D7 wird nach D8 kopiert.


AW: CommandButton
20.09.2014 20:23:54
dieter
Hallo Beverly,
Ich habe jetzt verschiedene Sachen versucht, aber es geht nur bis
Range("A12").Select
Dim strDatei As String
Dim fdDialog As FileDialog
Set fdDialog = Application.FileDialog(msoFileDialogFilePicker)
With fdDialog
.Filters.Add "Excel-Dateien", "*.xls", 1
.InitialFileName = "F:\"
.Title = "Bitte Datei auswählen"
.AllowMultiSelect = False
.ButtonName = "Auswahl"
If .Show = -1 Then
strDatei = .SelectedItems(1)
End If
End With
If strDatei "" Then
Workbooks.OpenText Filename:=strDatei, _
Origin:=xlWindows, StartRow:=1, DataType:=xlDelimited, TextQualifier:= _
xlDoubleQuote, ConsecutiveDelimiter:=False, Tab:=True, Semicolon:=False, _
Comma:=False, Space:=False, Other:=True, FieldInfo:=Array(Array(1, 1), _
Array(2, 1), Array(3, 1), Array(4, 1), Array(5, 1), Array(6, 1)), _
TrailingMinusNumbers:=True
Columns("C:C").ColumnWidth = 120
With Workbooks("Mein Konto1.XLS").Worksheets("Tabelle1.")
Range("B7").Copy .Range("B8")
With .Range("B8")
.HorizontalAlignment = xlCenter
.VerticalAlignment = xlBottom
End With
Range("D7").Copy .Range("D8")
With .Range("D8")
.HorizontalAlignment = xlCenter
.VerticalAlignment = xlBottom
End With
Das folgende : Range("A11:E13").Copy .Range("A11")
.Range("A11:E13").Insert Shift:=xlDown ' geändert auf A11:E13, in deinem Code war nur A11
With .Range("A11:B20") ' geht nicht
.HorizontalAlignment = xlCenter
.VerticalAlignment = xlCenter
geht nicht, er kopiert nur 3 leere Zeilen.
das löschen der angegebenen Zeile von dir brachte auch nichts.
Dein Code wie ich auch gesehen habe ist auf feste Bezüge. welches nur ein Beispiel war vom meinem Makrorecorder wie es gerne hätte was Excel machen soll.
Meine Frage kann man dem nicht angeben welche Zelle, Zeilen er kopieren soll ?
Lg.
Dieter

AW: CommandButton
20.09.2014 21:02:19
Beverly
Hi Dieter,
Zitat: Dein Code wie ich auch gesehen habe ist auf feste Bezüge.
Das ist logisch, du hast mit deinem Code doch die fetsten Bezüge vorgegeben - woher soll ich denn wissen, welcheZellen kopiert werden sollen? Ich sehe schließlich deine Mappe nicht, da ich es ablehne, übers Internet auf fremde Rechner zu schauen. Mir ist auch nicht bekannt, was du erreichen willst und erraten kann ich es nicht. Entweder, du lädst deine Mappe hoch und beschreibst GANZ genau was das Ziel ist, oder ich kann dir leider nicht weiterhelfen.


AW: CommandButton
21.09.2014 11:21:27
dieter
Hallo Beverly,
Als erstes möchte ich mich bedanken bei Dir für Deine Mühe und Arbeit.
Ich habe Dir geschrieben das es nur so aussehen kann bei meiner Aufzeichnung des Makrorecorders.
Das dann feste Bezüge kommen ist doch klar, da ich dem Rekorder nicht sagen kann kopiere jetzt das oder kopiere das beim nächsten mal. der macht immer feste Bezüge wie Du weißt. Außerdem wollte ich Dir nur sagen das in Deinem Code das letzte "als Beispiel vom Rekorder" du geänderte nicht geht. Deshalb nur meine Frage wegen der Angabe was Wohin kopiert werden soll. Ansonsten läuft ja Dein Code gut.
Du musst aber auch verstehen das ich Dir nicht die ganze Mappe schicken kann aufgrund vertraulicher Daten. ( Kunden, Konten, Gelder usw. )
Habe nochmal geschaut, die Anweisung
Columns("C:C").ColumnWidth = 120
With Workbooks("Mein Konto1.XLS").Worksheets("Tabelle1.")
Range("B7").Copy .Range("B8")
With .Range("B8")
.HorizontalAlignment = xlCenter
.VerticalAlignment = xlBottom
End With
Range("D7").Copy .Range("D8")
With .Range("D8")
.HorizontalAlignment = xlCenter
.VerticalAlignment = xlBottom
End With
ist immer gleich also sehr gut bis dahin.
Nur das geht nicht und muss auf bewegliche Bezüge sein nach unten kopiert !!
Range("A11:E13").Copy .Range("A11")
.Range("A11:E13").Insert Shift:=xlDown
With .Range("A11:B20") ' geht nicht
.HorizontalAlignment = xlCenter
.VerticalAlignment = xlCenter
Wenn Du mir jetzt noch helfen kannst und möchtest wäre ich Dir sehr dankbar.
Ansonsten vielen lieben Dank für das vorherige.
Verbleibe mit freundlichen Gruß
Dieter

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige