Registriert seit: 15.10.2016
Version(en): 2010
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.
Registriert seit: 17.04.2014
Version(en): MS Office 365(32)
Hallo Ralf,
(14.01.2018, 10: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ührungGruß Uwe
Registriert seit: 12.10.2014
Version(en): 365 Insider (64 Bit)
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)
Registriert seit: 12.10.2014
Version(en): 365 Insider (64 Bit)
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)
Registriert seit: 12.10.2014
Version(en): 365 Insider (64 Bit)
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,59765625Gruß 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)
Registriert seit: 11.04.2014
Version(en): Office 2007
Hallo,
(14.01.2018, 11: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
auch keine Parameter angegeben.
Gruß Stefan
Win 10 / Office 2016
Registriert seit: 29.09.2015
Version(en): 2030,5
@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.
Registriert seit: 12.10.2014
Version(en): 365 Insider (64 Bit)
Nö!
Der Fairness halber sollte man korrekt refreshen.
Dein Makro gesplittet und nacheinander aufgerufen:
Modul Modul1Dim 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,6171875Hier ist jetzt die ausgeschriebene Version schneller.
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)