minimex2
Goto Top

Problem mit Verknüpfung zwischen Arbeitsmappen in VBA

Schönen guten Morgen!

Ich habe ein größeres Problem mit der Verwendung von VBA:

Ich soll quasi ein Mini CRM erstellen, bei dem Besuchsberichte aus einer Exceldatei mit Tagesberichten generiert werden

-Ich habe zwei Arbeitsmappen; in der einen sollen die Besuchsbereichte für unseren Außendienst(Besuchsberichte.xls) generiert werden, in der anderen stehen Angaben zum Kunden, Datum, Ergebnisse, etc.

-Mein Ziel ist es in der Mappe Besuchsberichte.xls eine Maske zu erstellen, in die die KW eingegeben wird.
-Dann soll in der CRM.xls nach der Kalenderwoche gesucht und die Anzahl der Berichte durchgezählt werden
-In Besuchsberichte.xls soll dann das bereits vorhandene Arbeitsblatt so häufig kopiert werden, die Berichte vorhanden sind
-Die Daten sollen dann von CRM.xls in die einzelnen Berichte übertragen werden

Da ich leider der einzige Programmiererfahrene unserer Abteilung bin, aber bisher leider wenig mit VBA und der Verknüpfung mit Excel zu tun hatte, bitte ich um ein wenig Unterstützung.

Besonders Punkt zwei und vier bereiten mir Kopfzerbrechen.

Ich freue mich über eure tatkräftige Hilfe

Danke im Voraus

Grüße

Jens

Content-Key: 154620

Url: https://administrator.de/contentid/154620

Printed on: April 26, 2024 at 19:04 o'clock

Member: jenni
jenni Nov 09, 2010 at 08:46:29 (UTC)
Goto Top
Punkt zwei kannst du mit Excel herausbekommen.

=ZÄHLENWENN(Bereich;Suchkriterium)

Bereich ist die komplette Spalte mit der KW-Angabe.
Suchkriterium die einzelne KW

zu vier:
könnetest du vielleicht über die Zeilenzuordnung machen
hinter einer KW steht immer eine zeile und dahinter stehen immer die Kundeninfos(wenn ich dich richtig verstanden habe)
=Zeile(Bezug)
Bezug richtet sich nach der Zeile der KW
damit könntest du dann die Angaben aus CRM.xls in Besuchsberichte.xls kopieren!

das wäre jetzt mein Ansatz

Gruß
Jens
Member: minimex2
minimex2 Nov 09, 2010 at 09:51:39 (UTC)
Goto Top
Sorry, ich habe es doof erklärt:

Die Kalenderwochen sind nicht in der Tabelle selber vorhanden, sondern die unteren Reiter sind "KW**" benannt.
Da soll es dann in das richtige Register springen und dort die Anzahl der Berichte zählen, aber das erst ab Zeile 7, wobei dort auch wieder Lücken zwischen sein können
Mitglied: 76109
76109 Nov 09, 2010 at 10:10:16 (UTC)
Goto Top
Hallo Jens!

Das Zählen in etwa so (Konstanten anpassen):
Const CRMPath = "E:\Test\CRM.xls"  

Const StartZeile = 7
Const ZaehlSpalte = "A"  

Sub Test()
    Dim Anzahl As Long
    
    Anzahl = GetAnzahl(2)
End Sub

Private Function GetAnzahl(ByVal KW) As Long
    Dim Wkb As Workbook, Wks As Worksheet, i As Long, Counter As Long
    
    Set Wkb = GetObject(CRMPath)
    
    For Each Wks In Wkb.Sheets
        If Wks.Name = "KW" & Right("0" & KW, 2) Then  
            For i = StartZeile To Wks.Cells(Wks.Rows.Count, ZaehlSpalte).End(xlUp).Row
                If Not IsEmpty(Wks.Cells(i, ZaehlSpalte)) Then Counter = Counter + 1
            Next
            Exit For
        End If
    Next
    
    Wkb.Close False
    
    GetAnzahl = Counter
End Function
wobei für die Tabellennamen der Kalenderwochen von der Bezeichnung KW01, KW02,..., KW52 ausgegangen wird.

Gruß Dieter
Member: minimex2
minimex2 Nov 09, 2010 at 12:26:17 (UTC)
Goto Top
Danke Dieter

Super genial, dass war, nach ein wenig Modifikation, genau das, was ich brauchte.

Jetzt muss ich nurnoch die Datenübertragung programmieren; den Rest habe ich.

Gruß

Jens
Mitglied: 76109
76109 Nov 10, 2010 at 10:03:40 (UTC)
Goto Top
Hallo Jens!

Hier der Zähler noch etwas vereinfacht:
Private Function GetAnzahl(ByVal KW) As Long
    Dim Wkb As Workbook, Wks As Worksheet
    
    Set Wkb = GetObject(CRMPath)
    
    For Each Wks In Wkb.Sheets
        If Wks.Name = "KW" & KW Then  
            GetAnzahl = WorksheetFunction.CountIf(Wks.Range("A7:A65536"), "<>"):  Exit For  
        End If
    Next
    
    Wkb.Close False
End Function

Gruß Dieter