Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
836to840
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
836to840
836to840
Aktuelles Verzeichnis
Verzeichnis Index
Verzeichnis Index
Übersicht Verzeichnisse
Inhaltsverzeichnis

Combobox auf Userform zum Starten untersch. Makros

Combobox auf Userform zum Starten untersch. Makros
19.01.2007 22:48:42
Till
Hi Leute,
ich möchte gerne auf einer Userform eine Dropdownliste erstellen, ohne dabei Werte aus der Tabelle nehmen zu müssen.
Dann soll je nach Auswahl dieser Einträge in der Dropdownliste (Combobox) ein anderes Makro angestoßen werden.
Das, was ich bis jetzt gebastelt hatte, startet aber immer alle Makros, die mit den Einträgen in der Combobox verknüpft sind.
Das ist aber ungewünscht.
Genauso soll das entsprechende Makro auch erst ausgeführt werden, wenn der Benutzer eine Auswahl in der Combobox vornimmt.
Hier das was ich bis jetzt habe:
'Makro für das Füllen der Combobox

Private Sub UserForm_Initialize()
On Error Resume Next
ComboBox2.ColumnCount = 1
ComboBox2.HideSelection = False
Verkehr.ComboBox2.Clear
'Load data into ComboBox
With Verkehr 'Name meiner Userform
ComboBox2.AddItem "Straße 1"
ComboBox2.AddItem "Straße 2"
ComboBox2.AddItem "Straße 3"
'Liste geht analog bis "Straße 38" weiter!
ComboBox2.ListIndex = 0
End With
End Sub

'Und dann noch das Makro zum Starten der Untermakros aus der Combobox

Private Sub ComboBox2_Change()
If Me.ComboBox2.Value = "Straße 1" Then
Call Makro1
End If
If Me.ComboBox2.Value = "Straße 2" Then
Call Makro2
End If
If Me.ComboBox2.Value = "Straße 3" Then
Call Makro3
End If
'usw bis "Straße 38"
Leider kann ich aber mit diesem Code das oben gewünschte nicht hinbekommen!
Hier startet beim Aufrufen der Userform direkt die Makroprozedur
Wer kann mir da weiterhelfen?
Wäre für jede Hilfe dankbar.
Vielleicht ist es ja auch ganz einfach und ich habe nur ein "Brett" vor dem Kopf und bin schon ganz nah an der Lösung?
Danke schon mal!
Gruß Till

		

17
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Combobox auf Userform zum Starten untersch. Makros
19.01.2007 22:58:06
Josef
Hallo Till,
z.B. so.
' **********************************************************************
' Modul: UserForm1 Typ: Userform
' **********************************************************************

Option Explicit
Dim blnAction As Boolean

Private Sub ComboBox2_Click()
    If ComboBox2.ListIndex > -1 And blnAction Then
        Run ("Makro" & ComboBox2.ListIndex + 1)
    End If
End Sub

Private Sub UserForm_Activate()
    Dim intC As Integer
    blnAction = False
    With ComboBox2
        .ColumnCount = 1
        .HideSelection = False
        For intC = 1 To 38
            .AddItem "Straße " & CStr(intC)
        Next
        ComboBox2.ListIndex = 0
    End With
    blnAction = True
End Sub

Aber warum brauchst du für jede Strasse ein eigenes Makro?
Das lässt sich bestimmt effektiver lösen.
Gruß Sepp
Anzeige
AW: Combobox auf Userform zum Starten untersch. Ma
19.01.2007 23:02:09
Till
Hallo Sepp,
erst einmal Danke für die schnelle Antwort. Werde den Code gleich mal testen. Meld mich dann noch mal, wenn ich glücklich bin ;-)
Schönen Abend noch!
Gruß Till
AW: Combobox auf Userform zum Starten untersch. Ma
19.01.2007 23:30:14
Till
Hallo Sepp,
Dein Tipp hat soweit super geklappt.
Wie lass ich denn die erste Auswahl leer.
So wie das jetzt ausschaut, steht die Combobox auf dem ersten Eintrag beim Öffnen der Userform, so dass ich den ersten Eintrag nicht mehr auswählen kann.
Oder hab ich da noch was falsch verstanden?
Gruß Till
AW: Combobox auf Userform zum Starten untersch. Ma
19.01.2007 23:35:06
Josef
Hallo Till,
' **********************************************************************
' Modul: UserForm1 Typ: Userform
' **********************************************************************

Option Explicit

Dim blnAction As Boolean

Private Sub ComboBox2_Click()
    If ComboBox2.ListIndex > 0 And blnAction Then
        Run ("Makro" & ComboBox2.ListIndex)
    End If
