Live-Forum - Die aktuellen Beiträge
Datum
Titel
24.04.2024 19:29:30
24.04.2024 18:49:56
24.04.2024 17:19:09
Anzeige
Archiv - Navigation
1556to1560
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

SpecialCells

SpecialCells
15.05.2017 16:18:01
Christian
Moin alle zusammen,
jetzt wage ich mich langsam mal an VBA ran :)
Folgendes Problem. In der Tabelle mit den Codenamen tblSim habe ich auf den Arbeitsblatt einen Bereich von F3:F7. In diesen Bereich stehen Werte mit Formeln. Auf einen Button liegt der Code. Sobald der Button gedrückt wird, werden die Werte in eine andere Tabelle überschrieben. So weit so gut.
Ich möchte die Felder löschen, ohne das die Formel mitgelöscht werden:

With Sheets("tblSim")
.Range("F3:F7").SpecialCells(xlCellTypeConstants).ClearContents
End With

Laufzeitfehler 9: Index außerhalb des gültigen Bereichs
Was mache ich falsch?
Vielen Dank und viele Grüße
Christian

19
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: OHNE SpecialCells
15.05.2017 16:31:03
Fennek
Hallo Christian,
den Befehl würde nur funktionieren, wenn in dem Bereich zumindest 1 Konstante wäre. Da es aber nur Formeln gibt, kommt die Fehlermeldung.
In diesem Fall geht es ohne "specialcells"

With Sheets("tblSim")
.Range("F3:F7").ClearContents
End With
oder
With Sheets("tblSim")
.Range("F3:F7").SpecialCells(xlCellTypeFormulas).ClearContents
End With
mfg
(ungetestet)
Index außerhalb des gültigen Bereichs
15.05.2017 16:50:18
Christian
Moin Fennek,
vielen Dank. Leider bekomme ich bei deinen beiden Lösungsansätzen, die gleiche Fehlermeldung
Private Sub CF_1_Button_Click()
Dim j As Integer
Dim i As Integer
For j = 1 To tblReal.Cells(Rows.Count, 1).End(xlUp).Row
If tblReal.Cells(j, 1).Value = tblSim.Cells(5, 2).Value Then
tblReal.Cells(j, 7) = tblSim.Cells(3, 6)
tblReal.Cells(j, 13) = tblSim.Cells(4, 6)
tblReal.Cells(j, 19) = tblSim.Cells(5, 6)
tblReal.Cells(j, 25) = tblSim.Cells(6, 6)
tblReal.Cells(j, 31) = tblSim.Cells(7, 6)
End If
Next j
With Sheets("tblSim")
.Range("F3:F7").ClearContents
End With
End Sub
Viele Grüße
Christian
Anzeige
AW: SpecialCells
15.05.2017 16:37:56
UweD
Hallo
das deutet darauf hin, dass das Blatt so nicht existiert.
- Sheets("tblSim") damit wird der Blattname angesprochen und NICHT der CODENAME des Blattes ( z.B. Tabelle1)
https://msdn.microsoft.com/de-de/library/office/ff837552.aspx
LG UweD
AW: SpecialCells
15.05.2017 16:51:48
Christian
Moin UweD,
.. aber es exisiert?
Userbild
Das verwirrt mich ja.
Viele Grüße
Christian
AW: SpecialCells
15.05.2017 16:57:43
Fennek
Hi,
kann es sein, dass Tabellen-Name und Codename verwechselt wurde?
versuche

with tblSim
.range( usw)
end with
oder
with sheets("Simulation")
.range( usw
mfg
Anzeige
AW: SpecialCells
15.05.2017 17:04:01
Christian
So, eine gute und eine schlechte Nachricht. Die gute, es gab keine Fehlermeldung. Die schlechte, meine Formeln würden gleich mit gelöscht... :(

With tblSim
.Range("F3:F7").SpecialCells(xlCellTypeFormulas).ClearContents
End With

AW: SpecialCells
15.05.2017 17:24:24
Daniel
Hi
naja, wenn du dem System mitteilst dass es Formeln löschen soll, (xlCelltypFormulas), dann löscht es auch die Formeln.
Wenn die Formeln stehten bleiben sollen, dann musst du die Konstanten löschen: xlCelltypeConstants
(es schadet nicht, wenn man den Code, den man schreibt, auch mal liest, da VBA auf Englisch basiert sollte das meiste verständlich sein)
Beachte, dass das .SpecialCells immer mit einem Fehler abbricht, wenn es keine Zelle finden kann.
Dh wenn du den Code 2x hintereinander laufen lässt, kommt beim zweiten Mal ne Fehlermeldung.
Weil das aber nicht schlimm ist (wenn nichts da ist, braucht man auch nichts löschen), kann man VBA in diesem Fall anweisen, den Fehler zu ignoreren und mit dem nächsten Schritt weiter zu machen (aber nur für diese Programmzeile):
With tblSim
on Error Resume Next
.Range("F3:F7").SpecialCells(xlCellTypeConstants).ClearContents
On Error Goto 0
End With
Gruß Daniel
Anzeige
Bei 'On Error Goto 0' landet man im Fehlerfall ...
15.05.2017 17:58:49
Luc:-?
…im PgmCode, Daniel,
deshalb benutze ich das nie! Ist das VB-Projekt passwortgeschützt, passiert das zwar nicht, aber es kommt eine für den NormalNutzer kryptische Fehlermeldung, mit der er nichts anfangen kann. Also bitte auf ein ordentliches FehlerAbfangen hinweisen!
Gruß, Luc :-?
AW: Bei 'On Error Goto 0' landet man im Fehlerfall ...
15.05.2017 18:19:28
Daniel
Hi
naja, kann ja jeder selbst entscheiden, was er im Fehlerfall macht.
Ich bevorzuge es, in einen Fehlerfall im Programmcode zu landen, weil ich dann sofort sehen kann, wo der Fehler auftritt und was dessen Ursachen sind. Dann lässt sich die Fehlerursache schnell beheben und der Fehler tritt nie mehr auf.
Solange man Makros nur für den Hausgebrauch (dh für sich oder den Kollegenkreis) schreibt und der Codeverantwortliche "greifbar" ist, ist das die bessere Lösung (manchmal lässt sich dann das Problem auch telefonisch beheben, wenn der Nutzer nicht gerade ein EDV-Totalverweigerer ist)
Wer als Profi Programme für Fremde schreibt, sollte lieber darauf achten, dass er die möglichen Fehlerfälle im Vorfeld abfragt und so vermeidet (und etwas mehr Zeit ins Testen steckt, als halbfertige Software an den Kunden auszuliefern)
Außerdem gehe ich davon aus, dass die meisten, die hier Fragen stellen, eben keine Programmierprofis sind, sondern Excel und VBA hauptsächlich für den Eigenbedarf nutzen und daher ein Fehlerabbruch in den Code das sinnvollste ist.
Gruß Daniel
Anzeige
Trotzdem kann ein entsprd Hinweis ja nicht ...
15.05.2017 18:48:52
Luc:-?
…schaden, Daniel,
und was man als Pgmmierer macht, solange das Pgm noch nicht fertig ist, bleibt ja jedem selbst überlassen, nur sollte man das nach Fertigstellung nicht aus dem Auge verlieren! Außerdem könnte man ja auch, wie bspw ich das tue, von vornherein eine F-Behandlung vorsehen und in der TestPhase an deren Ende ein Stop: Resume setzen. Dann gelangt man auch wieder zur F-Quelle. ;-]
Luc :-?
Luc darfts du alles machen.
15.05.2017 18:59:48
Daniel
Gruß Daniel
Deine 'Genehmigung' brauch'ich dazu nicht! :-> owT
15.05.2017 19:34:46
Luc:-?
:-?
Code funktioniert nicht?
15.05.2017 20:36:46
Christian
Moin,
das ganze hat ja eine ganz schöne Diskussion ausgelöst. Leider musste ich vorhin weg sonst hätte ich euch auf jeden Fall ein Feedback vom Code gegeben.
Ich habe den Code gerade getestet und leider erfüllt er nicht meine Vorstellungen. Vielleicht ist es technisch aber auch nicht möglich..
Der Code soll die Felder leeren aber ohne die Formel mit zu löschen.
Die Formel möchte ich gerne erhalten :)
Userbild
Folgender Coce der auf den Button liegt:
Private Sub CF_1_Button_Click()
Dim j As Integer
Dim i As Integer
For j = 1 To tblReal.Cells(Rows.Count, 1).End(xlUp).Row
If tblReal.Cells(j, 1).Value = tblSim.Cells(5, 2).Value Then
tblReal.Cells(j, 7) = tblSim.Cells(3, 5)
tblReal.Cells(j, 13) = tblSim.Cells(4, 9)
tblReal.Cells(j, 19) = tblSim.Cells(5, 13)
tblReal.Cells(j, 25) = tblSim.Cells(6, 6)
tblReal.Cells(j, 31) = tblSim.Cells(7, 6)
End If
Next j
With tblSim
On Error Resume Next
.Range("F3:F7").SpecialCells(xlCellTypeConstants).ClearContents
On Error GoTo 0
End With
End Sub
Viele Grüße
Christian
Anzeige
AW: Rückfrage
15.05.2017 21:12:44
Gerd
Hallo Christian,
du möchtest also den Wert aus F4 entfernen, aber die Formel darin belassen.
Sehe ich dies falsch?
Gruß Gerd
AW: Rückfrage
15.05.2017 21:25:46
Christian
Genau, in F3 bis F7 soll der Wert entfernt werden aber nur der Wert, die formatierung soll bleiben, die Formel... Alles so soll so bleiben nur der Wert soll gelöscht werden, als zeichen das die Daten übertragen wurden.
AW: Rückfrage erledigt-keine Lösung!
15.05.2017 21:36:09
Gerd
Hallo Christian,
das geht so leider nicht. Die Formel entfernen u. den Wert behalten wäre jedoch möglich.
Gruß Gerd
Die ursprüngliche idee
15.05.2017 21:44:19
Christian
Moin Gerd,
das hatte ich leider schon befürchtet... ach das ganze Thema ist auch nur eine Krücke weil ich die Arbeitstage nicht mit VBA berechnet bekomme.
Background: Ich habe fünf Datumswerte, der Nutzer gibt eine Anzahl an Tagen ein, diese werden dann den Datum drauf oder abgezogen.
Ich habe dazu auch mal ein Beispielprogramm hier hochgeladen, indem ich glaube ich einen guten Anfang geschafft habe. Aber ich qäul mich da eher durch und komme zu nichts.
Wenn du oder ihr mal rein schauen wollt. In der Beispieldatei geht es nur um ein Datum. Auf CF-1 soll eine Anzahl an Tagen drauf oder abgezogen werden.
https://www.herber.de/bbs/user/113600.xlsm
Viele Grüße
Christian
Anzeige
Mal so als Idee
16.05.2017 07:26:58
Daniel
Hi
Ergänze die Formeln in F3:F7 nach diesem Scheme:
=Wenn(F1="x";"";deine ursprüngliche Formel)
Wenn du die Daten übertragen hast, schreibe ein "x" in F1, wenn wieder neue Daten reinkomnen, mußt du es löschen.
Gruß Daniel
AW: Mal so als Idee
16.05.2017 10:10:24
Christian
Moin Daniel,
ja, das wäre durchaus eine Ersatzlösung... wobei ich mich gerade mit VBA abkämpfe und eine elegantere Lösung versuche hinzubekommen. Aber den Tipp halte ich auf jeden Fall in der Hinterhand
Viele Grüße
Christian

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige