[VBA] Mehrere Fragen bzgl. Excel

AndrewPoison

Admiral
Registriert
Jan. 2005
Beiträge
8.536
Halö, bin neu in VBA und hab da gleich mal zwei (vielleicht später auch mehr ^^) Fragen:
  1. Wie kann ich bestimmte Inhalte einer aktuell geöffneten Excel-Datei in eine andere schreiben?
    Bisher löse ich es folgendermaßen:
    Code:
    Private Sub CommandButton2_Click()
      Excel.Workbooks.Open ("test.xls")
      Excel.Range("=[test]Sheet1!A1").Value = "TestTestTest"
      Excel.ActiveWorkbook.Save
      Excel.ActiveWorkbook.Close
    End Sub
    Allerdings sieht mir das noch sehr laienhaft aus und vorallem: der User merkt dabei ja, das die Datei geöffnet, beschrieben, gespeichert und wieder geschlossen wird. Das ist prinzipiell ungewünscht und stellt auch ein Sicherheitsrisiko dar. Geht das nicht irgendwie besser, am besten im Hintergrund?
  2. Wie kann ich eine Frage für den Nutzer formulieren, die, wenn er auf einen Button klickt, ihn vorher nochmals fragt, ob der die Aktion wirklich durchführen will?
edit: ach ja, und wie kann ich in eine Excel-Zelle mit einer Funktion nur das aktuelle Jahr (nicht Datum oder Zeit) hineinschreiben?

edit2: so, für Frage 2 hat sich die Sache erledigt, bin da nun doch noch in der Hilfe fündig geworden. Frage 1 und "3" bleiben aber bestehen ;)
 
Zuletzt bearbeitet:
Also zu Frage 1:

Ich denke Application.Screenupdating = false (ab jetzt sieht der User nichts mehr)
und application.screenupdating = true (jetzt sieht er wieder was) sollten das lösen.

Zu Frage 3:
die Funktion die Du suchst ist =Jahr(Datum)... manchmal so einfach, nicht?
 
Punkt 2 müsste über eine MessageBox (MsgBox) oder InputBox gehen... ich glaub so heißt der Dialog in VBA.
 
sebko schrieb:
Zu Frage 3:
die Funktion die Du suchst ist =Jahr(Datum)... manchmal so einfach, nicht?

Mh, bei mir erscheint in dem Feld dann immer nur #NAME? - egal ob iches mit =Jahr(Datum) oder aber =Year(Date) probiere :/
 
Möchtest Du das aktuelle Datum nur als Jahreszahl angezeigt bekommen, gib =HEUTE() ein, formatiere die Zelle Benutzerdefiniert und wähle als Format anstatt TT.MM.JJJJ nur JJJJ aus.
Wenn Du =Jahr(Datum) benutzt, weiss Excel nicht was er anzeigen sol,l weil da wo Datum steht eine Zahl stehen muss, gib mal =Jahr(39356) ein, dann wird der Tag angezeigt im Format TT.MM.JJJJ.
 
Zuletzt bearbeitet:
Naja, wichtig wäre, das auch der richtige, dahinter stehende Zellenwert nur das Jahr enthält, denn damit muss "gerechnet" werden.
 
Das geht so einfach nicht, da ein Wert des Jahres immer die einzelnen Tage und Stunden zur Berechnung zufügt und bei Wechsel eines Tages ein anderer Wert rauskommen würde. Weiss ja nicht was du berechnen möchtest.
 
So, ich hab nun mehr oder minder alle meine Probleme gelöst. Dafür hab ich nun ein neues :D

Und zwar müsste ich aus dem Excel-VBA-Makro heraus eine .doc-Datei mit Inhalten der Excel-Tabelle füllen. Wie könnte man sowas anstellen? Bedarf es da spezieller Formatierungen in dem doc-file oder ist da überhaupt was zu machen (das hoffe ich mal ^^). Oder geht das nur mit Tricks?
 
Hallo,

wie wäre der umgekehrte Weg?
Der Cursor kommt an die Stelle im Word-Dokument, wo die Excel-Daten eingefügt werden sollen.
Ansonsten, lade den Anhang runter und passe alles an.

Code:
Sub Excel_Daten()

Dim Mappe As Object, Name As String, Ber As String

Set Mappe = CreateObject("Excel.Application")

Name = InputBox("Datei angeben")
If Name = "" Then Exit Sub

Ber = InputBox("Zellbereich angeben", , "A1")
If Ber = "" Then Exit Sub

Mappe.Workbooks.Open "X:\Pfad\..\" & Name

Mappe.Sheets("Bsp_Sheet").Range(Ber).Select
Mappe.Selection.Copy

Selection.Paste

Mappe.Quit

End Sub
 

Anhänge

Zuletzt bearbeitet:
Okay, dank dir erstmal. Hab zwar jetzt erstmal keinen Zugriff auf die originalen Daten, aber werds nun zumindest lokal mit Dummydateien ausprobieren. Hoffentlich klappts, wie ich mir das so vorgestellt hab ;)

Der umgekehrte Weg geht leider nicht, da das Quelldokument zwangsweise das Excel-File seien muss :/

/edit: das jerry scheint schon mal ganz brauchbar zu sein, thx :D
 
Zuletzt bearbeitet:
So, Update der Situation (und sry für den Doppelpost, aber sonst bekommts ja wieder niemand mit ^^ -> müsste ne Funktion geben um den Thread als "aktualisiert" anzuzeigen wenn der letzte Beitrag editiert wurde)

Naja, jedenfalls:

nun klappt soweit alles. Das Exceldokument füllt das Doc ordentlich auf, allerdings soll jetzt das ganze noch gedruckt werden. An sich kein Problem, die Funktion dafür ist bekannt. Doch es hapert an einer Stelle:

während in der Druckvorschau noch alles okay ist, zeigt sich bei einem echten Ausdruck, dass die Felder wieder ihren Standardwert enthalten, und nicht das von dem Excel-Dokument. Dies geschieht auch, wenn das Dokument vorher gespeichert wird. Mann kann das zwar Verhindern, in dem man in den Druckoptionen "Felder beim Druck aktualisieren" (o.ä., hab hier die englische Version) abwählt, allerdings muss dies bislang manuell geschehen, automatisch ist da nichts zu machen :/

Der letztendliche User hat leider nicht allzuviel Ahnung von Word, Excel und Co., deshalb soll eben so viel wie möglich ohne Benutzereingriff stattfinden.

Kann mann das nun noch irgendwie im Code angeben, das für den Druck die Felder nicht aktualisiert werden sollen?

Und nochetwas fällt mir ein. Während ich unter Excel mit der PrintOut-Funktion auch den Drucker angeben kann, auf dem das Dokument ausgedruckt werden soll, gibt es diese Möglichkeit unter Word nicht. Allerdings wäre es auch hier angebracht, das dies automatisch geschieht und nicht der Nutzer den Drucker auswählt, über welchen gedruckt werden soll. Vorschläge?

edit: okay, nach zahllosen Versuchen, klappts mit
Code:
  For Each wElement In wdAnw.ActiveDocument.Fields
    wElement.Locked = True
  Next
ganz gut. Also wenn er es sperrt, wirds scheinbar nicht mehr aktualisiert ;)

edit2: hab grad noch gesehen, das es ein Options.UpdateFieldsAtPrint gibt. Naja... nu is zuspät ;) Aber für die manuelle Druckerauswahl habsch immernoch nichts gefunden :/
 
Zuletzt bearbeitet:
AndrewPoison schrieb:
Während ich unter Excel mit der PrintOut-Funktion auch den Drucker angeben kann, auf dem das Dokument ausgedruckt werden soll, gibt es diese Möglichkeit unter Word nicht. Allerdings wäre es auch hier angebracht, das dies automatisch geschieht und nicht der Nutzer den Drucker auswählt, über welchen gedruckt werden soll. Vorschläge?

Aber für die manuelle Druckerauswahl habsch immernoch nichts gefunden :/

Hallo,

fasse ich diese Frage falsch auf?
Du möchtest doch automatisch drucken?


Kennst Du die Application.ActivePrinter-Funktion in Word?
Application.ActivePrinter = "Dein Drucker"

Als kleine Anregung noch ein Makro für den Druckerwechel:

Sub Druckerwechsel()
Dim strActivePrinter As String
strActivePrinter = Application.ActivePrinter
Application.ActivePrinter = "Fritz-Fax"
ActiveDocument.PrintOut
Application.ActivePrinter = strActivePrinter
End Sub


Oder diese Variante:


Sub Fax()
ActivePrinter = "Fritz-Fax"
Application.PrintOut FileName:="", Range:=wdPrintAllDocument, Item:= _
wdPrintDocumentContent, Copies:=1, Pages:="", PageType:=wdPrintAllPages, _
Collate:=True, Background:=False, PrintToFile:=False
ActivePrinter = "HP Deskjet 959c"
End Sub
 
Zuletzt bearbeitet:
Sorry das ich gestern nicht mehr aktualisiert hab... die ActivePrinter-Property hatte ich gestern "abend" auch gefunden ;)
Auch sonst hab ich derzeit keine Probleme mehr.... irgendwie beängstigend ^^

Und ja, mit "manueller Druckerauswahl" meinte ich manuell für mich, also den Programmierer :D
 
Zuletzt bearbeitet:
Stimmt, auch noch vergessn ^^
 
Zurück
Oben