Dieses Forum nutzt Cookies
Dieses Forum verwendet Cookies, um deine Login-Informationen zu speichern, wenn du registriert bist, und deinen letzten Besuch, wenn du es nicht bist. Cookies sind kleine Textdokumente, die auf deinem Computer gespeichert werden. Die von diesem Forum gesetzten Cookies werden nur auf dieser Website verwendet und stellen kein Sicherheitsrisiko dar. Cookies aus diesem Forum speichern auch die spezifischen Themen, die du gelesen hast und wann du zum letzten Mal gelesen hast. Bitte bestätige, ob du diese Cookies akzeptierst oder ablehnst.

Ein Cookie wird in deinem Browser unabhängig von der Wahl gespeichert, um zu verhindern, dass dir diese Frage erneut gestellt wird. Du kannst deine Cookie-Einstellungen jederzeit über den Link in der Fußzeile ändern.

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
Antworten Top
#2
Hi Claudia,

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

befindet sich in Zelle J8 eine Formel?

Wird in Zelle C8 eine Eingabe manuell oder per Code gemacht?
Gruß Atilla
Antworten 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()
Antworten 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
Antworten 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...
Antworten 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
Antworten 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 10 / Office 2016
Antworten 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
Antworten 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. Wink
Gruß Atilla
Antworten Top


Gehe zu:


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