Hallo,
ich habe im Rahmen meines Studiums ein Projekt aufs Auge gedrückt bekommen, das zwar ziemlich spannend ist, aber auch etwas meine Kenntnisse überschreitet.
Ich habe zwar schon mit Access und VBA gearbeitet, aber das ging nicht über einfache Abfragen und das erstellen von einfach Berechnungsprogrammen mit Inputboxen etc. hinaus.
Das Projekt lässt sich folgendermaßen beschreiben:
Es handelt sich um Fragebögen die überer mehrer Tabellenblätter einer Excel Datei verteilt sich, alle gehören zu einem Kunden. Die Antworten werden in durch Auswahl einer Box gegeben. Als erstes muss der Kunde die Wichtigkeit eines Themas bestimmen und danach wie zufrieden er mit der Ausführung in diesem Punkt war. Ab ende gibt es auch die Möglichkeit von der Abgabe eines Fließtextes.
Nun geht es als 1. darum, die Daten in einer Access Datenbank abzuspeichern (am besten wäre es, wenn man den gegeben antworten gleich einen Wert zuweisen kann und nicht nur "Wahr" oder "Falsch").
Dann sollen diese Daten ausgewertet werden und zwar auf verschiedene arten und weißen.
Es soll die Möglichkeit gegeben sein, Einzelne Fragebögen auszuwerten, aber auch mehrer auf einmal (z.b. von einem ganzen Monat).
Die Auswertung soll erstmal in die Frageblöcke getrennt werden, d.h. Darstellung von Wichtigkeit/Auswahl und dem verhätlniss von Antworten/Fragen in %.
Nachdem die einzelnen Blöcke ausgewerten wurden sind, sollen die Gesamtergebnisse angezeigt werden (z.b. Frageblock A: Summe der beantworteten Fragen(auch in %), durschnitt der Erfüllung, durchschnittliche wichtigkeit des Blocks). Und auch die Textfelder sollen hier eingefügt werden.
Dann wird eine Genaue Analyse erstellt bei der die Wichtigkeit und die Zufriedenheit miteinander verglichen und angezeigt werden und die Abweichung angegeben wird, für jeden aufgabenblock.
Dann gibt es einer Übersicht über die insg. Zahl der beantworteten Fragen und der Durchschnittlichen bewertung der einzelnen Frage und der Errechnung das insg. Durchschnitts.
Und zum grönden Abschluß Wird eine Gesamt-Übersicht erstellt, die in einem Diagramm die Wichtigkeit der Zufriedenheit gegenüberstellt. Und noch einige anderen Daten beeinhaltet, die zur Vorlage bei anderen Instanzen im Betrieb dienen sollen, und aufschluß darüber geben, ob und wo Handlungsbedarf besteht.
Ich weiß, ich habe das nun alles sehr ausführlich beschrieben, ich denke so ist es einfach zu verstehen um was es genau geht. Was gefordert ist und mathematisch dahinter steht ist mir voll und ganz klar, mir ist nur leider völlig unklar, wie ich die Daten in Access einlesen kann und besonders wie ich die Anzeige der Ergebnisse darstellen kann. Ich hoffe das mir jemand bezüglich des Zeitaufwandes und dem benötigten Know-How weiterhelfen kann, bzw. ob das überhaupt durch Access und VBA lösbar ist.
Vielen dank schonmal für das durchlesen und ich bin dankbar für jee Hilfe!
Hallo HilfeBrauchender,
zu den ganzen Komplex könnte ich eniges sagen,da ich ständig Marktforschung betreibe u. Fragebögen in Access erstelle und u.a. mit Access auch Auswertungen mache.
Ich weiß nur nicht. wie ich helfen soll, da du eigentlich keine klare Frage gestellt hast!
Gruß Oma
Also ich bin nun soweit, das ich beliebige Felder einer Excel Tabelle in Access importieren kann.
Dort ist nun ein Fehler aufgetreten, bei dem ich nicht weiß wie ich ihn beheben kann.
Auf dem Fragebogen sind die Zellen nicht mit "A1"usw. nummeriert sondern mit "Z1S1" und wenn ich in meinem code
rs![Verfahren] = xlSht.Range("Z6S6").Value eingebe, gibt er mir "Die Methode "Range" für das Objekt _Worksheet ist fehlgeschlagen" aus.
Wie kann man das beheben?
Eine weiter Frage die sich mir gestellt ist, wie ich meine DateiÖffnen Funktion:
Option Compare Database
Option Explicit
Declare Function SHBrowseForFolder Lib "shell32.dll" Alias _
"SHBrowseForFolderA" (lpBrowseInfo As BROWSEINFO) As Long
Declare Function SHGetPathFromIDList Lib "shell32.dll" Alias _
"SHGetPathFromIDListA" (ByVal pidl As Long, ByVal pszPath$) As Long
Declare Function GetOpenFileName Lib "comdlg32.dll" Alias _
"GetOpenFileNameA" (pOpenfilename As OPENFILENAME) As Long
Declare Function GetSaveFileName Lib "comdlg32.dll" Alias _
"GetSaveFileNameA" (pSavefilename As SAVEFILENAME) As Long
Private Type BROWSEINFO
hOwner As Long
pidlRoot As Long
pszDisplayName As String
lpszTitle As String
ulFlags As Long
lpfn As Long
lParam As Long
iTmage As Long
End Type
Private Type OPENFILENAME
lStructSize As Long
hwndOwner As Long
hInstance As Long
lpstrFilter As String
lpstrCustomFilter As String
nMaxCustFilter As Long
nFilterIndex As Long
lpstrFile As String
nMaxFile As Long
lpstrFileTitle As String
nMaxFileTitle As Long
lpstrInitialDir As String
lpstrTitle As String
Flags As Long
nFileOffset As Integer
nFileExtension As Integer
lpstrDefExt As String
lCustData As Long
lpfnHook As Long
lpTemplateName As Long
End Type
Private Type SAVEFILENAME
lStructSize As Long
hwndOwner As Long
hInstance As Long
lpstrFilter As String
lpstrCustomFilter As String
nMaxCustFilter As Long
nFilterIndex As Long
lpstrFile As String
nMaxFile As Long
lpstrFileTitle As String
nMaxFileTitle As Long
lpstrInitialDir As String
lpstrTitle As String
Flags As Long
nFileOffset As Integer
nFileExtension As Integer
lpstrDefExt As String
lCustData As Long
lpfnHook As Long
lpTemplateName As Long
End Type
Public Const OFN_FILEMUSTEXIST = &H1000
Public Const OFN_READONLY = &H1
Public Const OFN_HIDEREADONLY = &H4
Public Const BIF_RETURNONLYFSDIRS = &H1
Public Function VerzeichnisWählen(Title$, XHwnd As Long) As String
Dim x As Long, BInfo As BROWSEINFO, dwIList As Long
Dim szPath$, wPos%
With BInfo
.hOwner = XHwnd
.lpszTitle = Title
.ulFlags = BIF_RETURNONLYFSDIRS
End With
dwIList = SHBrowseForFolder(BInfo)
szPath = Space$(512)
x = SHGetPathFromIDList(ByVal dwIList, ByVal szPath)
If x Then
wPos = InStr(szPath, Chr(0))
VerzeichnisWählen = Left$(szPath, wPos - 1)
Else
VerzeichnisWählen = " "
End If
End Function
Public Function DateiOeffnen(Optional Titel, Optional Filter, _
Optional DefExtension, Optional Aktdir) As String
Dim strDateiName$, strDlgTitel$, strFilter$
Dim strDefExtension$, strAktDir$, strNull$
Dim OpenDlg As OPENFILENAME
strNull = Chr$(0)
strDateiName = String$(512, 0)
If IsMissing(Titel) Then
strDlgTitel = "Datei öffnen" & strNull
Else
strDlgTitel = Titel & strNull
End If
If IsMissing(Filter) Then
strFilter = "Alle Dateien" & strNull & "*.*" & strNull & strNull
Else
strFilter = Filter
End If
If IsMissing(DefExtension) Then
strDefExtension = strNull
Else
strDefExtension = DefExtension & strNull
End If
If IsMissing(Aktdir) Then
strAktDir = CurDir$ & strNull
Else
strAktDir = Aktdir & strNull
End If
With OpenDlg
.lStructSize = Len(OpenDlg)
.hwndOwner = 0
.lpstrFilter = strFilter
.nFilterIndex = 1
.lpstrFile = strDateiName
.nMaxFile = Len(strDateiName)
.lpstrInitialDir = strAktDir
.lpstrTitle = strDlgTitel
.Flags = OFN_FILEMUSTEXIST Or OFN_READONLY
.lpstrDefExt = strDefExtension
If GetOpenFileName(OpenDlg) <> 0 Then
DateiOeffnen = Left$(.lpstrFile, InStr(.lpstrFile, strNull) - 1)
Else
DateiOeffnen = " "
End If
End With
End Function
In einer Variablen speichern kann, irgendwie stell ich mir dabei selber ein Bein.
(Ich würde gerne den ausgewählten Datei Namen in einer Variablen speichern die ich dann beim Import der Excel datein benutzen kann sodass ich nicht vorher einen bestimmten Dateipfad festlegen muss)
Desweiteren Frage ich mich wieviel Wissen notwendig ist um mit VBA in Access ein Diagramm in Form eines Säulendiagramm´s (4*2Säulen) zu erstellen.
Ich hoffe es ist nun etwas konkreter wo gerade die Probleme liegen.
Okay, das range problem wurde gelöst.
Nun noch die Frage, wie ich den richtigen Wert aus dem Auswahl Kästchen rausbekomme....
Das sieht wie folgt aus:
Sehr wichtig unwichtig
[ ] [ ] [ ] [ ] [ ]
und ein kästchen halt ausgewählt, ich denke mal ihr wisst schon wie ich das meine^^
Hallo,
so richtig weiss ich nicht, was du mit dem Code anfangen willst. Wozu brauchts du eine API-Funktion; ich denke wir sind in ACCESS!
Der "normaleW Weg:
du erstellst eine Tabelle tblProjektX, in der für jede Frage ein Feld angelegt wird; die Felder mit Felddatentyp
Text - für für offene Fragen (also zum Erfassen von Text-Stichpunkte, evt. Memofeld)
Zahl - für Bewertungen, Skalen
Ja/Nein - für Mehrfachnennungen bei einer Frage (für jede Antwortmöglichkeut ein Feld
Dann kannst du Formulare zur Erfassung der Fragen erstellen; am besten immer für eine Frage ein Formular u. komfortables Blättern zwischen den Formularen ( Button mit Weiter, Zurück, Abbruch).
Mit geeigneten Gestaltungen der Abfragen sind dann die von dir angeführten Analysen alle einfach zu machen.
Die Frage , wie du den richtigen Wert aus deinem Auswahlkästchen bekommst, ist für das Beispiel falsch!
Wenn die Frage nach Wichtigkeit erfolgt, erstellt man mit einem Zahlenfeld in dem Formular ein Optionsfeld, so das nur ein Wert eingegeben werden kann. Die Auswertung ist dann mit den Zahlenfeld einfach, da 1: sehr wichtig und 5 eben unwichtig entspricht (ein Ja/Nein-Feld würde auch beim Eingeben Fehler zulasssen!)
Anders bei Mehrfachnennungen; hier kann das angewählte Feld in Abfragen mit Ja oder -1 bzw. mit 0 oder Nein analysiert werden.
In VBA entspricht -1 = Ja und 0 = Nein
Gruß Oma