End Sub

Private Sub UserForm_Activate()
    Dim intC As Integer
    blnAction = False
    With ComboBox2
        .ColumnCount = 1
        .HideSelection = False
        .AddItem "Strasse auswählen"
        For intC = 1 To 38
            .AddItem "Straße " & CStr(intC)
        Next
        ComboBox2.ListIndex = 0
    End With
    blnAction = True
End Sub

Trotzdem glaube ich nicht, das du 38 Makros benötigst.
Zeig mal eines der Makros her, und beschreibe worin sich z.B. "Makro1" von "Makro2" unterscheidet.
Gruß Sepp
Anzeige
AW: Combobox auf Userform zum Starten untersch. Ma
20.01.2007 00:56:36
Till
Hallo Sepp,
danke für den letzten Tipp schon mal.
Also weiter unten der Code für eins von den 38 Makros.
Hier der Grund für die Anzahl der Makros.
Ich importiere aus unterschiedlichen Ordnern (je nach Straße) datumsbdingt verschiedene Txt-Dateien. Die Txt-Dateien heißen so wie das Datum, was ich mir jeweils in die Zelle A1 bei Auswahl aus einem Kalendarelement (liegt auch auf der Userform) schreiben lasse.
Bei Auswahl des ersten Straßennames in der Dropdownliste soll also dieser Einlesevorgang stattfinden, und jeweils 5 Diagramme erstellt werden, die man nachher als Image auf der Userform als GIF nacheineinader durchschalten kann. Die reinen Quelldaten dieser jeweiligen Txt-Datei soll außerdem auf einem anderen Karteireiter der Userform in einer Listbox erscheinen.
In der temporär geöffneten Txt-Datei entstehen dabei 2 weitere Mappen "Wertetabelle" und "div_Diagramme", aus der dann die Grafiken und die Quelldaten gelesen werden können.
Tricky ist dabei nur noch, wie ich die temporären Grafiken und Wertetabellen löschen kann, wenn ich dann einen anderen Straßenquerschnitt auswähle, um den selben Prozess zu starten.
Vielleicht wird jetzt alles deutlicher.
Danke schon mal!
Gruß Till
Hier mal der Kram, den ich wohl nicht überall sauber bisher programmiert hab.

