Jetzt ist es mal wieder soweit. VBA schafft mich jedesmal :suspekt:
ich habe in Access VBA eine "Datenbankanwendung" erstellt.
Diese habe ich stolz wie Oskar an meinen Prof. gesandt.
Tja, meinte er - beim Öffnen der DB sind alle Steuerelemente deaktiviert.
Nach Wechsel in den Layoutmodus und anschließend zurück in die Formularansicht,
werden laut seiner Aussage die gewünschten Steuerelemente schließlich aktiviert
und die Anwendung läuft normal weiter.
Weder bei meinem System (Win XP, Office Ultimate 2007, zusätzlich Access 2003),
noch auf dem System eines Kollegen (WIn XP auf MacBook über Virtual Machine,
Office Ultimate 2007) treten Probleme auf.
Ich aktiviere bei Form_Open die gewünschten Steuerelemnte.
Alle Steuerelemente sind auf einem Register (Reiterkarten) untergebracht.
Abhängig von bereits getätigten Selektionen werden Steuerelemente aktiviert
bzw. deaktiviert um den Nutzer zu leiten.
Weitere Infos:
- ich starte im Hintergrund Excel über OLE
- Erstellt wurde die Datenbank auf wechselnden Versionen von Access (2000,2003,2007)
Hier ein bisschen Code:
' In dieser Function prüfe ich nur welcher Reiter ausgewählt wurde und rufe die entsprechende Methode auf, die die Aktivierung der Steuerelemente übernimmt.
In dieser Function werden die Steuerelemente abhängig von den Nutzerangaben
aktiviert und deaktiviert. Ist aber nur für eine Reiterkarte.
HighlightBox und resetBox ändern nur die Hintergrund- und Rahmenfarben eines Box-Elements.
ich habe in Access VBA eine "Datenbankanwendung" erstellt.
Diese habe ich stolz wie Oskar an meinen Prof. gesandt.
Tja, meinte er - beim Öffnen der DB sind alle Steuerelemente deaktiviert.
Nach Wechsel in den Layoutmodus und anschließend zurück in die Formularansicht,
werden laut seiner Aussage die gewünschten Steuerelemente schließlich aktiviert
und die Anwendung läuft normal weiter.
Weder bei meinem System (Win XP, Office Ultimate 2007, zusätzlich Access 2003),
noch auf dem System eines Kollegen (WIn XP auf MacBook über Virtual Machine,
Office Ultimate 2007) treten Probleme auf.
Ich aktiviere bei Form_Open die gewünschten Steuerelemnte.
Alle Steuerelemente sind auf einem Register (Reiterkarten) untergebracht.
Abhängig von bereits getätigten Selektionen werden Steuerelemente aktiviert
bzw. deaktiviert um den Nutzer zu leiten.
Weitere Infos:
- ich starte im Hintergrund Excel über OLE
- Erstellt wurde die Datenbank auf wechselnden Versionen von Access (2000,2003,2007)
Hier ein bisschen Code:
Code:
Private Sub Form_Open(Cancel As Integer)
' set title
Me.Caption = "X"
' open the database connection
' start Excel in background
analysis.initialize
' link ex access database
iosLinked = analysis.checkForIOSDB
' activate controls
Call highlightActiveBoxes
End Sub
' In dieser Function prüfe ich nur welcher Reiter ausgewählt wurde und rufe die entsprechende Methode auf, die die Aktivierung der Steuerelemente übernimmt.
Code:
Private Function highlightActiveBoxes() As Object
Select Case Me.MainTab.value
Case 0
Me.ImportSchemaList.Enabled = True
If Me.MasterImport.Enabled Then
Me.MasterImport.Requery
End If
Call importControl
Case 1
If iosLinked Then
Me.LinkIOSCommand.Enabled = True
Me.IOSImportList.Enabled = True
Me.IOSImportList.RowSource = AnalysisSQL.getSQLIOSImports
Me.IOSImportList.Requery
Else
Me.IOSImportList.Enabled = False
Me.LinkIOSCommand.Enabled = True
End If
Me.ConsumptionImportList.Enabled = True
Me.ConsumptionImportList.Requery
Call TimeSeriesAnalysisControl
Case 2
Me.AnalysisForecastList.Enabled = True
Me.AnalysisForecastList.Requery
Call forecastControl(Me.AnalysisForecastList)
Case 3
Me.ResultAnalysisList.Enabled = True
Me.ResultAnalysisList.Requery
Call ResultControl(Me.ResultAnalysisList)
Case 4
If Not Me.ExportAnalysisList.Enabled Then
Me.ExportAnalysisList.Enabled = True
Else
Me.ExportAnalysisList.Requery
End If
Call exportControl
End Select
End Function
In dieser Function werden die Steuerelemente abhängig von den Nutzerangaben
aktiviert und deaktiviert. Ist aber nur für eine Reiterkarte.
Code:
Private Function importControl()
If Me.ImportSchemaList.ListIndex + 1 <= 0 Then
Call highlightBox(Me.SchemaBox)
Me.MasterData.Enabled = False
Me.ConsumptionData.Enabled = False
Me.FileFolderPath.Enabled = False
Me.MasterImport.Enabled = False
Me.StartImport.Enabled = False
Me.SearchFileFolder.Enabled = False
Else
If Me.ConsumptionData.value And (Not Me.MasterData.value Or IsNull(Me.MasterData.value)) Then
Me.MasterImport.Enabled = True
Me.MasterImport.Requery
Else
Me.MasterImport.Enabled = False
End If
If IsNull(Me.MasterData.value) And IsNull(Me.ConsumptionData.value) _
Or Not Me.MasterData.value And Not Me.ConsumptionData.value _
Or Me.ConsumptionData.value And Me.MasterImport.ListIndex + 1 <= 0 _
Or IsNull(Me.MasterData.value) And Not Me.ConsumptionData.value _
Or Not Me.MasterData.value And IsNull(Me.ConsumptionData.value) Then
Call resetBox(Me.SchemaBox)
Call resetBox(Me.PathBox)
Call highlightBox(Me.DataBox)
Me.MasterData.Enabled = True
Me.ConsumptionData.Enabled = True
Me.MasterData.SetFocus
Me.FileFolderPath.Enabled = False
Me.SearchFileFolder.Enabled = False
Me.StartImport.Enabled = False
End If
If (IsNull(Me.MasterData.value) Or Not Me.MasterData.value) _
And Me.ConsumptionData.value And _
Me.MasterImport.ListIndex + 1 > 0 Then
Call resetBox(Me.DataBox)
Call highlightBox(Me.PathBox)
Me.FileFolderPath.Enabled = True
Me.SearchFileFolder.Enabled = True
End If
If Me.MasterData.value And (IsNull(Me.ConsumptionData.value) _
Or Not Me.ConsumptionData.value) Then
Call highlightBox(Me.DataBox)
Call highlightBox(Me.PathBox)
Me.FileFolderPath.Enabled = True
Me.SearchFileFolder.Enabled = True
End If
If Me.ConsumptionData.value And (Not Me.MasterData.value Or IsNull(Me.MasterData.value)) Then
End If
If Me.MasterData.value And Me.ConsumptionData.value Then
Call resetBox(Me.DataBox)
Call highlightBox(Me.PathBox)
Me.FileFolderPath.Enabled = True
Me.SearchFileFolder.Enabled = True
End If
If Me.FileFolderPath.Enabled Then
Me.FileFolderPath.SetFocus
If StrComp("", Me.FileFolderPath.Text) <> 0 Then
Call resetBox(Me.DataBox)
Call highlightBox(Me.StartBox)
Me.StartImport.Enabled = True
Else
Call resetBox(Me.StartBox)
End If
Else
Call resetBox(Me.StartBox)
End If
End If
End Function
HighlightBox und resetBox ändern nur die Hintergrund- und Rahmenfarben eines Box-Elements.
Zuletzt bearbeitet: