Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1708to1712
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

If statement mit <>

If statement mit <>
20.08.2019 17:38:50
Tom
Hallo,
ich habe ein Makro geschrieben, der alle Arbeitsblätter durchlaufen soll und wenn das Arbeitsblatt entweder Tabelle2 oder Tabelle6 ist, sollen diese übersprungen werden. Für die restlichen Arbeitsblätter soll eine XML Datei mit den XML-Tags erstellt werden. Jedoch funktioniert das ganze nicht richtig. Das heisst Tabelle2 und Tabelle6 werden nicht übersprungen, sondern in der XML-Datei werden auch Tags für diese Arbeitsblätter generiert. Was ist falsch?
Hier mein Code

Set XDoc = CreateObject("MSXML2.DOMDocument")
Set XMLCommentTag = XDoc.createComment(copyrightComm)
Set XMLHead = XDoc.createProcessingInstruction("xml", XMLHeadContent)
Dim WS_Count As Integer
Dim I As Integer
Dim vorlageDoc As String
Dim frontpage  As String
vorlageDoc = "Tabelle6"
frontpage = "Tabelle2"
XDoc.appendChild XMLHead
XDoc.appendChild XMLCommentTag
Set root = XDoc.appendChild(XDoc.createElement("Root"))
root.setAttribute "xmlns:xsi", "test"
WS_Count = ActiveWorkbook.Worksheets.Count
For I = 1 To WS_Count
If Worksheets(I).Name  vorlageDoc Or Worksheets(I).Name  frontpage Then
Set elem = root.appendChild(XDoc.createElement("Child"))
elem.setAttribute "attr1", "value.attr1"
elem.setAttribute "attr2", "value.attr2"
Set elem2 = elem.appendChild(XDoc.createElement("Child-2"))
elem2.Text = "Child-Child"
End If
'MsgBox ActiveWorkbook.Worksheets(I).Name
Next I

33
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: If statement mit <>
20.08.2019 17:50:13
onur
Nicht OR sondern AND nehmen, denn sonst trifft ja eine der 2 Bedingungen immer zu.
AW: If statement mit <>
20.08.2019 17:56:08
Tom
Habe ich ja am Anfang schon ,aber es funnktioniert leider auch nicht.
AW: If statement mit <>
20.08.2019 17:59:35
onur
Heissen die Blätter wirklich "Tabelle6" und "Tabelle2" oder sind es die Codenamen?
Was steht unten auf den Tabs?
AW: If statement mit <>
20.08.2019 18:03:43
Tom
Also iuch habe die unbenannt, aber trotzdem muss doch VBA damit arbeiten können mit der internen Bezeichnung.
Userbild
AW: If statement mit <>
20.08.2019 18:09:44
onur
Nein, es ist ein Unterschied zw. CodeName und Name.
Den Namen (z.B. "Vorlage") kannst du ohne Probleme ändern, aber der Codename ("Tabelle6") bleibt.
Also entweder ".CodeName" statt ".Name" nehmen oder die richtigen Namen in die Variablen füttern.
UND: AND statt OR nehmen.
Anzeige
AW: If statement mit <>
20.08.2019 18:14:28
Tom
Erstens mal vielen Dank, dass du so schnell antwortest.
Hab den Code jetzt angepasst:
If Worksheets(I).CodeName  vorlageDoc And Worksheets(I).CodeName  frontpage Then
Aber immer noch das gleiche Problem.
AW: If statement mit <>
20.08.2019 18:15:36
onur
Poste mal die Datei (notfalls anonymisiert).
AW: If statement mit <>
20.08.2019 18:32:32
Tom
Ist noch nicht gelöst
AW: If statement mit <>
20.08.2019 18:40:10
onur
Wie kommst du darauf, dass der Code immer noch NICHT funktioniert?
Wegen der MessageBox? Der Code dafür steht ausserhalb der IF-Schleife, somit zeigt sie ALLE Blätter an.
Ich habe mal deinen Code etwas lesbarer umstrukturiert:
https://www.herber.de/bbs/user/131533.xlsm
Anzeige
AW: If statement mit <>
20.08.2019 18:58:09
Tom
Nein nicht wegen der MessageBox, sondern die Datei die erstellt wurde. Also das klappt jetzt. Aber was genau hast du denn da jetzt geändert?
Vielen lieben Dank aufjedenfall.
AW: If statement mit <>
20.08.2019 19:00:23
onur
Gar nix, ausser den Code lesbarer zu formatieren und die Messagebox innerhalb der IF-Schleife zu plazieren.
AW: If statement mit <>
20.08.2019 19:10:09
Tom
Echt strange, aber ja funktioniert jetzt. Vielleicht noch eine ergänzende Frage:
Bei dem Loop habe ich ja folgendes:
For I = 1 To WS_Count
Das heisst, I hat ja den Anfangwert 1, also müsste er doch, wenn ich das I ausgeben lasse auch eine 1 ausgeben, jedoch bekomme ich eine 2 ausgegeben. Hab bestimmt wieder einen logischen Denkfehler da.
Anzeige
AW: If statement mit <>
20.08.2019 19:12:42
onur
"wenn ich das I ausgeben lasse " - Wann?
Mach doch mal eine MsgBox direkt hinter For....
For I = 1 To WS_Count
MsgBox i

AW: If statement mit <>
20.08.2019 19:19:40
Tom
Ja da ist es ja richtig, jedoch wenn das in die IF-Schleife geht, dann hat I den Wert 2. Wie bekomme ich es hin, dass I auch in der If Schleife den Startwert 1 bekommt?
AW: If statement mit <>
20.08.2019 19:28:24
onur
Schreib mal
For I = 1 To WS_Count
MsgBox I & " " & Worksheets(I).CodeName
......

dann siehst du, dass Sheets(1) Tabelle2 und Sheets(2) Tabelle7 ist und Tabelle 2 wird in der IF-Abfrage natürlich übersprungen.
Der Index, der Name und der CodeName eines Blattes sind drei verschiedene Dinge.
Anzeige
AW: If statement mit <>
20.08.2019 19:42:24
onur
Und wenn du mal die interne Nummer (I) eines Blattes ermitteln musst, schreib in irgend eine Zelle (z.B.)
=BLATT("Vorlage")

AW: If statement mit <>
20.08.2019 19:48:15
Tom
Nein nein, ich brauche nur einen Counter der dann wieder sozusagen die Blätter zählt, die halt nicht Tabelle2 oder Tabelle6 sind. Hab das mal jetzt so gelöst:

WS_Count = ActiveWorkbook.Worksheets.Count
iCounter = 1
aCounter = 1
bCounter = WS_Count - iCounter - 1
MsgBox bCounter
' Begin the loop.
For iCounter = iCounter To WS_Count
MsgBox iCounter
If Worksheets(iCounter).CodeName  vorlageDoc And Worksheets(iCounter).CodeName  frontpage  _
Then
For aCounter = aCounter To bCounter
MsgBox bCounter
'Add child to root
Set elem = root.appendChild(XDoc.createElement("Child"))
'Add Attribute to child
elem.setAttribute "attr1", "value.attr1"
elem.setAttribute "attr2", "value.attr2"
'Add child to child
Set elem2 = elem.appendChild(XDoc.createElement("Child-2"))
elem2.Text = aCounter
Next aCounter
End If
Next iCounter
Aber es gibt bestimmt eine elegantere Methode als diese oder?
Anzeige
AW: If statement mit <>
20.08.2019 19:51:40
onur
Häääh? Wozu?
Dein Code ZÄHLT doch alle Sheets, "die halt nicht Tabelle2 oder Tabelle6 sind".
Ich rede mir hier den Mund fusselig, und du kapierst es doch nicht !
AW: If statement mit <>
20.08.2019 20:04:45
Tom
Sorry, ich stehe gerade echt aufm Schlauch.
Ich lade die Datei mal hoch und erstell du mal damit die XML-Datei und schau was ich meine. Vielleicht wird meine Frage dadurch verständlicher.
https://www.herber.de/bbs/user/131534.xlsm
So Nach du die XML Datei erstellt hats, schau mal in diese rein. Da wird mit 2 begonnen, ich möchte aber dass dort eine 1 ausgegeben wird.
Anzeige
AW: If statement mit <>
20.08.2019 20:15:47
onur
1) Damit dein Code komplett bei mir läuft, müsste ich alles für mich anpassen, und das werde ich bestimmt nicht machen.
2):
Sheets(1) ist (CodeName) Tabelle2 (Name: "Operator-VBA") - soll lt. deiner Aussage übersprungen werden
Sheets(2) ist (CodeName) Tabelle7 (Name: "Operator-1")
Sheets(3) ist (CodeName) Tabelle8 (Name: "Operator-2")
Sheets(4) ist (CodeName) Tabelle6 (Name: "Vorlage") - soll lt. deiner Aussage übersprungen werden
und genau das geschieht doch auch !
Du hast anscheinend keine Ahnung, was genau eine IF-Schleife macht.
AW: If statement mit <>
20.08.2019 20:28:25
Tom
Ja das ist ja auch garnicht das Problem. Und theoretisch müsstest du da nichts anpassen, ausser den Pfad.
Aufjedenfall ist das kein Problem der If-Schleife, weil die funbktioniert richtig. JEdoch möchte ich den Counter in der Datei ausgeben. Heisst in den ersten Tag soll dann die 1 rein, in den zweiten die 2 usw. Momentan wird aber in dem ersten Tag 2 eingetragen, was auch natürlich logisch ist, weil er ja praktisch das erste Blatt übersrpingt und erst beim zweiten Blatt in die if Schleife kommt. Daher auch die 2 in dem ersten Tag. Hoffe es ist etwas verständlicher.
Anzeige
AW: If statement mit <>
20.08.2019 20:38:13
onur
Dann nimm nicht I für den Tag, sondern eine andere Variable (z.B. ix), die den Anfangswert 0 hat und innerhalb der IF-Schleife (direkt am Anfang) um 1 erhöht wird.
If Worksheets(I).CodeName  vorlageDoc And Worksheets(I).CodeName  frontpage Then
ix=ix + 1
.....

