Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1744to1748
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

Code Verbesserung

Code Verbesserung
16.03.2020 12:47:27
Robert
Hallo Zusammen,
an sich tun die Makros im angehängten Excel-Workbook genau das, was ich haben möchte, aber ich bin mit ein Teil der Programmierung nicht zufrieden. Das Datenblatt arbeitet zusammen mit einem Barcode-Scanner, die bestimmte Zellen mit Nummern füllt. Kurze Bedienanweisung: Klicke auf der Produktname, der Cursor springt (abhängig vom Monatsnummer) zur ersten Eingabe-Zelle, 8 x Barcode - oder 8x etwas eingeben und mit "enter" abschliessen - , cursor springt zur Ruhe-Position.
Was mir nicht gefällt sind diese Code-Zeilen, weil Sie alle gleich sind und für jedes Produkt (alle unebene Zeilen) wiederholt werden müssen. Es muss doch einfacher gehen, nur ich finde die Lösung gerade nicht (blind oder dumm könnt Ihr entscheiden).
Case "B7"
If Check = "C" Then
Call Control_R
Exit Sub
End If
Range(NameCell).Offset(0, s).Select
Range(NameCell).Offset(0, s).Interior.ColorIndex = 19
Range("A1").Value = ActiveCell.Row: Range("A2").Value = 1 'Tell where you are
Case "B9"
If Check = "C" Then
Call Control_R
Exit Sub
End If
Range(NameCell).Offset(0, s).Select
Range(NameCell).Offset(0, s).Interior.ColorIndex = 19
Range("A1").Value = ActiveCell.Row: Range("A2").Value = 1 'Tell where you are
Case "B11"
If Check = "C" Then
Call Control_R
Exit Sub
End If
Range(NameCell).Offset(0, s).Select
Range(NameCell).Offset(0, s).Interior.ColorIndex = 19
Range("A1").Value = ActiveCell.Row: Range("A2").Value = 1 'Tell where you are
etc.
Link zum Workbook: https://www.herber.de/bbs/user/135893.xlsm
Wenn Ihr hier eine Lösungsansatz geben könntet, wäre ich Euch sehr dankbar. Auch gerne andere Kommentare zur Code-Verbesserung - ich möchte immer noch dazu lernen

10
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Code Verbesserung
16.03.2020 13:14:44
UweD
Hallo
ungetestet...
Tipp: Nie eigenen Variablenname so wählen, wie VBA Bezeichnungen (Month)

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
On Error GoTo Fehler
Const APPNAME = "Worksheet_SelectionChange"
Dim Check As String, MMonth As Integer, r As Integer, cStart As Integer, s As Integer
Application.Volatile
'Set mode and period parameter
Check = Range("D1").Value
MMonth = Range("D3").Value
'Month to define which columns to select
If mmont = 7 And .Row  0 Then MsgBox "Fehler in Sub """ & APPNAME & """" & vbCrLf _
& "Fehlernummer: " & Err.Number & vbLf & Err.Description: Err.Clear
End Sub
LG UweD
Anzeige
AW: Code Verbesserung
16.03.2020 13:28:47
UweD
Sorry, noch Schreibfehler

'Month to define which columns to select
If MMonth 

AW: Code Verbesserung
16.03.2020 14:15:56
Robert
Danke Uwe,
werde es sofort testen und mich dann wieder melden. Du hast recht, Month sollte ich so nicht benutzen, hatte es kurzfristig geändert von Monat in Month damit alles in English war.
Grüße
Robert
AW: Code Verbesserung
16.03.2020 16:56:22
Robert
Hallo Uwe, danke nochmals, habe wieder einiges dazu gelernt. Jetzt funtzt es und der Code sieht so aus:
Option Explicit
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
On Error GoTo ErrorHandler
Const APPNAME = "Worksheet_SelectionChange"
Dim Check As String, MMonth As Integer, s As Integer
Application.Volatile
'Set mode and period parameter
Check = Range("D1").Value
MMonth = Range("D3").Value
'Month to define which columns to select
If MMonth = 7 And .Row  0 Then
Text1 = "Error nr. : " & E_N
Text2 = "Error Description: " & E_D
Text = Text1 & Chr(10) & Text2 & Chr(10)
MSG = MsgBox(Text, vbOKOnly)
Err.Clear
Exit Sub
End If
End Sub

Anzeige
Prima. Danke für die Rückmeldung owT
16.03.2020 17:02:00
UweD
AW: Prima. Danke für die Rückmeldung owT
16.03.2020 17:11:50
Robert
Hallo Uwe, doch noch eine Frage.
Hast Du hier noch eine Lösung?
in Makro 1 eine Nachricht auf dem Datenblatt hinterlassen aus welche Zelle du kommst
Range("A1").Value = ActiveCell.Row: Range("A2").Value = 1 'Tell where you are
und in Makro 2 vom Datenblatt das auslesen damit er findet wo er her kam
r = Range("A1").Value: c = Range("A2").Value 'Look where you came from
Grüße Robert
AW: Prima. Danke für die Rückmeldung owT
17.03.2020 08:43:37
UweD
Hallo
Teil 1 ist doch schon erledigt:
Da das Makro im Codebereich von der Tabelle abgelgt ist, wird DIESES Arbeitsblatt bei Range() verwendet.
            Range("A1").Value = Target.Row: Range("A2").Value = 1

Teil2
Hier musst du nur noch das Blatt vorranstellen
r = sheets("TabelleX").Range("A1").Value: c = sheets("TabelleX").Range("A2").Value
LG UweD
Anzeige
AW: Prima. Danke für die Rückmeldung owT
17.03.2020 16:22:14
Robert
Danke Uwe,
also, um das in einer Zelle ablegen, wo man herkam und später wieder auslesen, wo man hinmuss, kommt man nicht herum.
Ich hatte gehofft, es irgendwo in der Code abzulegen und nicht in eine Zelle.
Durch Deine viel kürzere Lösung konnte ich einiges an Code löschen - kannst Du Dir sicher vorstellen bei 11 Datenblätter je mit 150 Zeilen Tabellen (Case C9, C11, ......).
Grüße Robert
AW: Prima. Danke für die Rückmeldung owT
17.03.2020 16:53:47
UweD
Ach so
Jetzt verstehe ich was du möchtest
Wenn du die Variablen in einem normalen Modul als Public definierst, kannst du aus allen Makros darauf zugreifen.
so nach diesem Prinzip:
Modul1
 
Option Explicit 
 
Public r As Integer 
Public c As Integer 
 
 
Sub M1() 
    r = 2 
    c = 1 
End Sub 
 
 
Sub M2() 
    MsgBox r & "/" & c 
End Sub 

LG UweD
Anzeige
AW: Prima. Danke für die Rückmeldung owT
20.03.2020 14:43:25
Robert
Danke Uwe,
werde es ausprobieren
Grüße Robert

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige