Microsoft Excel

Herbers Excel/VBA-Archiv

Informationen und Beispiele zum Thema CommandButton
BildScreenshot zu CommandButton CommandButton-Seite mit Beispielarbeitsmappe aufrufen
Informationen und Beispiele zum Thema Label
BildScreenshot zu Label Label-Seite mit Beispielarbeitsmappe aufrufen
Informationen und Beispiele zum Thema TextBox
BildScreenshot zu TextBox TextBox-Seite mit Beispielarbeitsmappe aufrufen

Makrofehler nur beim Commandbutton | Herbers Excel-Forum


Betrifft: Makrofehler nur beim Commandbutton von: Kurt P
Geschrieben am: 17.10.2008 11:00:26

Guten Morgen,
warum klappt das Selectieren mit Commandbutton nicht.
Ich bin immer in der Tabelle "Gesamt"
Hier mit CommandButton:

Private Sub CommandButton100_Click()
    Sheets("Datenbank").Select
    ActiveSheet.Range("G3").Select
 Dim z As Long
     z = Range("g3").End(xlDown).Row
         ActiveSheet.Range(Cells(3, 4), Cells(z, 34)).Select
End Sub



Hiermit klappt es, mit einer Schaltfläche:

Private Sub kopieren()
'------- Datenbank füllen -----------------
    Sheets("Datenbank").Select
    ActiveSheet.Range("G3").Select

 Dim z As Long
     z = Range("g3").End(xlDown).Row
      '  ActiveSheet.Range(Cells(3, 4), Cells(z, 34)).Select
 End Sub



Beim CommandButton kommt immer Fehlermeldung,
Laufzeitfehler 1004
Anwendungs und objektdefinierter Fehler

Wie kann ich es mit einem Commandbutton hinkriegen ?

mfg Kurt P

  

Betrifft: AW: Makrofehler nur beim Commandbutton von: Tino
Geschrieben am: 17.10.2008 11:18:32

Hallo,
so geht’s

With Sheets("Datenbank")
     .Select
     .Range("G3").Select
 Dim z As Long
     z = Range("g3").End(xlDown).Row
          .Range(.Cells(3, 4), .Cells(z, 34)).Select
End With




Gruß Tino


  

Betrifft: Danke, habe noch eine Zusatzfrage, wenn möglich ? von: Kurt P
Geschrieben am: 17.10.2008 12:20:52

Hallo Tino,
das klappt,
danke.

Habe noch eine Frage: ich möchte gern von der aktiven Tabelle in die Datenbank kopieren,
irgendwie kommt immer Fehler.
Hier mein Makro:
Das klappt soweit bis auf kopieren, wenn ich also in der 3.Spalte der "Alle" stehe möchte ich den Wert der
Zelle in die Datenbank, akt. Zelle einfügen.
Dann zurück und von der Spalte 4 in die Datenbank der nächsten Spalte eingesetzt.

Sheets("ALLE").Select
Dim az As Variant
Set az = ActiveCell

Sheets("Datenbank").Select
Dim dz As Variant

Dim z, ze As Long
z = Range("G2").End(xlDown).Row
ActiveSheet.Range(Cells(z, 4), Cells(z, 34)).Select
ActiveCell.Offset(1, 0).Select 'aktive Zelle u. 1 Zeile runter
Set dz = ActiveCell
'---------------- wenn der Courser irgendwo in der Zeile steht ------------------
Sheets("ALLE").Select
az.Select
ze = ActiveCell().Row
ActiveSheet.Range(Cells(ze, 3), Cells(ze, 51)).Select
ActiveCell().Select 'bleibt dann in der 3 Spalte
'--------------------------------------------------------------------------------
ActiveCell.Value = Sheets("Datenbank").Value
' ActiveCell.Offset(0, 1) = Sheets("Datenbank").Offset(0, 1)
'ActiveCell.Offset(0, 2) = Sheets("Datenbank").Offset(0, 2)

mfg Kurt P


  

Betrifft: AW: Danke, habe noch eine Zusatzfrage, wenn möglich ? von: Tino
Geschrieben am: 17.10.2008 12:44:47

Hallo,
bin mir nicht sicher ob ich Deinen Code richtig verstanden habe.

So müsste er funktionieren.

Dim az As Range
Dim dz As Range
Dim z, ze As Long
Sheets("ALLE").Select
Set az = ActiveCell
With Sheets("Datenbank")
    z = .Range("G2").End(xlDown).Row
    Set dz = .Cells(z, 34).Offset(1, 0)
End With
    '---------------- wenn der Courser irgendwo in der Zeile steht ------------------ 
   With Sheets("ALLE")
     .Range(.Cells(az.Row, 3), .Cells(az.Row, 51)).Value = dz.Value
   End With




Gruß Tino


  

Betrifft: Hallo geht nicht von: Kurt P
Geschrieben am: 17.10.2008 17:08:55

Guten Abend Tino,
erst mal Danke für die bisherige Unterstützung.
So kopiert:
dz.Value = az.Value
es darf nicht die ganze Zeile kopiert werden, deshalb hatte ich das mit:
ActiveCell.Offset(0, 0) =

ich fummel mir gerade auch no einen ab, mal sehen,
mfg Kurt P


  

Betrifft: AW: Hallo geht nicht von: Tino
Geschrieben am: 17.10.2008 17:42:07

Hallo,
lade mal eine Beispieldatei hoch und sage mir welche Zelle bzw. Wert, Du wohin haben möchtest.


Gruß Tino


  

Betrifft: Hallo ich werde es nochmal so versuchen von: Kurt P
Geschrieben am: 17.10.2008 20:12:52

Hallo Tino,
das Problem liegt darin, wenn ich von der Tabelle "Alle" in die "Datenbank" gehe
und dann zurück, kann ich nur diese Zeile kopieren das geht.
Dann bleib ich aber in der Tabelle"Alle" und möchte von der aktiven Zelle in die
nächste Spalte um dann diesen Wert in die Datenbank der nächsten Spalte zu kopieren.
Hier ein Beispiel von meiner UF das klappt es:
Datenbank. von UF
ActiveCell.Offset(0, 13) = TextBox20
ActiveCell.Offset(0, 14) = Label27
ActiveCell.Offset(0, 15) = TextBox12

Dim az As Range
Dim dz As Range
Dim z, ze As Long

Sheets("Alle").Select
Set az = ActiveCell

Sheets("Datenbank").Activate
z = Range("G2").End(xlDown).Row
ActiveSheet.Range(Cells(z, 4), Cells(z, 34)).Select
ActiveCell.Offset(1, 0).Select 'aktive Zelle u. 1 Zeile runter
Set dz = ActiveCell

'---------------- wenn der Courser irgendwo in der Zeile steht ------------------
Sheets("Alle").Select
az.Select
ze = ActiveCell().Row
ActiveSheet.Range(Cells(ze, 3), Cells(ze, 51)).Select
ActiveCell().Select 'bleibt dann in der 3 Spalte
'--------------------------------------------------------------------------------
'in Datenbank von ALLe
dz.Value = az.Value 'Funktioniert
Exit Sub
mfg kurt P


  

Betrifft: AW: Hallo ich werde es nochmal so versuchen von: Tino
Geschrieben am: 17.10.2008 20:38:10

Hallo,
also dieser Code macht das gleiche wie Deiner mit den ganzen Select

Dim az As Range
Dim dz As Range
Dim z, ze As Long

With Sheets("Alle")
 .Select
    With Sheets("Datenbank")
     z = .Range("G2").End(xlDown).Row
     Set dz = .Cells(z, 4).Offset(1, 0)
    End With

dz.Value = .Cells(ActiveCell.Row, 3).Value
End With

Exit Sub


Gruß Tino


  

Betrifft: Du hast RECHT aber von: Kurt P
Geschrieben am: 17.10.2008 22:33:18

Hallo Tino,
ja Du hast RECHT aber jetzt möchte ich doch von der Tabelle "Alle" eine Spalte nach Rechts
und den Inhalt in die Datenbank RECHTS neben der voherigen Zelle.
dz.Value = .Cells(ActiveCell.Row, 3).Value
dz.Value +1 = .Cells(ActiveCell.Row, 4).Value

dz ist ja die Tabelle Alle ,
mfg kurt p


  

Betrifft: AW: Du hast RECHT aber von: Tino
Geschrieben am: 17.10.2008 22:53:44

Hallo,
da gibt es zwei Möglichkeiten

Möglichkeit 1

Dim az As Range
Dim dz As Range
Dim z, ze As Long

With Sheets("Alle")
 .Select
    With Sheets("Datenbank")
     z = .Range("G2").End(xlDown).Row
     Set dz = .Cells(z, 5).Offset(1, 0)
    End With

dz.Value = .Cells(ActiveCell.Row, 3).Value
End With

Exit Sub



Möglichkeit 2

Dim az As Range
Dim dz As Range
Dim z, ze As Long

With Sheets("Alle")
 .Select
    With Sheets("Datenbank")
     z = .Range("G2").End(xlDown).Row
     Set dz = .Cells(z, 4).Offset(1, 0)
    End With

dz.Offset(0, 1).Value = .Cells(ActiveCell.Row, 3).Value
End With

Exit Sub



Gruß Tino


  

Betrifft: Guten Morgenhier kommt Muster ! von: Kurt P
Geschrieben am: 18.10.2008 09:46:06

Guten Morgen Tino,

hier kommt Muster.
https://www.herber.de/bbs/user/56091.xls

mfg Kurt P


  

Betrifft: AW: Guten Morgenhier kommt Muster ! von: Tino
Geschrieben am: 18.10.2008 10:19:15

Hallo,
wünsche Dir auch erst mal einen Guten Morgen!

So müsste es gehen,
es werden nur die Werte übertragen keine Zellformate (Rahmen, Zellfarben usw.)
Sollte dies gewünscht sein, melde Dich nochmal, dann wir bauen den Code etwas um.

https://www.herber.de/bbs/user/56092.xls


Gruß Tino


  

Betrifft: Super aber die Spalten... von: Kurt P
Geschrieben am: 18.10.2008 14:50:56

Hallo Tino,
das Beispiel ist Gut DANKE aber ich muß einzelne Zellen kopieren bzw. bestimmte,
deswegen kann man nicht die kompl. Zeile kopieren.
Anstelle von Label oder Textbox ist also die akt. Zeile gemeint also aus der
"ALLE" Tabelle z.b. akt. Zeile Spalte1, 2,3,4,5, 7,9, 10 u.s.w
deshalb hatte ich das so kompliziert !

Hier mein Muster von meiner UF als Beispiel:
Dim z As Long
z = Range("G2").End(xlDown).Row
ActiveSheet.Range(Cells(z, 4), Cells(z, 34)).Select

ActiveCell.Offset(1, 0).Select 'ActiveCell.Offset(1, 0) idt die Datenbank
ActiveCell.Offset(0, 0) = Label89
ActiveCell.Offset(0, 1) = Label90
ActiveCell.Offset(0, 2) = Label91
ActiveCell.Offset(0, 3) = Label63
ActiveCell.Offset(0, 4) = Label88
ActiveCell.Offset(0, 5) = Label92
ActiveCell.Offset(0, 6) = Label93
ActiveCell.Offset(0, 7) = Label94
ActiveCell.Offset(0, 9) = TextBox18
ActiveCell.Offset(0, 10) = Label96
ActiveCell.Offset(0, 11) = TextBox27
ActiveCell.Offset(0, 12) = TextBox28
ActiveCell.Offset(0, 13) = TextBox20
ActiveCell.Offset(0, 14) = Label27
ActiveCell.Offset(0, 15) = TextBox12
ActiveCell.Offset(0, 16) = TextBox22
ActiveCell.Offset(0, 17) = Label33
ActiveCell.Offset(0, 18) = Label34
ActiveCell.Offset(0, 19) = Label86
ActiveCell.Offset(0, 20) = TextBox13
ActiveCell.Offset(0, 21) = TextBox14
ActiveCell.Offset(0, 22) = TextBox15
ActiveCell.Offset(0, 23) = TextBox16
ActiveCell.Offset(0, 24) = TextBox17
ActiveCell.Offset(0, 25) = Label80
ActiveCell.Offset(0, 26) = Label69
ActiveCell.Offset(0, 27) = Label80
ActiveCell.Offset(0, 28) = Label84
ActiveCell.Offset(0, 29) = Label72
ActiveCell.Offset(0, 30) = Label74.Caption

mfg kurt P




  

Betrifft: AW: Super aber die Spalten... von: Tino
Geschrieben am: 18.10.2008 15:23:33

Hallo,
verwende doch einfach anstelle von ActiveCell, dass Range Objekt.

Dim Datenbank As Range

With Sheets("Datenbank")
  Set Datenbank = .Cells(.Rows.Count, "D").End(xlUp).Offset(1, 0)
End With

With Datenbank
    .Value = Label89.Caption
    .Offset(0, 1) = Label90.Caption
    .Offset(0, 2) = Label91.Caption
    .Offset(0, 3) = Label63.Caption
    .Offset(0, 4) = Label88.Caption
    .Offset(0, 5) = Label92.Caption
    .Offset(0, 6) = Label93.Caption
    .Offset(0, 7) = Label94.Caption
    .Offset(0, 9) = TextBox18
    .Offset(0, 10) = Label96.Caption
    .Offset(0, 11) = TextBox27
    .Offset(0, 12) = TextBox28
    .Offset(0, 13) = TextBox20
    .Offset(0, 14) = Label27.Caption
    .Offset(0, 15) = TextBox12
    .Offset(0, 16) = TextBox22
    .Offset(0, 17) = Label33.Caption
    .Offset(0, 18) = Label34.Caption
    .Offset(0, 19) = Label86.Caption
    .Offset(0, 20) = TextBox13
    .Offset(0, 21) = TextBox14
    .Offset(0, 22) = TextBox15
    .Offset(0, 23) = TextBox16
    .Offset(0, 24) = TextBox17
    .Offset(0, 25) = Label80.Caption
    .Offset(0, 26) = Label69.Caption
    .Offset(0, 27) = Label80.Caption
    .Offset(0, 28) = Label84.Caption
    .Offset(0, 29) = Label72.Caption
    .Offset(0, 30) = Label74.Caption
End With




Gruß Tino


  

Betrifft: Hallo leider nochmal... von: Kurt P
Geschrieben am: 18.10.2008 15:49:00

Hallo Tino,
was setze ich den anstatt Label u. Textbox ein ?
Da muß doch von der Tabelle "Alle" ebenfalls ActiveCell.Offset(0, 1 verwendet werden,

mfg kurt p


  

Betrifft: AW: Hallo leider nochmal... von: Tino
Geschrieben am: 18.10.2008 16:04:06

Hallo,
z. Bsp. so

'ActiveCell.Row = die Zeilennummer
'und der Buchtabe ist die Spalte bzw.
'kann auch die ensprechende Spaltennummer verwendet werden

.Offset(0, 1) = Cells(ActiveCell.Row, "D") 'oder Cells(ActiveCell.Row, 4)
.Offset(0, 2) = Cells(ActiveCell.Row, "E") 'oder Cells(ActiveCell.Row, 5)
.Offset(0, 3) = Cells(ActiveCell.Row, "F") 'oder Cells(ActiveCell.Row, 6)



Gruß Tino


  

Betrifft: Ich verzweifel von: Kurt P
Geschrieben am: 18.10.2008 16:32:27

Hallo Tino,
habe in der Testdatei getestet geht nicht,
Von der Tabelle "Alle" soll in die Datenbank kopiert werden.
Als Ausgangspunkt für die akt.Zelle zu finden, hatte ich diese Makrozeilen:
Dim az As Range
Dim z, ze As Long
Sheets("Alle").Select
Set az = ActiveCell

Sheets("Alle").Select
az.Select
ze = ActiveCell().Row
ActiveSheet.Range(Cells(ze, 3), Cells(ze, 51)).Select
ActiveCell().Select 'bleibt dann in der 3 Spalte

egal wo ich in der Zeile den Courser gesetzt habe, ging dann die die akt. Zelle in die Spalte A,
jetzt sollte Zelle für Zelle in die nächste freie Zeile in die Datenbank kopiert werden, angefangen
in der Spalte "D", es wurde in der Spalte "G" ermittelt wie weit die Zeilen belegt sind, dann
habe ich den Courser 1 Zeile tifer und in die Spalte "D" gesetzt.

Jetzt sollte dann nach meiner Auswahl reinkopiert werden.
so z.b.
'.Offset(0, 1) = Cells(ActiveCell.Row, "D") 'oder Cells(ActiveCell.Row, 4)
'.Offset(0, 2) = Cells(ActiveCell.Row, "E") 'oder Cells(ActiveCell.Row, 5)
'.Offset(0, 3) = Cells(ActiveCell.Row, "F") 'oder Cells(ActiveCell.Row, 6)

tut mir leid ich teste auch schon mindesten 12h, werde bald ....

mfg kurt p


  

Betrifft: Habe mal so getestet aber von: Kurt P
Geschrieben am: 18.10.2008 17:10:06

Hallo Tino,
habe mal so getestet:

Sub Datensatz_In_Datenbank_Kopieren()
  Sheets("Datenbank").Activate
    z = Range("G2").End(xlDown).Row
        ActiveSheet.Range(Cells(z, 4), Cells(z, 34)).Select
        ActiveCell.Offset(1, 0).Select                  'aktive Zelle u. 1 Zeile runter
     Set dz = ActiveCell
'---------------- wenn der Courser irgendwo in der Zeile steht ------------------
    Dim az As Range
     Sheets("Alle").Select
    Set az = ActiveCell
   Sheets("Alle").Select
   az.Select
   ze = ActiveCell().Row
     ActiveSheet.Range(Cells(ze, 3), Cells(ze, 51)).Select
     ActiveCell().Select                                 'bleibt dann in der 3 Spalte
'--------------------------------------------------------------------------------

 Sheets("Datenbank").Range("D4").Value = ActiveCell.Offset(0, 0).Value
 Sheets("Datenbank").Range("E4").Value = ActiveCell.Offset(0, 1).Value
End Sub



Das klappt soweit aber wie kann ich diese Zeile:
Sheets("Datenbank").Range("D4").Value
halt variabel darstellen, da ich ja nicht die nächste Leere Zeile ansprechen kann ???

Nur das ist das Problem, die restlichen Zeilen erstellen ist ja kein Problem,
bitte nochmal helfen,
danke im voraus,
mfg kurt P


  

Betrifft: AW: Habe mal so getestet aber von: Tino
Geschrieben am: 18.10.2008 17:26:36

Hallo,
na so

Option Explicit

Sub Datensatz_In_Datenbank_Kopieren()
 Sheets("Alle").Select
With Sheets("Datenbank")
  Set Datenbank = .Cells(.Rows.Count, "D").End(xlUp).Offset(1, 0)
End With

'ActiveCell.Row gibt Dir die Zeilennummer in der Du dich befindest zurück 
'und die 3 bzw. 4 ist die Spalte 
 Datenbank.Value = Cells(ActiveCell.Row, 3)
 Datenbank.Offset(0, 1).Value = Cells(ActiveCell.Row, 4)
End Sub



Bin jetzt gleich außer Haus, heute Abend bin ich wieder Online.

Gruß Tino


  

Betrifft: Das wars, DANKE !!! -) von: Kurt P
Geschrieben am: 18.10.2008 17:39:58