Sub Straße1()
On Error Resume Next
Dim subfolder As String
Dim Datum As String
Dim ByI As Byte
subfolder = ("040468FF6A69740E\Linie_0510\")
Datum = Range("a1").Value
'   Dateiname 030117_m.xls; JJJJMMTT
Application.ScreenUpdating = False 'hier ggf. abschalten
For ByI = 0 To 0
Workbooks.OpenText Filename:="C:\My Autoscope\Polling Data\" & Format(subfolder) & Format(Datum) & "_" & Format(ByI) & ".txt", DataType:=xlDelimited, semicolon:=True
Next ByI
'Makro zum Einfügen neuer Diagramme nach Importieren von Dateninhalten aus den Pollingdateien
'Namenskonvention 1_1: Makro für Diagramm 1 der 1. Station, 1_2: Makro für Diagramm 2 der 1. Station, 2_1: Makro für Diagramm 1 der 2. Station u.s.w.
Dim objName1_1 As Range
Dim rngF1_1 As Range
Dim rngK1_1 As Range
Dim rngUnion1_1 As Range
'Filtern aktivieren
Columns("D:H").Select
Selection.AutoFilter
'Filter für Spalte E einstellen
Selection.AutoFilter Field:=2 ', Criteria1:="D1*"
Application.SendKeys ("{Down}{Down}{Down}~"), True
'Filter für Spalte H einstellen
Selection.AutoFilter Field:=5, Criteria1:="100"
'Neues Tabellenblatt einfügen und Umbenennen der beiden Blätter
Sheets.Add
With Excel.Application.Worksheets(1)
.Name = "div_Diagramme"
End With
With Excel.Application.Worksheets(2)
.Name = "Wertetabelle"
End With
'Tabelle einfügen
Set objName1_1 = Sheets("Wertetabelle").Range("D10")
Set rngF1_1 = Sheets("Wertetabelle").Range("F5:F22400")
Set rngK1_1 = Sheets("Wertetabelle").Range("K5:K22400")
Set rngUnion1_1 = Application.Union(rngF1_1, rngK1_1)
With Excel.Application.Worksheets("div_Diagramme").ChartObjects.Add _
(Left:=0, Width:=375, Top:=0, Height:=225)
.Chart.SetSourceData Source:=rngUnion1_1
.Chart.ChartType = xlXYScatter
End With
'Anwählen des Diagramms
ActiveSheet.ChartObjects("Diagramm 1").Activate
ActiveChart.ChartArea.Select
'Formatieren der Tabelle
With ActiveChart
.ChartArea.AutoScaleFont = False
.HasTitle = True
.ChartTitle.Characters.Text = "Kennlinie Qges" 'objName
.ChartTitle.Font.Bold = True
.ChartTitle.Font.Size = 12
.HasLegend = False
With .Axes(xlCategory, xlPrimary)
.HasTitle = True
.HasMajorGridlines = True
.HasMinorGridlines = False
.MinimumScaleIsAuto = True
.MaximumScale = 1
.MinorUnitIsAuto = True
.MajorUnitIsAuto = True
.Crosses = xlAutomatic
.ReversePlotOrder = False
.ScaleType = xlLinear
.DisplayUnit = xlNone
With .AxisTitle
.Characters.Text = "Tageszeit [h]"
.Font.Size = 10
.Font.Bold = True
End With
End With
With .Axes(xlValue, xlPrimary)
.HasTitle = True
.HasMajorGridlines = True
.HasMinorGridlines = False
With .AxisTitle
.Characters.Text = "Qges [Kfz/h]"
.Font.Size = 10
.Font.Bold = True
End With
End With
End With
'Keine Hintergrundfarbe im Diagramm:
With Excel.Application
.ActiveChart.PlotArea.Select
.Selection.Interior.ColorIndex = xlNone
End With
'hier beginnt der Code für Diagramm2
Dim objName1_2 As Range
Dim rngF1_2 As Range
Dim rngK1_2 As Range
Dim rngUnion1_2 As Range
Sheets("div_Diagramme").Activate
'Tabelle einfügen
Set objName1_2 = Sheets("Wertetabelle").Range("D10")
Set rngF1_2 = Sheets("Wertetabelle").Range("F5:F22400")
Set rngK1_2 = Sheets("Wertetabelle").Range("L5:L22400")
Set rngUnion1_2 = Application.Union(rngF1_2, rngK1_2)
With Excel.Application.Worksheets("div_Diagramme").ChartObjects.Add _
(Left:=375, Width:=375, Top:=0, Height:=225)
.Chart.SetSourceData Source:=rngUnion1_2
.Chart.ChartType = xlXYScatter
End With
'Anwählen des Diagramms
ActiveSheet.ChartObjects("Diagramm 2").Activate
ActiveChart.ChartArea.Select
'Formatieren der Tabelle
With ActiveChart
.ChartArea.AutoScaleFont = False
.HasTitle = True
.ChartTitle.Characters.Text = "Kennlinie Vmittel" 'objName
.ChartTitle.Font.Bold = True
.ChartTitle.Font.Size = 12
.HasLegend = False
With .Axes(xlCategory, xlPrimary)
.HasTitle = True
.HasMajorGridlines = True
.HasMinorGridlines = False
.MinimumScaleIsAuto = True
.MaximumScale = 1
.MinorUnitIsAuto = True
.MajorUnitIsAuto = True
.Crosses = xlAutomatic
.ReversePlotOrder = False
.ScaleType = xlLinear
.DisplayUnit = xlNone
With .AxisTitle
.Characters.Text = "Tageszeit [h]"
.Font.Size = 10
.Font.Bold = True
End With
End With
With .Axes(xlValue, xlPrimary)
.HasTitle = True
.HasMajorGridlines = True
.HasMinorGridlines = False
With .AxisTitle
.Characters.Text = "Vmittel [km/h]"
.Font.Size = 10
.Font.Bold = True
End With
End With
End With
'Keine Hintergrundfarbe im Diagramm:
With Excel.Application
.ActiveChart.PlotArea.Select
.Selection.Interior.ColorIndex = xlNone
End With
'hier beginnt der Code für Diagramm3
Dim objName1_3 As Range
Dim rngF1_3 As Range
Dim rngK1_3 As Range
Dim rngUnion1_3 As Range
Sheets("div_Diagramme").Activate
'Tabelle einfügen
Set objName1_3 = Sheets("Wertetabelle").Range("D10")
Set rngF1_3 = Sheets("Wertetabelle").Range("F5:F22400")
Set rngK1_3 = Sheets("Wertetabelle").Range("V5:V22400")
Set rngUnion1_3 = Application.Union(rngF1_3, rngK1_3)
With Excel.Application.Worksheets("div_Diagramme").ChartObjects.Add _
(Left:=0, Width:=375, Top:=230, Height:=225)
.Chart.SetSourceData Source:=rngUnion1_3
.Chart.ChartType = xlXYScatter
End With
'Anwählen des Diagramms
ActiveSheet.ChartObjects("Diagramm 3").Activate
ActiveChart.ChartArea.Select
'Formatieren der Tabelle
With ActiveChart
.ChartArea.AutoScaleFont = False
.HasTitle = True
.ChartTitle.Characters.Text = "Kennlinie Belegungsgrad" 'objName
.ChartTitle.Font.Bold = True
.ChartTitle.Font.Size = 12
.HasLegend = False
With .Axes(xlCategory, xlPrimary)
.HasTitle = True
.HasMajorGridlines = True
.HasMinorGridlines = False
.MinimumScaleIsAuto = True
.MaximumScale = 1
.MinorUnitIsAuto = True
.MajorUnitIsAuto = True
.Crosses = xlAutomatic
.ReversePlotOrder = False
.ScaleType = xlLinear
.DisplayUnit = xlNone
With .AxisTitle
.Characters.Text = "Tageszeit [h]"
.Font.Size = 10
.Font.Bold = True
End With
End With
With .Axes(xlValue, xlPrimary)
.HasTitle = True
.HasMajorGridlines = True
.HasMinorGridlines = False
With .AxisTitle
.Characters.Text = "Belegung [-]"
.Font.Size = 10
.Font.Bold = True
End With
End With
End With
'Keine Hintergrundfarbe im Diagramm:
With Excel.Application
.ActiveChart.PlotArea.Select
.Selection.Interior.ColorIndex = xlNone
End With
'hier beginnt der Code für Diagramm4
Dim objName1_4 As Range
Dim rngF1_4 As Range
Dim rngK1_4 As Range
Dim rngUnion1_4 As Range
Sheets("div_Diagramme").Activate
'Tabelle einfügen
Set objName1_4 = Sheets("Wertetabelle").Range("D10")
Set rngF1_4 = Sheets("Wertetabelle").Range("F5:F22400")
Set rngK1_4 = Sheets("Wertetabelle").Range("M5:M22400")
Set rngUnion1_4 = Application.Union(rngF1_4, rngK1_4)
With Excel.Application.Worksheets("div_Diagramme").ChartObjects.Add _
(Left:=0, Width:=375, Top:=460, Height:=225)
.Chart.SetSourceData Source:=rngUnion1_4
.Chart.ChartType = xlXYScatter
End With
'Anwählen des Diagramms
ActiveSheet.ChartObjects("Diagramm 4").Activate
ActiveChart.ChartArea.Select
'Formatieren der Tabelle
With ActiveChart
.ChartArea.AutoScaleFont = False
.HasTitle = True
.ChartTitle.Characters.Text = "Kennlinie Verkehrsstärke Pkw" 'objName
.ChartTitle.Font.Bold = True
.ChartTitle.Font.Size = 12
.HasLegend = False
With .Axes(xlCategory, xlPrimary)
.HasTitle = True
.HasMajorGridlines = True
.HasMinorGridlines = False
.MinimumScaleIsAuto = True
.MaximumScale = 1
.MinorUnitIsAuto = True
.MajorUnitIsAuto = True
.Crosses = xlAutomatic
.ReversePlotOrder = False
.ScaleType = xlLinear
.DisplayUnit = xlNone
With .AxisTitle
.Characters.Text = "Tageszeit [h]"
.Font.Size = 10
.Font.Bold = True
End With
End With
With .Axes(xlValue, xlPrimary)
.HasTitle = True
.HasMajorGridlines = True
.HasMinorGridlines = False
With .AxisTitle
.Characters.Text = "QPkw [Kfz/h]"
.Font.Size = 10
.Font.Bold = True
End With
End With
End With
'Keine Hintergrundfarbe im Diagramm:
With Excel.Application
.ActiveChart.PlotArea.Select
.Selection.Interior.ColorIndex = xlNone
End With
'hier beginnt der Code für Diagramm5
Dim objName1_5 As Range
Dim rngF1_5 As Range
Dim rngK1_5 As Range
Dim rngUnion1_5 As Range
' Lkw-Verkehrsstärke berechnen lassen
Sheets("Wertetabelle").Select
'fügt Straßennamen in F1 ein
Range("F1").Select
ActiveCell.FormulaR1C1 = "=LEFT(R[4]C[-2],12)"
Range("A1").Select
'weiter mit Verkehrsstärke Lkw
Range("X5").Select
ActiveCell.FormulaR1C1 = "=RC[-13]-RC[-11]"
Range("X5").Select
Selection.AutoFill Destination:=Range("X5:X22400"), Type:=xlFillDefault
Range("X5:X22400").Select
Sheets("div_Diagramme").Activate
'Tabelle einfügen
Set objName1_5 = Sheets("Wertetabelle").Range("D10")
Set rngF1_5 = Sheets("Wertetabelle").Range("F5:F22400")
Set rngK1_5 = Sheets("Wertetabelle").Range("X5:X22400")
Set rngUnion1_5 = Application.Union(rngF1_5, rngK1_5)
With Excel.Application.Worksheets("div_Diagramme").ChartObjects.Add _
(Left:=375, Width:=375, Top:=460, Height:=225)
.Chart.SetSourceData Source:=rngUnion1_5
.Chart.ChartType = xlXYScatter
End With
'Anwählen des Diagramms
ActiveSheet.ChartObjects("Diagramm 5").Activate
ActiveChart.ChartArea.Select
'Formatieren der Tabelle
With ActiveChart
.ChartArea.AutoScaleFont = False
.HasTitle = True
.ChartTitle.Characters.Text = "Kennlinie Verkehrsstärke Lkw" 'objName
.ChartTitle.Font.Bold = True
.ChartTitle.Font.Size = 12
.HasLegend = False
With .Axes(xlCategory, xlPrimary)
.HasTitle = True
.HasMajorGridlines = True
.HasMinorGridlines = False
.MinimumScaleIsAuto = True
.MaximumScale = 1
.MinorUnitIsAuto = True
.MajorUnitIsAuto = True
.Crosses = xlAutomatic
.ReversePlotOrder = False
.ScaleType = xlLinear
.DisplayUnit = xlNone
With .AxisTitle
.Characters.Text = "Tageszeit [h]"
.Font.Size = 10
.Font.Bold = True
End With
End With
With .Axes(xlValue, xlPrimary)
.HasTitle = True
.HasMajorGridlines = True
.HasMinorGridlines = False
With .AxisTitle
.Characters.Text = "QLkw [Kfz/h]"
.Font.Size = 10
.Font.Bold = True
End With
End With
End With
'Keine Hintergrundfarbe im Diagramm:
With Excel.Application
.ActiveChart.PlotArea.Select
.Selection.Interior.ColorIndex = xlNone
End With
'Abspann
Sheets("div_Diagramme").Select
Range("A1").Select
' letzte Aktualisierung Seiteneinrichtung
With ActiveSheet.PageSetup
.PrintArea = "$A$1:$S$36"
.RightHeader = "Datum: &D" & Chr(10) & "Verkehrsdatenvisualisierung:" & " " & _
Format(Worksheets("Wertetabelle").Range("F1").Value)
.CenterFooter = "Seite: &P"
.CenterHorizontally = True
.CenterVertically = True
.Orientation = xlLandscape
.Zoom = False
.FitToPagesWide = 1
.FitToPagesTall = 1
End With
ActiveWindow.View = xlNormalView
'Lineup der Charts
Dim MyWidth As Single, MyHeight As Single
Dim NumWide As Long
Dim iChtIx As Long, iChtCt As Long
MyWidth = 375 '200
MyHeight = 225 '150
NumWide = 3
iChtCt = ActiveSheet.ChartObjects.Count
For iChtIx = 1 To iChtCt
With ActiveSheet.ChartObjects(iChtIx)
.Width = MyWidth
.Height = MyHeight
.Left = ((iChtIx - 1) Mod NumWide) * MyWidth
.Top = Int((iChtIx - 1) / NumWide) * MyHeight
End With
Next
Application.ScreenUpdating = True
End Sub

Anzeige
AW: Combobox auf Userform zum Starten untersch. Ma
20.01.2007 11:56:02
Josef
Hallo Till,
da liese sich viel vereinfachen, aber ich habe keine Lust um mich da reinzuhängen.
Z.B. könntest du anstatt bei jedem Makro den Dateinamen und den Pfad zu hinterlegen,
diesen als Parameter beim Aufruf des Makros übergeben.
Zum löschen der temporären Grafiken, schaust du mal in die OH und suchst nach Kill.
Die Wertetabelle kannst du doch einfach mit Cells.Clear leeren.
Gruß Sepp

AW: Combobox auf Userform zum Starten untersch. Ma
20.01.2007 12:28:45
Till
Hallo Sepp,
danke trotzdem, Du hast mir mit Deinen ersten Antworten schon ein wenig weitergeholfen.
Es scheint mir aber trotzdem, dass die Combobox NACH Auswahl von Straße 1 immer noch den Code für Straße 2 danach automatisch ausführen will.
Weißt Du vielleicht, was da noch nicht ganz richtig ist?
Übrigens will ich vor jedes neue "Straßenmakro" folgendes einfügen, um die letzte Txt-Datei ohne zu Speichern zu schließen.
Hoffe, dass das klappt?!


Sub Straße1plusi()
Dim cd
cd = Range("A1").Value & "_0.txt" 'neu
Windows(cd).Activate
ActiveWorkbook.Close False ' closes the active workbook without saving any changes
'Hier geht der Code für Straße i weiter
End Sub


Anzeige
AW: Combobox auf Userform zum Starten untersch. Ma
20.01.2007 17:43:38
Till
Hallo Sepp,
ich hab Dein Makro zur ComboBox-Auswahl ein wenig geändert:


Private Sub ComboBox2_Click()
    If ComboBox2.ListIndex > 0 And blnAction Then
        Run ("Straße" & ComboBox2.ListIndex)
    End If
End Sub


Mir scheint, dass es da aber immer noch einen Fehler gibt.
Wenn ich irgendeinen Eintrag in dieser Combobox auswähle, spult Excel dann aber alle Makros ab: "Straße1" bis "Straße 38".
Also entsprechend der Einträge, die nach:


Private Sub UserForm_activate()


    blnAction = False
    With ComboBox2
        .ColumnCount = 1
        .HideSelection = False
         .AddItem "Auswahl des Straßenquerschnittes"


aufgelistet werden.
Es sollte aber so sein, dass je nach Eintrag nur das entsprechende "Straße"-Makro gestartet wird. Also Auswahl des ersten Eintrages, start von Makro "Straße1", Auswahl des zweiten Eintrages, start von Makro "Straße2" u.s.w.
Kannst Du da noch mal bitte einen anderen Vorschlag machen?
Danke!
Gruß Till
Anzeige
AW: Combobox auf Userform zum Starten untersch. Ma
20.01.2007 18:51:44
Josef
Hallo Till,
das kann ich nicht nachvollziehen. Habe es bei mir gerade nochmal getestet und
es wird immer genau das gewünschte Makro aufgerufen.
Da mus bei dir noch anderer Code im Spiel sein, der sich vieleicht sebst aufruft.
Gruß Sepp

AW: Combobox auf Userform zum Starten untersch. Ma
20.01.2007 22:28:34
Till
Hallo Sepp,
hast Recht, mit Deinem Code ist alles in Ordnung.
Aber ich hab da so eine Vermutung.
Du erinnerst Dich noch an die 38 Makros, die von der Combobox aus gestartet werden sollen.
Da sie alle relativ ähnlich sind, sind natürlich auch die Deklarationen ähnlich.
Hab dabei natürlich darauf geachtet, dass ich hier immer unterschiedliche Deklarationen verwende, aber kann es sein, dass Excel trotzdem Code aus einem anderen Untermodul ausführt, weil es nur den ersten Teil der Deklarationen ausliest?
Hier ein Beispiel zur Verdeutlichung:


Sub Straße1()
On Error Resume Next
    Dim subfolder As String
    Dim Datum As String
    Dim ByI As Byte
    subfolder = ("040468FF6A69740E\Linie_0510\")
    Datum = Range("a1").Value
    '   Dateiname 030117_m.xls; JJJJMMTT
Application.ScreenUpdating = False 'hier ggf. abschalten
For ByI = 0 To 0
        Workbooks.OpenText Filename:="C:\My Autoscope\Polling Data\" & Format(subfolder) & Format(Datum) & "_" & Format(ByI) & ".txt", DataType:=xlDelimited, semicolon:=True
    Next ByI
'Makro zum Einfügen neuer Diagramme nach Importieren von Dateninhalten aus den Pollingdateien


Der Code für Straße 2 sieht dort am Anfang, wo die Txt-Dateien eingelesen werden, so aus:


Sub Straße2()
On Error Resume Next
    Dim subfolder1 As String
    Dim Datum1 As String
    Dim ByI1 As Byte
    subfolder1 = ("040468FFF478740E\Linie_0530\")
    Datum1 = Range("a1").Value
    '   Dateiname 030117_m.xls; JJJJMMTT
    For ByI1 = 0 To 0
        Workbooks.OpenText Filename:="C:\My Autoscope\Polling Data\" & Format(subfolder1) & Format(Datum1) & "_" & Format(ByI1) & ".txt", DataType:=xlDelimited, semicolon:=True
    Next ByI1
'Makro zum Einfügen neuer Diagramme nach Importieren von Dateninhalten aus den Pollingdateien


Wie Du siehst ist die Deklaration für den Unterordner einmal "subfolder" und beim 2. Makro "subfolder1", andere Deklarationen analog.
Später wenn die Tabellen ausgeführt werden, hab ich den Ort der Quelldaten dann so deklariert:


Dim objName1_1 As Range
Dim rngF1_1 As Range
Dim rngK1_1 As Range
Dim rngUnion1_1 As Range


...
....
......


'Tabelle einfügen
Set objName1_1 = Sheets("Wertetabelle").Range("D10")
Set rngF1_1 = Sheets("Wertetabelle").Range("F5:F22400")
Set rngK1_1 = Sheets("Wertetabelle").Range("K5:K22400")
Set rngUnion1_1 = Application.Union(rngF1_1, rngK1_1)
    With Excel.Application.Worksheets("div_Diagramme").ChartObjects.Add _
            (Left:=0, Width:=375, Top:=0, Height:=225)
        .Chart.SetSourceData Source:=rngUnion1_1
        .Chart.ChartType = xlXYScatter
    End With


Wenn dann im weiteren Verlauf die nächsten Diagramme dazu kommen, ändern sich in den Deklarationen entsprechend die Nummerierungen:
Namenskonvention 1_1: Makro für Diagramm 1 der 1. Station, 1_2: Makro für Diagramm 2 der 1. Station, 2_1: Makro für Diagramm 1 der 2. Station u.s.w.
Vielleicht ist Excel nicht in der Lage sauber hier bis zum Ende zu lesen?!
Ansonsten weiß ich da nicht mehr weiter!
Kann man das evtl. irgendwie zusammenfassen?
Danke fürs Lesen.
Hoffe, Du kannst mir noch mal helfen!
Schönen Abend noch!
Gruß Till
Anzeige
AW: Combobox auf Userform zum Starten untersch. Ma
20.01.2007 22:45:43
Josef
Hallo Till,
wenn du ein Makro aufrufst, dann wird dieses abgearbeitet.
Deklarationen die sich inerhalb der Sub befinden haben keinen Einfluss auf andere Prozeduren, auch wenn sie dei gleiche bezeichnung haben.
In ein Makro zusammenfassen könntest du das ganze, wenn du die Parameter beim
Aufruf übergibst. Also nur noch ein Makro "Strasse" und die Unterscheidung
wird per Parameter gesteuert.
Beispiel:
Anstatt
Sub Straße1()
    On Error Resume Next
    Dim SubFolder As String
    Dim Datum As String
    Dim ByI As Byte
    
    SubFolder = ("040468FF6A69740E\Linie_0510\")
    Datum = Range("a1").Value
    ' Dateiname 030117_m.xls; JJJJMMTT
    
    Application.ScreenUpdating = False 'hier ggf. abschalten
    
    For ByI = 0 To 0 'Schleife von 0 bis 0! - wozu?
        'ebenso sind die Format()- Anweisungen umsonst!
        Workbooks.OpenText Filename:="C:\My Autoscope\Polling Data\" & Format(SubFolder) & Format(Datum) & "_" & Format(ByI) & ".txt", DataType:=xlDelimited, Semicolon:=True
    Next ByI
End Sub

würde das so aussehen.
Sub Strasse(ByVal SubFolder As String, ByVal Datum As String)
    
    
    Workbooks.OpenText _
        Filename:="C:\My Autoscope\Polling Data\" & SubFolder & Datum & "_0" & ".txt", _
        DataType:=xlDelimited, _
        Semicolon:=True
    
    '....
    
End Sub

Sub beispiel()
    Run "Strasse", "040468FF6A69740E\Linie_0510\", Range("a1").Text
End Sub

Gruß Sepp
Anzeige
AW: Combobox auf Userform zum Starten untersch. Ma
21.01.2007 12:08:28
Till
Hallo Sepp,
super....Du öffnest mir die Augen.
Das kannte ich noch nicht! Ich versuche mir das ganze ein wenig selber beizupulen...
Aber das ist klasse!
Hiermit öffnet sich hübsch Straße für Straße...
Das einzige, was jetzt nur doof ist, ist, dass meine Userform nach Ausführen von "Straße1" verschwindet und auf die in der importierten TXT-Datei erstellten Grafiken fokusiert.
Wenn ich in Deinem neuen Code "Strasse(ByVal SubFolder As String, ByVal Datum As String)" ein "On Error Resume Next" einbaue, passiert der alte Mist wieder, dass alle Strassencodes ablaufen, die Userform aber sichtbar bleibt.
Wenn ich das auskommentiere, dann eben nur Strasse1, wobei dann aber die Userform verschwindet.
Kann man evtl. am Ende jedes Straßencodes einen Befehl einbauen, der das Verschwinden der Userform verhindert?
?
Vielleicht weißt Du noch mal Rat!
Danke!
Gruß Till
Anzeige
AW: Combobox auf Userform zum Starten untersch. Ma
21.01.2007 12:31:03
Till
Hallo Sepp,
noch eine Zusatzfrage:
Wie kann ich einen Error Handler einbauen, der den Laufzeitfehler 1004 abfängt, wenn man versucht eine Txt-Datei zu öffnen, die es nicht geht? Also jemand klickt im Kalendarsteuerelement auf den 19.01.2007 aber es gibt keine Datei "20070119_0.txt".
Hab mal das hier versucht:


Sub Strasse(ByVal SubFolder As StringByVal Datum As String)
'On Error Resume Next
    Workbooks.OpenText _
        Filename:="C:\My Autoscope\Polling Data\" & SubFolder & Datum & "_0" & ".txt", _
        DataType:=xlDelimited, _
        Semicolon:=True
        If Err.Number = 1004 Then
            MsgBox "Keine Messdaten zu diesem Datum vorhanden", vbInformation
            End If
End Sub


Der Fehler kommt aber nach wie vor!
Danke!
Gruß Till
Anzeige
AW: Combobox auf Userform zum Starten untersch. Ma
21.01.2007 12:54:23
Josef
Hallo Till,
"On Error Resume Next" sollte man nach Möglichkeit vermeiden.
Besser währe ein Errorhandler mit dem man einen Fehler auffängt.
Z.B. nach diesem Schema.
Sub nn()
    
    On Error GoTo ErrExit
    
    'Code
    
    Exit Sub
    ErrExit:
    
    'Code der bei einem Fehler ausgeführt wird
End Sub

Ob eine Datei existiert, kannst du so prüfen.
Sub Strasse(ByVal SubFolder As String, ByVal Datum As String)
    Dim strFile As String
    
    strFile = "C:\My Autoscope\Polling Data\" & SubFolder & Datum & "_0" & ".txt"
    
    If Dir(strFile) = "" Then
        MsgBox "Keine Messdaten zu diesem Datum vorhanden", vbInformation
        Exit Sub
    End If
    
    Workbooks.OpenText _
        Filename:=strFile, _
        DataType:=xlDelimited, _
        Semicolon:=True
    
    
End Sub

Gruß Sepp
AW: Combobox auf Userform zum Starten untersch. Ma
21.01.2007 16:34:38
Till
Hallo Sepp,
alles klar, der Fehler, wenn die Datei nicht vorhanden ist, wird jetzt ordentlich abgefangen.
Wenn man dann die MessageBox mit O.K. bestätigt, wird dann aber trotzdem der Code für alle anderen 37 Makros abgefragt.
Bei den 37 anderen Makros hab ich jeweils oben, also kurz nach

Sub Straßei() folgendes eingebaut:
z.B.

Sub Straße2()
On Error GoTo ErrExit
und dann jeweils kurz vor dem Ende des Makros:
dann den Error Handler:
Exit Sub
ErrExit:
End Sub

Das ist aber noch nicht die Krönung. Gibt es evtl. etwas, was ich am Anfang jedes Codes einsetzen kann, mit dem ich feststellen kann, wo genau der Fehler im jeweiligen Makro auftritt? Das würde mir ewiges Fehlersuchen erleichtern!
Ansonsten hab ich noch nicht ganz gelöst, wie ich auf meiner Listbox, die Wertetabelle angezeigt bekomme, NACHDEM ich das Makro mit der jeweiligen ComBobox Auswahl angestoßen habe. Momentan hab ich das ganze drin, beim Initialisieren der Userform!
Beim Initialisieren der Userform ist da aber bekanntlicher Weise noch nichts drin. Erst NACH Ausführen der Combobox-Makros sind ja Werte vorhanden!
Vielleicht hast Du noch mal ne Ahnung zu den 2 Fragen?!
Danke!
Gruß Till1
AW: Combobox auf Userform zum Starten untersch. Ma
21.01.2007 16:54:13
Josef
Hallo Till,
kannst du die Datei mal hochladen?
Wenn sie zu gross ist, dann kannst du sie mir auch Mailen. (Addresse findest du in der Profilliste)
Gruß Sepp

AW: Combobox auf Userform zum Starten untersch. Ma
21.01.2007 17:29:57
Till
Hallo Sepp,
o.k. hab Dir die Datei gemailt!
Gruß Till

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige