Anzeige

 Erstellen von drei Eingabefeldern


Joe0

Grünschnabel
#1
Hallo zusammen,

ich bin ein absoluter vba Anfänger und hab auch schon überall nach einer Lösung gesucht.

Ich hab eine Tabelle mit über 50 Spalten, die ich befüllen möchte.
Es gibt eine Spalte in der die Kennungsnummer gelistet ist.( ABC1, ABC2, ABC3 usw.)
Ich hätte gern 3 Eingabefelder wo ich die Nummer aussuchen kann, die richtige Spalte aussuchen kann und ein Eingabefeld in das ich etwas reinschreiben kann. Durch ein Button soll die Eingabe bestätigt werden und in die richtige Zelle eingefügt werden.

Ich hoffe ihr könnt mir helfen und schon mal vielen Dank :)

Beste Grüße
Joe
 

Yaslaw

n/a
Moderator
#2
Beginnen wir mal ganz vorne. Du schreibst von SPalten. Ich nehme an, es geht um VBA in EXCEL.

Eine Spalte hat die Kennungsnummern. Sagen wir mal die Adresse [DataSheet$A:A]
Irgendwie hast du drei Eingabefelder (Formular? Spezifische Zellen im Excelsheet?). Diese Nummern sollen dann gesucht werden.
Gehen wir von Feldern in einem anderen Sheet aus: [FormSheet$A2], [FormSheet$B2] und [FormSheet$C2]
Ein weiteres Feld beinhaltet ein Text. [FormSheet$D2]

Dann gibt es einen Knopf.
Beim klicken soll irgend was gemacht werden. Was? Und wo ist die richtige Zelle?
 

Joe0

Grünschnabel
#3
Also in der ersten spalte steht zb die Artikelnummer von A1 bis A50 (ABC1,ABC2,ABC3 usw.)
in den nächsten spalten stehen dann Sachen wie zb die Farbe, typ usw. (auch über 50 spalten lang)
nun möchte zb bei einem Artikel die Farbe ändern jedoch will ich das nicht manuell suchen und eingeben da es ja eine sehr große Tabelle ist.
Durch ein Eingabe Feld könnte ich sicher gehen die Änderung der richtigen Artikelnummer zuordnen zu können

Also würde ich in ein Eingabefeld "ABC10" eingeben, in das andere "Farbe" und in das letzte "rot" und durch ein Einem Button soll diese Eingabe bestätigt werden und der richtigen Zelle zugeordnet werden.

Danke das du mir helfen willst, ich hoffe, dass ich es jetzt verständlicher erklärt habe. :)
 

Yaslaw

n/a
Moderator
#5
Jepp. Habs glaub verstanden.
Ich habe dir mal ein Beispiel hochgeladen

- Die Eingabefelder sind benannte Ranges
- Für die Artikellnummer- und Spaltenauswahl ist das Eingabefeld über Data-Datavaluation (keine Ahnung wie das im deutschen Excel heisst) definiert, damit man eine Combobox hat
- Die Namen der bennanten Ranges und der Excelsheets sind im Code als Konstanten hinterlegt. Muss ggf angepasst werden

Hier noch der Code für alle mitleser, die das Beispiel nicht herunterladen wollen
Visual Basic:
Option Explicit

'Benannte Eingabefelder
Private Const C_ID = "FRM_ID"
Private Const C_COLUMN_NAME = "C_COLUMN_NAME"
Private Const C_NEW_VALUE = "FRM_NEW_VALUE"

'Name der Worksheets
Private Const C_DATA_SHEET = "Data"     'Das Sheet mit den Daten
Private Const C_FORM_SHEET = "Modify"   'Das Sheet mit dem "Formular"

'/**
' * Änder einen Wert in einer Matrix
' */
Sub changeItem()
    Dim id As String, colName As String, newValue As Variant, oldValue As Variant, address As String
    Dim colNr As Long, rowNr As Long
    Dim wsData As Worksheet, wsForm As Worksheet
   
    'Worksheets zuteilen
    Set wsData = ActiveWorkbook.Worksheets(C_DATA_SHEET)
    Set wsForm = ActiveWorkbook.Worksheets(C_FORM_SHEET)
   
    'Werte auslesen
    id = wsForm.Range(C_ID)
    colName = wsForm.Range(C_COLUMN_NAME)
    newValue = wsForm.Range(C_NEW_VALUE)
   
    'Koordinaten bestimmen
    colNr = WorksheetFunction.Match(colName, wsData.Range("$1:$1"), 0)
    rowNr = WorksheetFunction.Match(id, wsData.Range("A:A"), 0)
   
    oldValue = wsData.Cells(rowNr, colNr).Value
    address = wsData.Cells(rowNr, colNr).address

    'Bestehenden Wert überschrieben
    If MsgBox("Wert in " & address & " wiklich ändern?" & vbCrLf & oldValue & " => " & newValue, vbQuestion + vbYesNo + vbDefaultButton1) = vbYes Then
        wsData.Cells(rowNr, colNr).Value = newValue
    End If
End Sub
 

Anhänge

Anzeige
Anzeige