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.

Datei vorhanden, dann MsgBox
#11
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:
  • Rabe
Antworten Top
#12
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!
Antworten Top
#13
Ä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?
Antworten Top
#14
Versuche es mal so:

If Worksheets("Calc3").Range("C106").Value = 1 Then
[-] Folgende(r) 1 Nutzer sagt Danke an Basisa für diesen Beitrag:
  • o0Julia0o
Antworten Top
#15
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.
Antworten Top
#16
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:
  • o0Julia0o
Antworten Top
#17
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.
Antworten Top
#18
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:
  • o0Julia0o
Antworten Top
#19
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?
Antworten Top
#20
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:
  • o0Julia0o
Antworten Top


Gehe zu:


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