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.

VBA-Worddatei überprüfen bzw. speichern
#11
Code:
Sub kontrolle_Click()
  Dim strFile As String
  Dim WordApp As Object
 
  Set wsSource = Workbooks("1.xls").Worksheets("Mappe1")
  wsSource.Activate
   strRows = Selection.Row
   Set WordApp = CreateObject("word.Application")
    strFile = ThisWorkbook.Path & "\" & wsSource.Range("Z" & strRows) & ".docx"
   
   
If Dir(strFile) = "" Then
 With WordApp
     .Visible = True
     .WindowState = -4143
     .Activate
     .Documents.Open Filename:=ThisWorkbook.Path & "\leer.docx"
      .Document.SaveAs
    .Name = strFile
    .Show
   
End With
Else
With WordApp
     .Visible = True
     .WindowState = -4143
     .Activate
     .Documents.Open Filename:=strFile
     End With
  End If
 
End Sub
So habe nochmal alles deklariert. Ich hatte die IF und Else vertauscht. Er soll ja bei Nichtvorhandensein der Datei die leer.docx öffnen und bei Vorhandensein diese öffnen ::)unktioniert auch alles. Aber leider speichert er die leer.docx nicht unter dem anderen Namen ab. Fehlermeldung kommt keine.
Antworten Top
#12
Hallo Ralf,

(14.01.2018, 09:43)RPP63 schrieb: Noch eine Anmerkung:
Du solltest nicht .WindowState = -4143 nehmen, sondern den "sprechenden" Konstantennamen.
Erstens ist der Code dann lesbarer und zweitens muss VBA die Bedeutung der "kryptischen" Zahl nicht erst übersetzen.

ich hoffe, dass Du das nicht ernst meintest. Es ist nämlich genau anders herum. Der Wert ist das pure Basic und nicht der Konstantenname! Und bei Late Binding wie hier funktioniert es nur mit Werten.

Siehe z.B. auch hier am Beispiel mit Outlook: Outlook und Excel (1) Grundlagen und Einführung

Gruß Uwe
Antworten Top
#13
Doch doch, Uwe!
Ich habe das mal von Nepumuk aufgeschnappt, dem man ja nicht gerade Unkenntnis unterstellen kann.
Bin jetzt nicht am Rechner, werde aber später mal ein Beispiel geben.
Sollte ich wider Erwarten falsch liegen, dann vorsorglich schon mal mea culpa.
Gruß Ralf
Gib einem Mann einen Fisch und du ernährst ihn für einen Tag. 
Lehre einen Mann zu fischen und du ernährst ihn für sein Leben. (Konfuzius)
Antworten Top
#14
Ergänzend hast Du mit late binding natürlich Recht!
Da klappt nur der reine Zahlenwert.
Gib einem Mann einen Fisch und du ernährst ihn für einen Tag. 
Lehre einen Mann zu fischen und du ernährst ihn für sein Leben. (Konfuzius)
Antworten Top
#15
Ich konnte meine These nicht untermauern, kann Deine aber auch nicht bestätigen.
Rödel-Code:

Sub Konst_vs_Zahl()
Dim i&, Start#, k#
k = ActiveCell.Borders(xlEdgeRight).Weight
Start = Timer
For i = 1 To 10 ^ 9
  k = k - 4138
Next
Debug.Print k & " Zahl: " & Timer - Start
k = ActiveCell.Borders(xlEdgeRight).Weight
Start = Timer
For i = 1 To 10 ^ 9
  k = k + xlMedium '-4138
Next
Debug.Print k & " Konst: " & Timer - Start
End Sub

ergibt:

-4138000004138 Zahl: 14,5625

-4138000004138 Konst: 14,59765625



Gruß Ralf
Gib einem Mann einen Fisch und du ernährst ihn für einen Tag. 
Lehre einen Mann zu fischen und du ernährst ihn für sein Leben. (Konfuzius)
Antworten Top
#16
Hallo,

(14.01.2018, 10:30)barthi schrieb: .. Er soll ja bei Nichtvorhandensein der Datei die leer.docx öffnen und bei Vorhandensein diese öffnen ::)unktioniert auch alles. Aber leider speichert er die leer.docx nicht unter dem anderen Namen ab. Fehlermeldung kommt keine.

Du hast hier

Code:
.Document.SaveAs

auch keine Parameter angegeben.
Gruß Stefan
Win 10 / Office 2016
Antworten Top
#17
@RPP:

specialcells(2) braucht 'weniger' Zeit als specialcells(xlcelltypeconstants)


Code:
Sub M_snb()
    Dim y As Integer, j As Long
    Dim t(1) As Double
    
    t(0) = Timer
    For j = 1 To 10 ^ 5
       y = UsedRange.SpecialCells(2).Count
    Next
    t(1) = Timer - t(0)
    t(0) = Timer
    For j = 1 To 10 ^ 5
       y = UsedRange.SpecialCells(xlCellTypeConstants).Count
    Next
    t(0) = Timer - t(0)
    
    MsgBox "specialcells(2)            " & t(1) & vbLf & "specialcells(xlCellTypeConstants)    " & t(0)
End Sub


Dass timmt überein mit warum man in 'late binding' nur '2' verwenden kann.
In 'early binding wird der 'Excel Translator' geladen und die Translator aktiviert: es findet noch eine 'übersetzung' statt.
Zum übersetzen von Excel Formeln:

http://dolf.trieschnigg.nl/excel/index.p...gids=en+de
Antworten Top
#18
Nö!


Der Fairness halber sollte man korrekt refreshen.

Dein Makro gesplittet und nacheinander aufgerufen:

Modul Modul1
Dim y As Integer, j As Long 
Dim t As Double

Sub MachEs()
Call M_Const
Call M_Number
End Sub

Private Sub M_Const()
    t = Timer
    For j = 1 To 10 ^ 4
       y = Tabelle1.UsedRange.SpecialCells(xlCellTypeConstants).Count
    Next
    Debug.Print "xlCellTypeConstants: " & Timer - t
End Sub

Private Sub M_Number()
    t = Timer
    For j = 1 To 10 ^ 4
       y = Tabelle1.UsedRange.SpecialCells(2).Count
    Next
    Debug.Print "Number 2: " & Timer - t
End Sub

Ergibt:

xlCellTypeConstants: 9,5625
Number 2: 9,6171875


Hier ist jetzt die ausgeschriebene Version schneller.  Angel
Gib einem Mann einen Fisch und du ernährst ihn für einen Tag. 
Lehre einen Mann zu fischen und du ernährst ihn für sein Leben. (Konfuzius)
Antworten Top


Gehe zu:


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