Hallo Tino,
deine Version ist mal kürzer besser !
Läuft genau so wie ich brauche.

In der Zwischenzeit hatte ich auch (umständlich) auch das Ergebnis nur zur Info:
Sub Datensatz_In_Datenbank_Kopieren()
Sheets("Datenbank").Activate
z = Range("G2").End(xlDown).Row
ActiveSheet.Range(Cells(z, 4), Cells(z, 34)).Select
ActiveCell.Offset(1, 0).Select 'aktive Zelle u. 1 Zeile runter
Set dz = ActiveCell
'---------------- wenn der Courser irgendwo in der Zeile steht ------------------
Dim az As Range
Sheets("Alle").Select
Set az = ActiveCell
Sheets("Alle").Select
az.Select
ze = ActiveCell().Row
ActiveSheet.Range(Cells(ze, 3), Cells(ze, 51)).Select
ActiveCell().Select 'bleibt dann in der 3 Spalte
'--------------------------------------------------------------------------------
With Sheets("Datenbank")
.Cells(z + 1, 4) = ActiveCell.Offset(0, 0).Value
.Cells(z + 1, 5) = ActiveCell.Offset(0, 1).Value
.Cells(z + 1, 6) = ActiveCell.Offset(0, 2).Value
.Cells(z + 1, 7) = ActiveCell.Offset(0, 3).Value
.Cells(z + 1, 8) = ActiveCell.Offset(0, 4).Value
End With

herzlichen DANK !
Ein schönes Wochenende !


  

Betrifft: AW: Makrofehler nur beim Commandbutton von: Kawensmann
Geschrieben am: 17.10.2008 12:03:09

Hallo,

stell' die "TakeFocusOnClick"-Eigenschaft des Commandbuttons auf "False".

Gruß

Kawensmann


  

Betrifft: Hallo Kawensmann, DANKE für den Tip von: Kurt P
Geschrieben am: 17.10.2008 12:22:08




Beiträge aus den Excel-Beispielen zum Thema "Makrofehler nur beim Commandbutton"