Hallo zusammen,
ich arbeite in einem großen Konzern, bei dem ich keinen Einfluss auf die Konfiguration habe.
Wir arbeiten mit Windows XP und und Excel 2003.
Ich habe nun folgendes Problem:
Ich wollte über VBA in Arbeitsblätter schreiben.
Die Anwendung ist dazu gedacht, ausgelernte Azubis den Zielabteilungen zuzuordnen. In ein Arbeitsblatt, in dem eine Matrix aufgebaut wird, werden jeweils die Rankings eingetragen - der Abteilungen, die die Auszubildenden bewerten und der Auszubildenden, die die Abteilungen bewerten, so dass ein pairing stattfinden kann.
Das Source-Arbeitsblatt ist folgendermaßen strukturiert:
Überschrift
Abteilungen
Abteilung 1
Abteilung 2
Abteilung 3
Auszubildende
Name 1
Name 2
Name 3
Die Idee ist, aus einem vorbereiteten Arbeitsblatt die Werte in eine Tabelle zu lesen und in ein anderes Arbeitsblatt zu schreiben:
Hier mein VBA-Coding:
Option Explicit
' Systemwerte
Type SysVal
' Das Arbeitsblatt, in dem die Ausgelernten und die Abteilungen stehen
Source As String
' Arbeitsblatt der Matrix
Matrix As String
' Arbeitsblatt, in das das Ergebnis geschrieben wird
Resultat As String
' Tabellen-Limit der zu verteilenden Ausgelernten
Ausgelernte\_Lim As Integer
' Tabellen-Limit Anzahl der Abteilungen
Abteilungen\_Lim As Integer
End Type
' Struktur für die Auszubildenden
Type Azubi
' Markieren, wenn einer schon vergeben ist
Mark As Boolean
' Name
Name As String
End Type
Public SysValues As SysVal
' Tabelle für Abteilungen
Type TabsAbt
' Counter
Counter As Integer
' Abteilungen
Abt(20) As String
End Type
Public TabsAbteilung As TabsAbt
' Tabelle für die Auszubildenden
Type Azubis
' Counter
Counter As Integer
' Abteilungen
Azubis(20) As Azubi
End Type
Public TabsAzubis As Azubis
Private Sub Matrix()
SystemValues
FillTabs
End Sub
Private Sub SystemValues()
SysValues.Source = "Abteilungen-Auszubildende"
SysValues.Matrix = "Matrix"
SysValues.Resultat = "Bewertet"
SysValues.Ausgelernte\_Lim = 20
SysValues.Abteilungen\_Lim = 20
End Sub
Private Sub FillTabs()
Dim i1 As Integer
Dim i2 As Integer
Dim Line As Integer
Dim Modus As Integer
Dim SWModus As String
Dim BStop As Boolean
Sheets(SysValues.Source).Select
Line = 2
While Len(LTrim(RTrim(Cells(Line, 1)))) Or BStop
If UCase(Cells(Line, 1)) = "ABTEILUNGEN" Or \_
UCase(Cells(Line, 1)) = "AUSZUBILDENDE" Then
SWModus = UCase(Cells(Line, 1))
Select Case SWModus
Case "ABTEILUNGEN"
Modus = 1
Case "AUSZUBILDENDE"
Modus = 2
End Select
Else
Select Case Modus
Case 1
TabsAbteilung.Counter = TabsAbteilung.Counter + 1
If TabsAbteilung.Counter \> SysValues.Abteilungen\_Lim Then
MsgBox "Zu viele Abteilungen"
Else
TabsAbteilung.Abt(TabsAbteilung.Counter) = Trim(Cells(Line, 1))
End If
Case 2
TabsAzubis.Counter = TabsAzubis.Counter + 1
If TabsAzubis.Counter \> SysValues.Ausgelernte\_Lim Then
MsgBox "Zu viele Auszubildende"
Else
TabsAzubis.Azubis(TabsAzubis.Counter).Name = Trim(Cells(Line, 1))
End If
End Select
End If
Line = Line + 1
Wend
' Da ich mit dem Select scheiterte, versuchte ich, das Blatt neu anzulegen.
For i1 = 1 To Application.Sheets.Count
If Application.Sheets(i1).Name = SysValues.Matrix Then
Application.Sheets(i1).Delete
i1 = Application.Sheets.Count + 1
End If
Next
Set NewSheet = Application.Sheets.Add(Type:=xlWorksheet, After:=Worksheets(Worksheets.Count))
NewSheet.Name = SysValues.Matrix
**Worksheets(SysValues.Matrix).Select**
i2 = 1
Cells(i2, 1) = "Zuordnungen"
For i1 = 1 To TabsAbteilung.Counter
i2 = i2 + 1
Cells(i2, 1) = TabsAbteilung.Abt(i1)
Next i1
i2 = i2 + 1
Cells(i2, 1) = "Azubis"
For i1 = 1 To TabsAzubis.Counter
i2 = i2 + 1
Cells(i2, 1) = TabsAzubis.Azubis(i1).Name
Next i1
End Sub
Das markierte Select bringt es nicht, das Arbeitsblatt aus dem gelesen wurde, wird überschrieben. Ich bin schier am Verzweifeln?
