Registriert seit: 12.10.2014
Version(en): 365 Insider (32 Bit)
Moin!
Ergänzend zu Ralf (Rabe) gibt es einen sehr interessanten Artikel zu Option Explicit:
http://www.online-excel.de/excel/singsel_vba.php?f=4
Unbedingt empfehlenswert (selbst für snb :21:;))
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)
Folgende(r) 1 Nutzer sagt Danke an RPP63 für diesen Beitrag:1 Nutzer sagt Danke an RPP63 für diesen Beitrag 28
• Rabe
Registriert seit: 08.07.2016
Version(en): 2016
24.02.2017, 20:15
(Dieser Beitrag wurde zuletzt bearbeitet: 24.02.2017, 20:15 von o0Julia0o.)
Danke Euch!
(24.02.2017, 07:07)Steffl schrieb: Code:
Sub DateiExistiert()
Dim AktuPfad As String
AktuPfad = ThisWorkbook.Path
If Range("Calc3!C106") = 1 Then
If Dir(AktuPfad & "\" & Range("Calc3!C111")) <> "" Then
MsgBox "Datei1 vorhanden"
ElseIf Dir(AktuPfad & "\" & Range("Calc3!C112")) <> "" Then
MsgBox "Datei2 vorhanden"
ElseIf Dir(AktuPfad & "\" & Range("Calc3!C113")) <> "" Then
MsgBox "Datei3 vorhanden"
End If
End If
End Sub
So wird Elseif jedoch nicht ausgeführt. Nur die 1 und die 2. If-Anweisung. Wenn die 2. If Wahr ist, dann werden die beiden Elsif gar nicht mehr ausgeführt. Genau das möchte ich aber. ElseIf in If ändern bringt ja auch nichts, da dann ja die jeweils nächste If nur ausgeführt wird, wenn die vorherige Wahr war. Also
nur wenn die 1. If-Frage(If Range("Calc3!C106") = 1 Then) falsch ist, soll das Makro beendet werden. Ansonsten soll er alle IF-Fragen durchlaufen. Und dann den Code ausführen(MsgBoxen), wo die IF-Antwort positiv war. Das geht dann so:
Code:
Sub DateiExistiert()
Dim AktuPfad As String
AktuPfad = ThisWorkbook.Path
If Range("Calc3!C106") = 1 Then
If Dir(AktuPfad & "\" & Range("Calc3!B111")) <> "" Then
MsgBox "B111"
End If
If Dir(AktuPfad & "\" & Range("Calc3!C111")) <> "" Then
MsgBox "C111"
End If
If Dir(AktuPfad & "\" & Range("Calc3!D111")) <> "" Then
MsgBox "D111"
End If
If Dir(AktuPfad & "\" & Range("Calc3!E111")) <> "" Then
MsgBox "E111"
End If
If Dir(AktuPfad & "\" & Range("Calc3!F111")) <> "" Then
MsgBox "F111"
End If
If Dir(AktuPfad & "\" & Range("Calc3!G111")) <> "" Then
MsgBox "G111"
End If
End If
End Sub
eine schönes Wochenende!
Registriert seit: 08.07.2016
Version(en): 2016
24.02.2017, 21:42
(Dieser Beitrag wurde zuletzt bearbeitet: 24.02.2017, 21:44 von o0Julia0o.)
Ärgerlich. Der Code funktioniert einwandfrei. Jedoch möchte ich ihn bei einer Tabelle aufrufen, also nicht als Modulmakro, sondern halt bei einer Tabelle:
Code:
Private Sub Worksheet_Activate()
Dim AktuPfad As String
AktuPfad = ThisWorkbook.Path
If Range("Calc3!C106") = 1 Then
If Dir(AktuPfad & "\" & Range("Calc3!B111")) <> "" Then
MsgBox "B111"
End If
If Dir(AktuPfad & "\" & Range("Calc3!C111")) <> "" Then
MsgBox "C111"
End If
If Dir(AktuPfad & "\" & Range("Calc3!D111")) <> "" Then
MsgBox "D111"
End If
If Dir(AktuPfad & "\" & Range("Calc3!E111")) <> "" Then
MsgBox "E111"
End If
If Dir(AktuPfad & "\" & Range("Calc3!F111")) <> "" Then
MsgBox "F111"
End If
If Dir(AktuPfad & "\" & Range("Calc3!G111")) <> "" Then
MsgBox "G111"
End If
End If
End Sub
Mit dieser kleinen Änderung in der 1. Zeile "Private Sub Worksheet_Activate()" statt: "Sub DateiExistiert()" funktinoiert es nicht mehr. Es kommt folgende Fehlermeldung, wenn das Tabellenblatt aufgerufen wird: "Laufzeitfehler '1004': Die Methode 'Range' für das Objekt '_Worksheet' ist fehlgeschlagen"
[url=
Dateiupload bitte im Forum! So geht es: Klick mich!]
Gelb markiert wird: "If Range("Calc3!C106") = 1 Then".
Ich verstehe, dass der Befehl Range nicht genutzt werden darf, wenn man den Code nicht als Modulmakro, sondern bei einem Tabellenblatt ausführt. Aber wie sonst soll ich auf die Zelle B111 in dem Tabellenblatt Calc3 verweisen?
Registriert seit: 14.02.2017
Version(en): Office 365
24.02.2017, 21:45
(Dieser Beitrag wurde zuletzt bearbeitet: 24.02.2017, 21:45 von Basisa.)
Versuche es mal so:
If Worksheets("Calc3").Range("C106").Value = 1 Then
Folgende(r) 1 Nutzer sagt Danke an Basisa für diesen Beitrag:1 Nutzer sagt Danke an Basisa für diesen Beitrag 28
• o0Julia0o
Registriert seit: 08.07.2016
Version(en): 2016
Klappt - überall statt Range. muß man Worksheet.Range machen. Ich frage mich, warum?
Gibt es auch so etwas wie ThisWorksheet? Wäre ja vom Code her kürzer an einigen stellen. Weil ich nach der MsgBox noch hier und da Code ausführe, wo ich auf dem Worksheet, wo sich der Code befindet etwas in eine Zelle schreibe.
Registriert seit: 14.02.2017
Version(en): Office 365
24.02.2017, 23:09
(Dieser Beitrag wurde zuletzt bearbeitet: 24.02.2017, 23:09 von Basisa.)
Nicht das ich wüsste ABER:
Du kannst es ja als Variable Speichern!?
Dann musst die nicht immer den Namen des Blattes angeben sondern was auch immer du dann nimmst ( z ) ?
Auch per ID würde es gehen, glaube so in etwa?
Sheets(1).Range...
Weiß aber gerade nicht aus dem Kopf ob 0 oder 1 das erste Blatt ist!
Folgende(r) 1 Nutzer sagt Danke an Basisa für diesen Beitrag:1 Nutzer sagt Danke an Basisa für diesen Beitrag 28
• o0Julia0o
Registriert seit: 08.07.2016
Version(en): 2016
Jo, wobei sich die Blattnummer ja ändern könnte, wenn man die Reihenfolge ändert. Ich finds etwas komisch, dass wenn man schon auf dem Workbook den Code hat, dass man dann noch extra den Sheetsnamen- oder Nr. angeben muß, wenn man doch ohnehin auf dem Blatt etwas in ein Feld eintragen möchte, wo man den Code hinterlegt hat. Naja, im Grunde nur eine Schönheitskorrektur. Von daher ist das ja erledigt.
Registriert seit: 14.02.2017
Version(en): Office 365
Ach du bist direkt auf dem Blatt und willst gar nicht zu ein anderen?
Dann sollte es auch so gehen: Range("A200").Value = 1
Folgende(r) 1 Nutzer sagt Danke an Basisa für diesen Beitrag:1 Nutzer sagt Danke an Basisa für diesen Beitrag 28
• o0Julia0o
Registriert seit: 08.07.2016
Version(en): 2016
25.02.2017, 16:52
(Dieser Beitrag wurde zuletzt bearbeitet: 25.02.2017, 16:53 von o0Julia0o.)
So funktioniert es zunächst. Jedoch wird die 2. If-Anweisung auch ausgeführt, wenn die 1. If-Abfrage einen anderen Wert als 1 ergibt:
Code:
Private Sub Worksheet_Activate()
Dim AktuPfad As String
AktuPfad = ThisWorkbook.Path
If Worksheets("Calc3").Range("C106") = 1 Then
If Dir(AktuPfad & "\" & Worksheets("Calc3").Range("B111")) <> "" Then
MsgBox "B111"
End If
If Dir(AktuPfad & "\" & Worksheets("Calc3").Range("C111")) <> "" Then
MsgBox "C111"
End If
If Dir(AktuPfad & "\" & Worksheets("Calc3").Range("D111")) <> "" Then
MsgBox "D111"
End If
If Dir(AktuPfad & "\" & Worksheets("Calc3").Range("E111")) <> "" Then
MsgBox "E111"
End If
If Dir(AktuPfad & "\" & Worksheets("Calc3").Range("F111")) <> "" Then
MsgBox "F111"
End If
If Dir(AktuPfad & "\" & Worksheets("Calc3").Range("G111")) <> "" Then
MsgBox "G111"
End If
End If
End Sub
Wenn die 1. If-Abfrage(If Worksheets("Calc3").Range("C106") = 1 Then) einen anderen Wert als 1 ergibt, soll der Code jedoch sofort beendet werden. Wie stelle ich das ein?
Registriert seit: 10.04.2014
Version(en): 97-2019 (32) + 365 (64)
Hallöchen,
Du schriebst ja weiter oben, das bei der 1. If das Makro verlassen werden soll. Dann musst Du Excel das auch mitteilen. Ich glaube, es war der False-Zweig?
Code:
If ... Then
...
Else
Exit Sub
End if
. \\\|/// Hoffe, geholfen zu haben.
( ô ô ) Grüße, André aus G in T
ooO-(_)-Ooo (Excel 97-2019+365)
Folgende(r) 1 Nutzer sagt Danke an schauan für diesen Beitrag:1 Nutzer sagt Danke an schauan für diesen Beitrag 28
• o0Julia0o