Das letzte Clever-Excel-Forum.de - Treffen
fand vom 15. - 17. September 2017 in Friedrichroda /
Thüringen / Region Großer Inselsberg statt.

Via VBA eine Zelle ändern
#1
Hallo,
komme leider bei meinem Problem einfach nicht mehr weiter.
Ich möchte das durch mein VBA-Code eine bestimmte Zelle, hier die Zelle("J8") mit 1 subtrahiert wird.
Mein Code:
Code:
Private Sub Worksheet_Change(ByVal Target As Range)
  
    If DieseArbeitsmappe.altWert <> Range("J8") Then
  
    Dim str_Date As String, sh As Worksheet
    'Range("J8").Value
    Const str_path As String = "X:\Groups\Allgemein\Shopfloor\Berichte\Wochenbericht\" '"C:\Temp\"
    Set sh = ActiveSheet
    With Sheets("KW_Auswahl")
        str_Date = Range("J8")
        Sheets(Array("KW_Auswahl", "A", "B", "C")).Select
        ActiveSheet.ExportAsFixedFormat Type:=xlTypePDF, Filename:= _
        str_path & "Wochenbericht_" & str_Date & ".pdf", Quality:=xlQualityStandard, _
        IncludeDocProperties:=True, IgnorePrintAreas:=False
        'sh.Activate
    End With
    DieseArbeitsmappe.altWert = Range("J8")
    End If
End Sub

Dieser Code speichert einige Tabellen (KW_Auswahl,A,B,C) in PDF ab sobald sich die Kalenderwoche ändert. Jedoch wird die KW von der aktuellen Woche gespeichert, ich möchte das die KW von der vorherigen KW gespeichert wird und nicht von der aktuellen.

Information: In der Zelle ("J8") steht die Kalenderwoche die durch die Zelle ("C8") erzeugt wird, falls das wichtig sein sollte.

Ich hoffe ihr könnt mir hierbei weiterhelfen...


claudia
to top
#2
Hi Claudia,

vielleicht so:
str_Date = Range("J8") - 1
Mit freundlichen Grüßen  Smile
Michael
to top
#3
Hallo Claudia,

befindet sich in Zelle J8 eine Formel?

Wird in Zelle C8 eine Eingabe manuell oder per Code gemacht?
Gruß Atilla
to top
#4
@zwergel nein funktioniert leider nicht so habe ich schon ausprobiert


@atilla Ja in der Zelle J8 befindet sich folgende Formel das die Kalenderwoche erzeugt wird
-> Kalenderwoche(C8)

und in der Zelle C8 steht die Formel für HEUTE()
to top
#5
Hallo Claudia,

das geht so nicht.

Beschreib bitte mal, wie der Ablauf genau aussieht.
Du öffnest die Datei und dann wird die Formel Heute() neu berechnet, und wenn die Kalenderwoche
sich ändert soll dann automatisch gespeichert werden?
Gruß Atilla
to top
#6
Ganz genau,

beim Öffnen der Datei wird die Formel Heute() neu berechnet, sobald sich die Kalenderwoche ändert werden bestimmte Tabellen in PDF umgewandelt und gespeichert.
Bsp.: Ich öffne am Montag die Datei und an dem Montag beginnt die neue KW z.B.: KW40
dann steht in den umgewandelten Tabellen die KW40, es müsste aber KW39 stehen, d.h. von der abgeschlossene Kalenderwoche, wie eine Zusammenfassung der letzten Woche
Irg.wie müsste man die Zelle minus die 1 subtrahieren...
to top
#7
Hallo Claudia,

das ginge im WorkbookOpen Ereignis über einen Umweg.

Dazu brauche ich eine Hilfszelle, die ausgeblendet werden kann.
Ich habe die Zelle AA1 in der Tabelle mit der KW genommen.

In diese schreibst Du einmalig manuell die Kalenderwoche ein.

Der Code prüft beim öffnen, ob die KW die in der Hilfszelle steht ungleich der in J8 ist.
Wenn ungleich dann wird gespeichert( ich gehe davon aus, dass Dein Code zum Speichern funktioniert)
Nach der Speicherung wird die KW in der Hilfszelle mit der Aktuellen überschrieben.

Das wäre der Coe, welcher in das Codemodul DieseArbeitsmappe gehört:

Code:
Private Sub Workbook_Open()
Dim str_Date As String, sh As Worksheet
   Const str_path As String = "X:\Groups\Allgemein\Shopfloor\Berichte\Wochenbericht\" '"C:\Temp\"
   Set sh = Sheets("Tabelle1")      'TABELLENNAMEN ANPASSEN (die Tabelle in der der in J8 die Kalenderwoche steht)
   If sh.Range("J8") > sh.Range("AA1") Then
      With Sheets("KW_Auswahl")
          str_Date = sh.Range("AA1")
          Sheets(Array("KW_Auswahl", "A", "B", "C")).Select
          ActiveSheet.ExportAsFixedFormat Type:=xlTypePDF, Filename:= _
          str_path & "Wochenbericht_" & str_Date & ".pdf", Quality:=xlQualityStandard, _
          IncludeDocProperties:=True, IgnorePrintAreas:=False
          'sh.Activate
      End With
      sh.Range("AA1") = Range("J8")
    End If
End Sub

Du musst im Code den Tabellennamen anpassen, in der die KW steht. Siehe Kommentar im Code.
Gruß Atilla
to top
#8
Hallo Atilla,

ich würde hier lieber ungleich nehmen anstatt größer als, denn bei dem Jahreswechsel funktioniert deine Variante dann nicht.

Code:
If sh.Range("J8") <> sh.Range("AA1") Then
Gruß Stefan
Win 7 / Office 2007
to top
#9
Danke dir erstmal für deine Bemühungen, jedoch steht weiterhin in den einzelnen Blätter, auf denen auch die KW's enthalten sind, weiterhin die neue KW und nicht die KW-1
to top
#10
Hallo Claudia,

dann so:

Code:
Private Sub Workbook_Open()
Dim str_Date As String, sh As Worksheet
Dim i As Long, arr
arr = Array("Tabelle1", "a", "b", "c")
   Const str_path As String = "X:\Groups\Allgemein\Shopfloor\Berichte\Wochenbericht\" '"C:\Temp\"
   Set sh = Sheets("Tabelle1")      'TABELLENNAMEN ANPASSEN (die Tabelle in der der in J8 die Kalenderwoche steht)
   If sh.Range("J8") <> sh.Range("AA1") Then
      With Sheets("Tabelle1")
          str_Date = sh.Range("AA1")
          For i = 0 To UBound(arr)
            Sheets(arr(i)).Range("J8") = str_Date
         Next i
         Sheets(Array("Tabelle1", "a", "b", "c")).Select
          ActiveSheet.ExportAsFixedFormat Type:=xlTypePDF, Filename:= _
          str_path & "Wochenbericht_" & str_Date & ".pdf", Quality:=xlQualityStandard, _
          IncludeDocProperties:=True, IgnorePrintAreas:=False
          sh.Activate
      End With
      sh.Range("AA1") = Range("J8")
    End If
End Sub


@Steffan
Du hast recht, danke für den Hinweis. Na siehste, schon bist Du wieder am korrigieren. ;-)
Gruß Atilla
to top


Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste