Dieses Forum nutzt Cookies
Dieses Forum verwendet Cookies, um deine Login-Informationen zu speichern, wenn du registriert bist, und deinen letzten Besuch, wenn du es nicht bist. Cookies sind kleine Textdokumente, die auf deinem Computer gespeichert werden. Die von diesem Forum gesetzten Cookies werden nur auf dieser Website verwendet und stellen kein Sicherheitsrisiko dar. Cookies aus diesem Forum speichern auch die spezifischen Themen, die du gelesen hast und wann du zum letzten Mal gelesen hast. Bitte bestätige, ob du diese Cookies akzeptierst oder ablehnst.

Ein Cookie wird in deinem Browser unabhängig von der Wahl gespeichert, um zu verhindern, dass dir diese Frage erneut gestellt wird. Du kannst deine Cookie-Einstellungen jederzeit über den Link in der Fußzeile ändern.

Multiplikation
#21
Hallo George,

und hier findest Du eine Erklärung dazu.
Und lies auch das.
Gruß Stefan
Win 10 / Office 2016
Antworten Top
#22
Hallo Leute,

ich glaube kaum, daß das so was wird. Der arme George ist doch total überfordert.

@George, 
Deine Datei habe ich nicht gelesen, ist aber wohl eher auch nicht nötig, weil ja wohl, bis auf ein klitzekleines
Zipfelchen alles klar zu sein scheint
Zitat:Private Sub Worksheet_Change(ByVal Target As Range)
das Makro heißt Worksheet und das wiederum heißt übersetzt Tabellenblatt.
Dieses Makro gehört also nicht in ein allgemeines Modul, sondern hinter das Tabellenblatt, in dem es arbeiten soll.

Im VBA-Editor, daß ist da, wo Deine Makros jetzt stehen, findest Du unter anderem  oben links ein Fenster mit der
Aufstellung aller Blätter Deiner Datei. Dort findest Du auch den Blattnamen, wo Du willst, daß das Makro arbeitet.
Auf diesen Blattnamen klickst Du doppelt und dann geht rechts ein neues, leeres Fenster auf.
Hier kopierst Du Uwes Makro rein und speicherst alles. Du wirst sehen. das Makro funktioniert dann auch.

Ach ja, und Gratulation, das war Deine erste erfolgreiche Klassenprogrammierung. Zwar mit Hilfe, aber immerhin.
Im Allgemeinen Modul mußt Du das Makro natürlich löschen. Es gehört da nicht hin und bewirkt dort auch nichts.

Und hier noch ein gutgemeinter Rat:
Zitat:Mein Verständnis für deinen äußerst simplen und unpassen Lösungsvorschlag in Frage zu stellen ist wiederrum völlig unnötig.

Sowas sollte man besonders dann nicht schreiben, wenn man Hilfe sucht. das kommt nicht gut an.
Zumal Edgar jemand ist, der gewöhnlich genau weiß, was er vorschlägt.
________________________________________________________________________
wer aufgibt, ohne es versucht zu haben, gibt einfach nur auf!

Grüße aus Norderstedt, Peter
Antworten Top
#23
Hi George,

(28.05.2016, 18:52)George schrieb: Das untere ist von Uwe für die Multiplikation aber funktioniert leider noch nicht.

das ist ja klar, daß es nicht automatisch startet, wenn Du den Code im falschen Modul stehen hast und außerdem den Namen des Moduls änderst.
Damit Du weißt, was wo stehen muß und wie es heißen soll, damit das Gewünschte passiert, dafür haben Dir ja de anderen schon Links geschickt.
Antworten Top
#24
Guten Tag,

ich habe auf euer anraten und um ein besseres Verständniss zu entwickeln mir die verschiedenen Links durchgelesen.
Desweiteren habe ich auch das vorgeschlagene Makro zur Multiplikation erfolgreich integriert.
Ich danke wieder für eure Geduld und Ratschläge.
 
Trotzdem ergeben sich immer wieder neue Fragen :19:

Die Multiplikation bezieht sich ja auf ein Feld (Eingabe) durch den der ein definierter Bereich Multipliziert wird!
Ich habe aber nach eine gewissen Zeit mehrere Spalten mit unterschiedlichen Auflistungen die ich je nach Berdarf mit einem Faktor multiplizieren muss.
Muss ich um eine weiteren vordefinierten Bereich (weitere Spalte) mit einem anderen Multiplikator den Makro neu schreiben und anpassen ?
Oder könnte ich in einem Makro, eine Zeile mit Multiplikatoren und die sich auf die jeweilige Spalte darunter beziehen(Gesamtbereich) programmieren ?
Antworten Top
#25
Hallo George,

man könnte das Makro von Uwe anpassen.
Code:
Private Sub Worksheet_Change(ByVal Target As Range)
  'Variablendeklaration
  'String
  Dim strMulti$
  'Variable je nach geaendertem Bereich festlegen
  If Target.Address = "$E$6" Then strMulti="E10:E25"
  If Target.Address = "$F$6" Then strMulti="F10:F25"
  If Target.Address = "$G$6" Then strMulti="G10:G25"
  'Wenn Variable leer ist, dann wurde anderswo geaendert - Makro verlassen!
  If strMulti="" Then Exit Sub
  'Bei Fehler weiter im code
  On Error Resume Next
  'Ereignisse ausschalten
  Application.EnableEvents = False
  'Multiplikator kopieren
  Target.Copy
  'Multiplikator in Zielbereich per Multiplizieren einfuegen
  Range(strMulti).PasteSpecial Paste:=xlPasteValues, _
                             Operation:=xlMultiply, _
                            SkipBlanks:=False, _
                             Transpose:=False
  'Multiplikator in Eingabezelle entfernen
  Target = ""
  'Eingabezelle waehlen
  Target.Select
  'Kopiermodus ausschalten
  Application.CutCopyMode = False
  'Ereignisse einschalten
  Application.EnableEvents = True
End Sub
.      \\\|///      Hoffe, geholfen zu haben.
       ( ô ô )      Grüße, André aus G in T  
  ooO-(_)-Ooo    (Excel 97-2019+365)
Antworten Top
#26
Code:
Option Explicit                              'Forderung nach expliziter Deklaration aller Variablen

Public Sub Requiredgenerate1(seatNo As Integer)  'Public(öffentlich) Variablen können von Methoden anderer Module genutzt werden

Dim startSheet As Worksheet                 'startSheet als Arbeitsblatt

Dim requiredSheet As Worksheet

Dim requiredSheetName1 As String

Dim requiredRow As Long                     'Row = Reihe

Dim reference1Cell As Range                 'Cell = Zelle
   
Dim reference1Column As Long                'Column = Spalte
   
Dim current1Row As Long

Dim current1Cell As Range

Dim i As Integer

Const Search_Start_Row As Integer = 2      'Start der Bauteilsuche ab Zeile 11 in MAL

Const RESULT_START_ROW As Integer = 2      'Übertragung der Bauteile ab Zeile 11 in Montageliste


Set startSheet = Worksheets(1)              'Zuweisung der Objektvariablen

Set reference1Cell = startSheet.Range("Y2:BH2").Find(seatNo, LookIn:=xlValues)      'referenzCell = Ausdruck wird in den Formel-Ergebnissen der Zellen vom Bereich AC2 bis BM 2 gesucht
reference1Column = reference1Cell.Column                                             'referenzColumn = Referenz-Zelle in der Spalte

requiredSheetName1 = "Bedarfsplanung"                                                 'Arbeitsblatt generateSheetName1 heißt Bedarfsplanung
Worksheets("Bedarfsplanung").Activate                                                 'Aktivierung der Tabelle 3

   On Error Resume Next
   
   Set requiredSheet = Sheets(requiredSheetName1)
   
   On Error GoTo 0
   
    For i = Asc("Y") To Asc("ZZ")   'requiredSheet.Range über Schleife mit Variablen hochzählen ; i as Integer ; i++
           requiredRow = RESULT_START_ROW
   
            For current1Row = Search_Start_Row To startSheet.UsedRange.Rows.Count    'Filterung und nur Übertragung von Bauteilen mit einer Anzahl ab 1
           
           Set current1Cell = startSheet.Cells(current1Row, reference1Column)
           
               requiredSheet.Range("Y" & requiredRow).Value = current1Cell.Value                       'Bauteilanzahl
               requiredRow = requiredRow + 1
       Next
   Next i
End Sub
Hallo,

danke "schauan" die Variante klappt super und deine Kommentare waren zum Verständiss des gesamten Codes äußerst Hilfreich.  :100:

Nun will ich anschließend über einen Button je nach Bedarf verschiedene Varianten mit der entsprechendenen Spalten (Anzahl) auswählen und  zur Auswertung in eine andere Mappe übertragen und nebeneinander auflisten. Nun scheitert es an der Übertragung der einzelnen Spalten in die Spalten Y,Z,AA usw also nebeneinander in die nächste Mappe. Die Übertragung in eine definierte Spalte funktioniert aber bisher überschreibt er mir dann bei der nächsten Übertragung die alten Daten.
Habe schon ein Schleife eingebaut aber die Schleifenvariable i wird mit der Zelle i verwechselt. Vermute das statt .Range ein anderer Befehl kommen muss weiß es aber nicht genau. Anbei mein Code.

Danke und schönen Abend
Antworten Top
#27
Hallo George,

nach erstem Überfliegen des codes gebe ich Dir recht, zumindest, was die Codestelle betrifft Wink

Da steht in den Schleifen
...Range("Y" & requiredRow)...
Du befüllst also immer die Spalte Y, hast aber eine Schleife für die Spalten mit dem Schleifenzähler i.
Wenn Du verschiedene Spalten befüllen müsstest, dann z.B. so
.....Range(chr(i) & requiredRow)...
.      \\\|///      Hoffe, geholfen zu haben.
       ( ô ô )      Grüße, André aus G in T  
  ooO-(_)-Ooo    (Excel 97-2019+365)
Antworten Top
#28
Oder:


Code:
Private Sub Worksheet_Change(ByVal Target As Range)
  If Target.Row = 6 And Target.Column > 4 And Target.Column < 8 Then
    Application.EnableEvents = False
    Target.Offset(4).Resize(16) = Evaluate(Target.Address & "*" & Target.Offset(4).Resize(16).Address)
    Application.EnableEvents = True
  End If
End Sub
Antworten Top
#29
Hallo,

leider funktioniert die Variante von schauan nicht. Nach der Änderung zu  .....Range(chr(i) & requiredRow)...

findet gar keine Datenübertragung statt aber es kommt auch keine Fehlermeldung. Bei dem zweiten Code weiß ich nicht genau wie ich das in meinen vorhandenen Code eingebunden become.
So weit funktioniert ja alles ich möcht nur eine Schleife einbinden die mir die Daten nach dem betätigen des CommandButtons nebeneinander in der nächste Tabelle auflistet und nicht wieder die eine Spalte in dem derzeitigen Fall "Y" überschreibt. Hatte gehofft eine Lösung in Richtung dem Vorschlag von schauan zu finden.
Ich denke wir sind auch kurz vor der Lösung.

Vielen Dank
Antworten Top
#30
Hallo George,

eine Zeile höher steht doch schon ein Beispiel mit der Cells-Eigenschaft! Wink
Also anstatt
requiredSheet.Range("Y" & requiredRow).Value = current1Cell.Value                       'Bauteilanzahl
dann
requiredSheet.Cells(requiredRow, i).Value = current1Cell.Value                      'Bauteilanzahl
Gruß Uwe
Antworten Top


Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste