Excel Makros, kenne mich nicht aus:(

...komplette Frage anzeigen

2 Antworten

Hallo Dajenna,

Ich entnehme deinem Kommentar zu Oubyi's Antwort, dass du C++ kannst. Wenn du die Visual-Studio-IDE für deine C++ Projekte verwendest, sollte es bei den Projektvorlagen auch eine für Excel-Workbooks geben. Aber falls du CodeBlocks o.ä. nutzt denke ich, gibt's sowas nicht. Solltest du aber doch VS benutzen, kannst du beim Erstellen des Projektes "Vorhandene Mappe verwenden" benützen. Nun musst du nur noch beim Starten eine Public-Variable auf die laufende Excel-Instanz setzen und dann mit der weiterarbeiten. Du kannst normal Klassen hinzufügen - genauso wie WinForms oder Module.

VBA ist ein richtiger Krüppel im Vergleich zu C++: kein .NET-Framework, nur "Abwärts-IntelliSense" und fehlen jehnste Funktionen wie z.B. Iterator-Functions (mit YIELD-Anweisung) . Aber auch die vorhandenen Datentypen sind da auch nicht gerade präsent (Integer.MaxValue o.ä. gibt es nicht, Variant statt Object, keine IEnumerable oder List Of T). Kein Option Strict On möglich etc.

Ich hoffe ich konnte dir helfen...

Mit freundlichen Grüssen

Higlav

Sorry, aber ich denke, da wirst Du erst ein Paar Schulungen machen müssen.
So ein Projekt lässt sich ohne erweitertes Grundwissen nicht so einfach "aus dem Ärmel schütteln".

Dajenna 02.07.2013, 15:09

ich kenne die Programmiersprachen c++, keil uvision und mysql vba kenne ich jetzt nicht aber bestimmt ähnelt sich das allem. Wenn jemand genau wüsste wie man mit welchen Programmierzeilen sowas hinbekommt und mir erklärt was ich genau für meine Datei ersetzen muss würde ich das bestimmt hinbekommen.

0
Oubyi 02.07.2013, 17:59
@Dajenna

VBA für Excel ist schon ziemlich speziell.
Da gibt es erhebliche Unterscheide zu C++.
Aber da Du die Mappe sowieso freigeben willst (und Excel von je her mit freigegebenen Mappen, also Mappen an denen mehrere Leute gleichzeitig arbeiten, Probleme hat), halte ich es evtl. sogar für sinnvoller das ganze Projekt mit Access zu verwirklichen und damit hast Du ja schon Erfahrungen.
Wie gesagt, so ein Projekt ohne Excel-VBA-Kenntnisse anzugehen halte ich nicht für sinnvoll.

0
Dajenna 03.07.2013, 11:31
@Oubyi

Kenne die programmiersprachen, jedoch habe ich das Vorwissen nicht so ein Programm selbst zu programmieren. Versuche es weiter mit VBA. In einem Forum hat es auch jemand geschafft der keine Ahnung davon hat. Hab den Quelltext übernommen und es an meine Dateiennamen angepasst, jedoch funktioniert es immer noch nicht. Er zeigt mir an das der letzte Befehl wohl Fehler enthält. Oder ich habe höchstwarscheinlich den Quellpfad nicht richtig angegeben.

Sieht ihr den Fehler? Danke im Vorraus:)

0
Dajenna 03.07.2013, 11:41
@Dajenna

Hier das was ich ausprobiert habe. Ich habe meine Maske jetzt noch verändert sodass man die daten von oben nach unten einträgt und es nacher in das Orginal in eine Zeile von links nach rechts abspeichert. leider weiß ich nihct wie ich den Quelltext für diese Veränderung verändern muss.

Sub Makro1()

sQuellpfad = "C:\Benutzer\sHeinrich\Desktop\Verbandbuch R\Eintrag - Verbandbuch\Abteilung1"

QZeile = 5 'Zeile in Quelldatei QSpalten = 1 'Spaltenanzahl QSpalteAb = "B" ' ab dieser Spalte insgesamt "QSpalten" Spaltenwerte übernehmen

ZZeile = 13 'erste Zeile in Zieldatei ZSpalteAb = "B" 'erste Spalte in Zieldatei

Set wbGes = ActiveWorkbook Set fso = CreateObject("Scripting.FileSystemObject")

For Each oFile In fso.GetFolder(sQuellpfad).Files If LCase(Right(oFile.Name, 4)) = ".xls" Then 'nur ".xls"-Dateien verarbeiten; bei ".xlsx" natürlich die letzten 5 Zeichen vergleichen

Application.Workbooks.Open oFile.Path 'Quelldatei öffnen

'Zellen lt Vorgabe aus Quelldatei lesen und in aktuelle Zeile der Zieldatei schreiben

wbGes.Worksheets(1).Cells(ZZeile, ZSpalteAb).Resize(1, QSpalten).Value = ActiveWorkbook.Worksheets(1).Cells(QZeile, QSpalteAb).Resize(1, QSpalten).Value

ActiveWorkbook.Close False 'Quelldatei schließen ZZeile = ZZeile + 1 'Zeilennummer Zieldatei erhöhen End If

Next

wbGes.Worksheets(1).Activate wbGes.Save MsgBox

End Sub

0
Oubyi 03.07.2013, 13:12
@Dajenna

Sorry, da kann ich Dir leider nicht weiterhelfen.
[Ich kann nur zu der letzten Zeile sagen, dass das MsgBox da völlig "in der Luft hängt", auch in einer neuen Zeile würden da die Parameter fehlen.
DAS solltest Du also einfach mal löschen]
Aber frage doch einfach mal in dem Forum nach, aus dem Du diesen Code hast.
Oder wende Dich an die Experten von:
http://www.herber.de/forum/

0
Higlav 03.07.2013, 17:40
@Dajenna

Vorher:

Sub Makro1()

sQuellpfad = "C:\Benutzer\sHeinrich\Desktop\Verbandbuch R\Eintrag - Verbandbuch\Abteilung1"

QZeile = 5 'Zeile in Quelldatei
QSpalten = 1 'Spaltenanzahl
QSpalteAb = "B"
' ab dieser Spalte insgesamt "QSpalten" Spaltenwerte übernehmen

ZZeile = 13 'erste Zeile in Zieldatei
ZSpalteAb = "B"
'erste Spalte in Zieldatei

Set WBGes = ActiveWorkbook
Set FSO = CreateObject("Scripting.FileSystemObject")

For Each oFile In FSO.GetFolder(sQuellpfad).Files
If LCase(Right(oFile.Name, 4)) = ".xls" Then
'nur ".xls"-Dateien verarbeiten; bei ".xlsx" natürlich die letzten 5 Zeichen vergleichen

Application.Workbooks.Open oFile.Path 'Quelldatei öffnen

'Zellen lt Vorgabe aus Quelldatei lesen und in aktuelle Zeile der Zieldatei schreiben

WBGes.Worksheets(1).Cells(ZZeile, ZSpalteAb).Resize(1, QSpalten).Value = ActiveWorkbook.Worksheets(1).Cells(QZeile, QSpalteAb).Resize(1, QSpalten).Value

ActiveWorkbook.Close False 'Quelldatei schließen
ZZeile = ZZeile + 1 'Zeilennummer Zieldatei erhöhen
End If

Next

WBGes.Worksheets(1).Activate
WBGes.Save
MsgBox

End Sub

Nachher:

Sub Makro1()

    'Dimensionieren: $=String, %=Integer
    Dim sQuellpfad$, QZeile%, QSpalten%, QSpalteAb$, ZZeile%, ZSpalteAb$
    Dim WBGes As Workbook, WBNeu As Workbook
    Dim FSO As New FileSystemObject 'Unter "Extras" einen Verweis auf "Microsoft Scripting Runtime" setzen
    Dim oFile As File

    Set WBGes = ThisWorkbook

    sQuellpfad = "C:\Benutzer\sHeinrich\Desktop\Verbandbuch R\Eintrag - Verbandbuch\Abteilung1"
    QZeile = 5 'Zeile in Quelldatei
    QSpalten = 1 'Spaltenanzahl
    QSpalteAb = "B" 'ab dieser Spalte insgesamt "QSpalten" Spaltenwerte übernehmen
    ZZeile = 13 'erste Zeile in Zieldatei
    ZSpalteAb = "B" 'erste Spalte in Zieldatei

    For Each oFile In FSO.GetFolder(sQuellpfad).Files
        If LCase(Right(oFile.Name, 4)) = ".xls" Or LCase(Right(oFile.Name, 5)) = ".xlsx" Then
            Set WBNeu = Application.Workbooks.Open(oFile.Path, True, False) 'Quelldatei öffnen
            WBGes.Worksheets(1).Cells(ZZeile, ZSpalteAb).Resize(1, QSpalten).Value = _
                WBNeu.Worksheets(1).Cells(QZeile, QSpalteAb).Resize(1, QSpalten).Value
            WBNeu.Close False 'Quelldatei schließen
            ZZeile = ZZeile + 1 'Zeilennummer Zieldatei erhöhen
        End If
    Next

    WBGes.Save

    Set FSO = Nothing
    Set WBNeu = Nothing
    Set WBGes = Nothing

End Sub
1
Oubyi 05.07.2013, 10:29
@Higlav

@ Higlav: DH!
Doch da Dajenna offensichtlich nicht mehr daran interessiert ist, hast Du Dir die Arbeit wohl vergeblich gemacht.
So was ist immer schade.

0
Higlav 05.07.2013, 16:54
@Oubyi

Danke, aber ich hab' langsam das Gefühl, dass ich vera-ähh-äppelt werde: Ich habe mind. 12 Antworten ohne Reaktion. Sowas schlaucht schon ein wenig :(

Was ist denn mit den TE's in letzter Zeit (bei mir jetzt schon mehrere Wochen) los? Kein DH, Kein Kommentar - nichts...

Passiert dir das manchmal auch?

0
Oubyi 06.07.2013, 12:16
@Higlav

Sorry, aber was meinst Du mit TE's?
Hab' im Moment keine Idee!

0
Oubyi 06.07.2013, 15:48
@Higlav

AH! Da wäre ich jetzt nicht drauf gekommen!
Ja, Du hast recht, zur Zeit sieht es da ziemlich "mau" aus.
Eine Rückmeldung zu bekommen ist schon fast ein Highlight, obwohl das doch eigentlich selbsverständlich sein sollte.
Ich weiß auch nicht, was die Leute sich dabei denken.
Sogar wenn es schon eine Reaktion des TEs gegeben hat, in der er um eine Nachbesserung bittet, und man die macht, kommt danach oft keine Reaktion mehr.
Ist schon ärgerlich, aber ich sehe das dann eben als eine gute Möglichkeit, meine Frustrationstolleranz zu erhöhen ㋛
Und die paar, die antworten und sich bedanken, machen das dann auch wieder wett.
Wie DAAhN hier schreibt:
http://www.gutefrage.net/frage/zellberei-in-excel-in-einer-anderen-zeile-sortiert-ausgeben
"Singen wir zusammen ...... zwo...drei..vier. ;o)"

1

Was möchtest Du wissen?