AW: If statement mit <>
20.08.2019 20:40:18
Tom
Uff Danke, jetzt haben wirs :-). Nice. Tesekür ederim.
AW: If statement mit <>
20.08.2019 20:40:21
Tom
Uff Danke, jetzt haben wirs :-). Nice. Tesekür ederim.
AW: If statement mit <>
20.08.2019 20:42:11
onur
War ja eine schwere Geburt - gern geschehen!
AW: If statement mit <>
20.08.2019 20:52:40
Tom
Ohh jaa
ABARTIG
20.08.2019 21:19:32
WF
diese Betreff-Wiederholungen
Das ist aber auch nur eine...
20.08.2019 21:28:07
{Boris}
Hi Walter,
…(Be-)Sonderheit bei Herber (und seinerzeit bei Spotlight). In anderen Foren (mit andere Software) ist das entweder gar nicht möglich oder maximal unerwünscht.
Diese Thread-Ansicht bei Herber ist (für heutige Foren-Verhältnisse) eher ungewöhnlich und wird daher von vielen eben so behandelt wie eingangs beschrieben - auch wenn es hier hilfreich ist, den Betreff (laufend) anzupassen.
VG, Boris
Anzeige
AW: Das ist aber auch nur eine...
20.08.2019 21:41:20
onur
Viel zu umständlich, den Betreff laufend anzupassen.
Abgesehen davon weiß ich nicht, wozu - nur damit Aussenstehende den Thread leichter mitverfolgen können ?
Ich kommuniziere ja nicht mit ihnen, sondern mit dem Frager.
Diejenigen, die es wirklich interessiert, können ja den ganzen Text lesen.
Entwicklung eines Threads...
20.08.2019 21:49:27
{Boris}
Hi Onur,
...nur damit Aussenstehende den Thread leichter mitverfolgen können ?
Genau deshalb!
Diejenigen, die es wirklich interessiert, können ja den ganzen Text lesen.
Das hatten wir doch zuletzt erst ;-))
VG; Boris
Nicht nur hier und dort, ...
21.08.2019 11:54:29
Luc:-?
…Boris,
sondern im Prinzip bei allen baumstrukturierten Foren und darüber hinaus noch etlichen anderen wie beim WordPress-Standard, den auch das provisorische OL-Forum nutzt. Selbst beim CEF ist das möglich, obwohl dieser Text dann nur als ToolTip unterm Mauszeiger angezeigt wird. Heises (c'T) Telepolis fordert den Nutzer sogar ultimativ auf, einen neuen Betreff, auch bei AWen auf einen vorher­gehen­den Kommentar, zu schreiben. Nur machen das dann viele nicht (immer), aus den gleichen Gründen wie hier → Bequemlichkeit! Man orientiert sich hierbei wohl an eMail-SchnellAWen, die genau wie hier einen vorgefertigten AW-Betreff anbieten, wobei sich dann die vorangestellten AW: oder Re: von Mal zu Mal, ggf im Wechsel, vermehren. Das ist aber nur ein Service für Schnelle (bzw Faule). Besserer Stil wäre es auch dort, einen eigenen, aussagekräftigen Betreff zu formulieren, wie auch bei BriefPost üblich (der Bezug auf vorhergehende Schreiben zum gleichen Ggstand steht dann in der Folgezeile!).
(Den Betreff nahezu nahtlos in den Text übergehen zu lassen, ist eine andere Art von „Bequemlichkeit“, denn immerhin muss man sich dazu uU ein paar Gedanken machen. ;-])
Gruß, Luc :-?
„Der beste Beweis für intelligentes Leben im Universum ist, dass noch niemand versucht hat, Kontakt mit uns aufzunehmen.“ H.Lesch, 2018, Sonneberg
Deshalb Intelligenz steigern mit …

Anzeige
Alternative zu IF
20.08.2019 19:35:46
Daniel
Hi
in solchen Fällen ist es oft einfacher und verständlicher, mit Select Case zu arbeiten, weil mehrere Bediungen im IF schnell unübersichtlich werden:
mit Select Case würde der Code an dieser Stelle so aussehen:
Select Case Worksheets(I).Name
Case vorlageDoc, frontpage
'-- nichts machen
Case else
Set elem = root.appendChild(XDoc.createElement("Child"))
elem.setAttribute "attr1", "value.attr1"
elem.setAttribute "attr2", "value.attr2"
Set elem2 = elem.appendChild(XDoc.createElement("Child-2"))
elem2.Text = "Child-Child"
End Select
dass du bei den Worksheets darauf achten musst, ob du jetzt mit dem CodeNamen (der steht im Projektbaum vor der Klammer) oder dem Index-Namen (der steht im Projektbaum in der Klammer und auch auf den Tabellenblattreitern), hat dir Onur ja schon erklärt.
Gruß Daniel

300 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige