AW: VBA Programmierung
17.10.2009 08:15:21
Thomas
Hallo Mirko,
Jetzt forderst Du auch meine begrenzten VBA-Kenntnisse. Die Geschichte mit der Üernahme des Zwischenspeichers habe ich hier im Forum mal etwas recherchiert. und habe es auch ausprobiert:
Um Daten aus der Zwischenablage zu übernehmen mußt du erst einen Verweis auf die Microsoft Forms 2.0 Object Libraray setzten.
Hier ein Makro das von Nepomuk hier im Forum zur Verfügung gestellt wurde:
Public Sub prcCheckReverence()
Dim intIndex As Integer
Dim blnFound As Boolean
With ThisWorkbook.VBProject.References
For intIndex = 1 To .Count
If .Item(intIndex).GUID = "{0D452EE1-E08F-101A-852E-02608C4D0BB4}" Then
blnFound = True
If .Item(intIndex).IsBroken Then
.Remove .Item(intIndex)
.AddFromGuid GUID:="{0D452EE1-E08F-101A-852E-02608C4D0BB4}", _
Major:=2, Minor:=0
End If
End If
Next
If Not blnFound Then _
.AddFromGuid GUID:="{0D452EE1-E08F-101A-852E-02608C4D0BB4}", _
Major:=2, Minor:=0
End With
End Sub
Um diese Makro zum Laufen zu bringen mußt Du jedoch Deine Sicherheitseinstellungen ändern:
Unter Excel 2003 : "Extras - Makros - Sicherheit - Vertrauenswürdige Herausgeber - Zugriff auf VB-Projekt vertrauen"
Unter Excel 2007 : "Office-Logo - Excel-Optionen - Vertrauensstellungscenter - Einstellungen für das Vert. - Einstellungen für Makros - Zgriff auf das VB-Projektmodell vertrauen"
(von NoNet aus einem Forumsbeitrag vom 06.11.08)
Danach kannst Du nun die Zwischenablage übernehmen:
(von Lutz Schnalke ausForums Beitrag vom 14.12.2002)
Sub einfügen()
' Dim KdNrText As String ' Habe ich als Public herausgezogen um weiter famit arbieten zu können
Dim KdNr As DataObject
Set KdNr = New DataObject
'Kd.Nr. aus Zwischenablage in DataObject und von dort
'im Variable KdNrText übernehmen
KdNr.GetFromClipboard
KdNrText = KdNr.GetText()
'Kd.Nr. aus Variable in DataObject
'und von dort in Zwischenablage
KdNr.SetText KdNrText
KdNr.PutInClipboard
nummer
End Sub
Sub nummer() 'wandelt den string KdNr in eine Zahl
' Dim zahl As Long
' Dim stellen As Boolean ' als Public vorgezogen, damit in userform verwendet werden kann
stellen = False ' wird gesetzt damit auch bei anderem Fehler (siehe nächste Zeile) das Programm
' nicht gestartet wird
On Error Resume Next 'verhindert Fehlermeldung wenn Zwischspeicher kein Zahl war
zahl = CLng(KdNrText) 'wandelt String in Zahl
If 1000000000
'Nummer nicht mit 0 beginnt
stellen = True
End If
End Sub
Nun hast Du die Variable 'stellen' mit der Du deine Userform steuern kannst:
in userform_initialize einfügen
If stellen = False THEN
Msgbox "Fehlermeldung"
CommandButton1.Enabled = False
CommandButton2.Enabled = False
CommandButton3.Enabled = False
.......
ELSE
CommandButton1.Enabled = True
........
End If
Um nun die Nummer in Tabelle einzufügen mußt du deine CommandButton_Clicks entsprechend erweitern
Private Sub CommandButton1_Click()
Worksheets("Tabelle1").Cells(5, 9) = Cells(5, 9) + 1
Worksheets("Tabelle2")Cells(2,1) = zahl
aktualisieren
End Sub
....
Wenn Du eine Tabelle ausblenden willst muß Du an den Beginn Deines Codes einfach
Worksheets("Tabelle2").Visible = False einfügen zum wieder einblenden entsprechend ..=true
Dies ist natürlich viele einfacher als das komplette ausblenden von Excel überdas wir vorher geschrieben haben.
Zum Ausdrucken mußt du Tabelle2 wieder aktivieren, Du kannst die Ansicht jedoch unterdrücken. Siehe folgendes Sub
Sub drucken()
Dim lauf As Integer
Application.ScreenUpdating = False ' schaltet Bildschirmaktualiserung aus
Worksheets("Tabelle2").Visible = True ' macht Tabelle 2 sichtbar (sicht man jedoch nicht wegen Zeile vorher)
Worksheets("Tabelle2").PrintOut ' druckt tabelle aus
For lauf = 1 To 7 ' setzt Tabelle 2 zurück
Worksheets("Tabelle2").Cells(2, lauf) = ""
Next lauf
Worksheets("Tabelle2").Visible = False ' macht Tabelle2 wieder unsichtbar
Application.ScreenUpdating = True ' schaltet Bildschirmaktualisierung wieder ein
End Sub
Ich hoffe ich konnte Dir hiermit etwas helfen.
Gruß
Thomas