Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1964to1968
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

hilfe beim vba code

hilfe beim vba code
10.02.2024 23:24:56
Andreas Schmitt
folgenden code habe ich zusammengebastelt. er funktioniert auch nur möchte dass sich die column befehlszeile immer dann um 1 erhöht wenn ich in der msgbox auf ja klicke

Private Sub Worksheet_Activate()

If Tabelle7.Range("B2").Value > "" Then
Dim Antwort As Integer
Antwort = MsgBox("Möchtest du das Ergebnis der Formeln auf Übersicht Ausgaben und Diagramm speichern ?", vbYesNoCancel + vbQuestion + vbDefaultButton2, "Frage")

If Antwort = vbYes Then
GoTo 1:
Else
GoTo 2:
End If
1:
anfang: Dim rngBereich As Range, iCalc As Integer

'Bereich wo sich die Formeln befinden, hier Spalte 1
Set rngBereich = Columns(3) diese 3 soll sich immer um 1 erhöhen wenn ich in der msgbox auf ja klicke.
On Error GoTo KeineFormeln:
'sind keine Formeln vorhanden, kommt es zum Fehler
Set rngBereich = rngBereich.SpecialCells(xlCellTypeFormulas)
On Error GoTo anfang:

With Application
iCalc = .Calculation
.ScreenUpdating = False
.EnableEvents = False
.Calculation = xlCalculationManual

' Formel wird durch festen Wert ersetzt,
' wenn diese als Ergebnis nicht leer liefert.
' Dies kann auch umgestellt oder erweitert werden
For Each rngBereich In rngBereich
If rngBereich > "" Then rngBereich.Value = rngBereich.Value
Next rngBereich

.Calculation = iCalc
.ScreenUpdating = True
.EnableEvents = True
End With

KeineFormeln:

End If


2:
End Sub

Bitte um Hilfe !!!

18
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
Kann als abschreckendes Beispiel dienen
11.02.2024 11:11:20
Oppawinni
Das Ganze ist offensichtlich ein Doppelpost und wurde / wird behandet.
Wenn ich den Code anschau, wird mir schon beim ersten Blick übel.
Goto's soweit das Auge reicht und dazu noch völlig unsinnig. Da bräuchte es stattdessen nur ein paar Exit Sub
Wozu braucht es eine MsgBox mit drei Knöpfen, wovon nur einer wirklich behandelt wird?
Sieht ziemlich planlos aus das Ganze.

AW: hilfe beim vba code
11.02.2024 12:07:38
Herbert Grom
Hallo Andreas,

probiers mal damit:

Option Explicit



Private Sub Worksheet_Activate()
Dim Antwort As Integer
Dim rngBereich As Range, iCalc As Integer, lCol&

lCol = 3

If Tabelle7.Range("B2").Value > "" Then
Antwort = MsgBox("Möchtest du das Ergebnis der Formeln auf Übersicht" & vbLf & _
"Ausgaben und Diagramm speichern ?", vbYesNoCancel + vbQuestion + vbDefaultButton2, "Frage")

If Antwort = vbYes Then lCol = lCol + 1
If Antwort = vbNo Then GoTo ende

anfang:
'Bereich wo sich die Formeln befinden, hier Spalte 1
Set rngBereich = Columns(lCol)
'sind keine Formeln vorhanden, kommt es zum Fehler
Set rngBereich = rngBereich.SpecialCells(xlCellTypeFormulas)
On Error GoTo anfang

With Application
iCalc = .Calculation
.ScreenUpdating = False
.EnableEvents = False
.Calculation = xlCalculationManual

' Formel wird durch festen Wert ersetzt,
' wenn diese als Ergebnis nicht leer liefert.
' Dies kann auch umgestellt oder erweitert werden
For Each rngBereich In rngBereich
If rngBereich > "" Then rngBereich.Value = rngBereich.Value
Next rngBereich

.Calculation = iCalc
.ScreenUpdating = True
.EnableEvents = True
End With
End If

ende:
End Sub


Servus

P.S.: @Oppawinni: Hilfe ist hier gefragt, nicht gemeckere!
Anzeige
AW: hilfe beim vba code
11.02.2024 15:00:38
Oppawinni
Bester Herbert Grom
Der Zweck meines Post war, darauf hinzuweisen, dass es sich hier um einen Doppelpost handelt und daher hier nicht noch einmal diskutiert werden muss,
konnte es mir dabei allerdings nicht verkneifen, meiner Erschütterung über den Code des TO Ausdruck zu verleihen.
Wenn Sie Herr Herbert Grom so auf Hilfe bedacht sind, wäre es vielleicht sinnvoll gewesen, die anderen Threads zu diesem Thema zu lesen.
Guten Morgen
AW: hilfe beim vba code
11.02.2024 18:06:23
Oberschlumpf
ey!

kannste ma wieder ... runterkommen?!!!

Es kann doch jeder überall, wo man will, antworten - tust du ja auch!

und deine Hinweise, von wegen planlos usw..., müssen auch nich unbedingt sein - zumindest nich so unfreundlich!

Und wenn du noch immer nich kapiert hast, wieso der Code so "planlos" ist, dann schau dir doch einfach mal den Erfahrungslevel des Fragenden an!
Na, hassu jetze verstanden????
Anzeige
AW: hilfe beim vba code
11.02.2024 19:49:39
Oppawinni
1. Bei mir war der Thread noch als offen gekennzeichnet. Da dacht ich, is ja Quatsch, wird doch schon an zwei Stellen diskutiert, machst du da was rein, damit das Thema da nicht mehr als offen markiert ist und hier nicht auch noch behandelt wird. Aber offenbar hab ich leider gerade das genaue Gegenteil erreicht.
2. Planlos bedeutet soviel wie OHNE PLAN, etwa nicht? Also ich kann den Plan hinter dem Code des TO jedenfalls nicht erkennen, insofern habe ich in einem der anderen Threads auch explizit nach nem Plan gefragt. Der eilige User hat aber wohl schon länger keine Lust mehr.
3. Das Thema schien für den TO ohnehin schon gegessen und ich werde auch nie von einem User verlangen, dass er sich bedankt.
Guten Abend
Anzeige
AW: Denke groß
11.02.2024 12:50:29
Sulprobil
Hallo Andreas,

Ich denke, Du kannst vielleicht noch nicht so gut einschätzen, welche Art Hilfe Du wirklich benötigst und von wem Du hier welche Form von Hilfe erhoffen kannst.

Welches Problem soll bitte Deine Excel Datei lösen bzw. welchen betrieblichen Prozess soll sie unterstützen?

Deine Programmierkenntnisse sind offensichtlich noch nicht ausreichend (kleiner Seitenhieb: die von 90% der Antworter hier auch nicht). Ich kann Dir zunächst nur empfehlen, die allgemein benötigte Lösung zu beschreiben und nicht mit extrem speziellen VBA Kommandos loszulegen (Beispiel: auto_open kommt erst ganz am Ende eines Projektes, wenn überhaupt).

(Und lass' Dich bitte nicht von den Mikro-Kinskis hier zu Dankesbezeugungen zwingen, wenn Du nicht wirklich das Gefühl hast, es sei Dir geholfen worden. Wer wirklich helfen will, braucht kein Danke und fordert es schon gar nicht ein.)
Anzeige
AW: hilfe beim vba code
11.02.2024 19:38:59
Andreas Schmitt
Danke Piet.

es funktioniert aber leider nicht .
kannst du mir mal den kompletten code schicken bitte.
wäre nett.
AW: hilfe beim vba code
11.02.2024 21:52:05
Piet
Hallo Andreas

,@Oppawinni da hast du dich aber mächtig ins Zeug gelegt um einen Code zu entwickeln, alle Achtung.

Ich liebäugele lieber mit meinem grossen Vorbild -snb- ein Profi der für seine Einzeiler Lösungen berühmt ist!
Mein Code ist länger, aber so geschrieben, das Andreas ihn hoffentlich auch verstehen wird. Ich hoffe es zumindest.
Der Code arbeitet mit Do Loop und benötigt dafür die LastSpalte in Zeile1. Sollte sie in einer andern Zeile sein bitte ändern!
Ich arbeite normalerweise nicht mit Select, hier bietet es sich aber als rein optische Hilfe von selbst an!

Das Makro springt alle Spalten mit Formeln an, und fragt ob diese Formeln in Werte gewandelt werden sollen.
Bei Nein springt das Makro zur nächsten Spalte, bei Abbrechen wird der Code abgebrochen.
Sollte Tabelle3 als Zieltabelle falsch sein musst das das bitte selbst korrigieren.

Ich hoffe der Code hilft dir weiter, sonst musst du mir die Aufgbe bitte noch einmal genau erklären.
Ob der Code von Opawinni besser ist habe ich nicht getestet. Das überlasse ich dir.

mfg Piet



Sub Spalten_inWerte_wandeln()
Dim Antwort As Integer, s, lsp As Long
If ActiveSheet.Name = "Tabelle3" Then
'LastSpalte in Zeile 1 suchen
lsp = Cells(1, Columns.Count).End(xlToLeft).Column
s = 3 '1. Columne in Tabelle3
Do Until s > lsp 'Wiederholen bis LastSpalte
On Error Resume Next
Set rngBereich = Columns(s).SpecialCells(xlCellTypeFormulas)
Columns(s).Select '** Select nur für optische Kontrolle
If Err = 0 Then
Antwort = MsgBox("Möchtest du das Ergebnis der Formeln als Werte speichern ?" & _
vbLf & "gewählter Bereich: Spalte " & s & " " & rngBereich.Address(0, 0), vbYesNoCancel + vbQuestion + vbDefaultButton2, "Frage")
If Antwort = vbCancel Then Exit Sub 'Programm Ende!!
If Antwort = vbYes Then rngBereich.Value = rngBereich.Value
End If
Err.Clear: s = s + 1 'Next Spalte
Loop
End If
End Sub
Anzeige
AW: Sorry, ich bin raus!! oWt
12.02.2024 01:20:59
Piet
---
Thema erledigt
12.02.2024 10:51:03
Oppawinni
Nur damit hier nicht noch ein paar Threads mit diesem Thema geöffnet werden.
Es ging darum, eine Zähler zu haben, der bei jedem Aufruf des Makros, falls die MsgBox bestätigt wird, also Formeln durch Werte ersetzt werden, hochgezählt wird.
Der Wert muss natürlich ggf. irgendwo außerhalb des Macros gespeichert werden.
Da gibt es mehrere Möglichkeiten. Man könnte dafür z.B. eine Zelle nehmen, die hinter dem Diagramm liegt Tabelle4.Range("E22"):
Leider nicht ganz der Code des TO, um bei mir den Brechreiz zu vermeiden. TaTaa TaTaa TaTaaaaa



Private Sub Worksheet_Activate()

Dim rngToCheck As Range
Dim rngCounter As Range
Dim lngCounter As Long

'Variable für einfachere Pflege des Codes
Set rngToCheck = Tabelle7.Range("B2") 'Nur wenn diese Zelle nicht "" ist, soll das Macro etwas tun
Set rngCounter = ActiveSheet.Range("E22") 'Zählerzelle versteckt hinter dem Diagramm

Const cMinCounter = 3 'Minimaler Wert des Zählers
Const cMaxCounter = 8 'Maximaler Wert des Zählers

'Zähler ggf. initalisieren
If IsEmpty(rngCounter) Then rngCounter = cMinCounter
'Zählerwert holen
lngCounter = rngCounter.Value

If rngToCheck = "" Then
Exit Sub
End If

Dim lngAntwort As Long

lngAntwort = MsgBox("Möchtest du die Ergebnisse der Formeln der Spalte " & lngCounter & " speichern ?", vbYesNoCancel + vbQuestion, "Frage")

If Not lngAntwort = vbYes Then
Exit Sub
End If

Dim rngBereich As Range
Dim rngCell As Range
Dim iCalc As Integer
'Zählerwert für den nächsten Durchlauf setzen
If rngCounter.Value = cMaxCounter Then
rngCounter.Value = rngCounter.Value + 1
Else
rngCounter.Value = cMinCounter
End If

With Application
iCalc = .Calculation
.ScreenUpdating = False
.EnableEvents = False
.Calculation = xlCalculationManual
End With

'Bereich wo sich die Formeln befinden, hier Spalte 1
Set rngBereich = ActiveSheet.Columns(lngCounter) 'diese Spalte soll sich bei jedem Aufruf des Macros um 1 erhöhen wenn in der msgbox "ja" gewählt wird.
On Error Resume Next
Set rngBereich = rngBereich.SpecialCells(xlCellTypeFormulas)
If Err = 0 Then
' Formel wird durch festen Wert ersetzt,
' wenn diese als Ergebnis nicht leer liefert.
' Dies kann auch umgestellt oder erweitert werden
For Each rngCell In rngBereich
If rngCell > "" Then rngCell = rngCell.Value
Next
End If

With Application
.Calculation = iCalc
.ScreenUpdating = True
.EnableEvents = True
End With

End Sub
Anzeige
AW: hilfe beim vba code
11.02.2024 23:14:14
Andreas Schmitt
Hallo Piet.

nein hat mir nicht geholfen .
halte dich bitte an den vorgegebenen code.
bei deinem geht die msgbox nicht auf.
schick mir nochmal den richtigen code bitte .

VG Andreas
AW: hilfe beim vba code
12.02.2024 01:05:09
Oppawinni
Ich denke, ich weiß jetzt was das Ziel ist.
Der TO möchte, dass das Macros (das er ja ursprünglich bei Workbook_Open stehen hatte, also nie zweimal aufgerufen wurde,
aber jetzt wohl bei Worksheet_Activate() (von Tabelle4) stehen hat, dass dieses Makro, beim NÄCHSTEN AUFRUF
die nächste Spalte prüft und ggf. Formeln ersetzt werden. Natürlich nur, wenn da jeweils die MsgBox bestätigt wurde.
Dazu dürfte es einer globalen Variablen bedürfen.
Es braucht für den Ersatz einzelner Formeln keine eigene MsgBox.
Wow, für so einen Bimbelkram braucht es zig Threads. TaTaa TaTaa TaTaa
Das war es für mich jetzt wirklich.
Anzeige
AW: hilfe beim vba code
11.02.2024 20:14:12
Oppawinni
Würdest du bitte die Güte haben, verbal zu beschreiben, was du mit deinem Code erreichen willst.

Für mich sieht es mittlerweile so aus, also wolltest du..
abhängig von einem Wert in Tabelle 7 den Anwender beim Start fragen, ob er in Tabelle 4, Zeile 18 die Formeln Werte gewandelt haben möchte.
Dann ist dieses Blatt aber für den User wahrscheinlich nicht sichtbar. Kann der User das dann entscheiden, frag ich mich da.
Wenn er entschieden hat, sollen dann dort alle Formeln einfach durch Werte ersetzt werden, oder jeweils erst nochmal der User gefragt werden...

Wie gesagt, dein Code hilft nicht viel, um zu verstehen, was du erreichen willst.

Anzeige
AW: hilfe beim vba code
11.02.2024 20:36:04
Andreas Schmitt
Hallo Piet

deine Ergänzung zum Code hat leider nicht funktioniert.
kannst du mir bitte mal den kompletten code von dir schicken.
wäre nett.

VG Andreas
AW: Was Piet meinte war wohl
11.02.2024 21:49:44
Oppawinni
etwa sowas, falls du deinen Code nicht total ändern willst.
Funktioniert nicht, sagt halt auch nicht soo viel, insbesondere dann nicht, wenn man nicht genau weiss, was eigentlich passieren soll....



Private Sub Worksheet_Activate()

If Tabelle7.Range("B2").Value = "" Then
Exit Sub
End If

Dim Antwort As Integer
Antwort = MsgBox("Möchtest du das Ergebnis der Formeln auf Übersicht Ausgaben und Diagramm speichern ?", vbYesNoCancel + vbQuestion + vbDefaultButton2, "Frage")

If Antwort > vbYes Then
Exit Sub
End If

Dim rngBereich As Range
Dim rngResult As Range
Dim rngCell As Range
Dim lngCol As Long
Dim iCalc As Integer

With Application
iCalc = .Calculation
.ScreenUpdating = False
.EnableEvents = False
.Calculation = xlCalculationManual
End With

lngCol = 3

anfang:

'Bereich wo sich die Formeln befinden, hier Spalte 1
Set rngBereich = Columns(lngCol) 'diese 3 soll sich immer um 1 erhöhen wenn ich in der msgbox auf ja klicke.
lngCol = lngCol + 1

On Error GoTo KeineFormeln:
'sind keine Formeln vorhanden, kommt es zum Fehler
Set rngResult = rngBereich.SpecialCells(xlCellTypeFormulas)

On Error GoTo anfang:
' Formel wird durch festen Wert ersetzt,
' wenn diese als Ergebnis nicht leer liefert.
' Dies kann auch umgestellt oder erweitert werden
For Each rngCell In rngResult
If rngCell > "" Then rngCell = rngCell.Value
Next

KeineFormeln:

With Application
.Calculation = iCalc
.ScreenUpdating = True
.EnableEvents = True
End With

End Sub
Anzeige
AW: Denke groß
11.02.2024 13:59:02
Piet
Hallo

nun ja, eine Menge Informationen was du richtig oder falsch machst, inklusive der Ratgeber im Forum.

Über deinen Code brauchen wir nicht zu diskutieren, da habe ich bereits andere Vorschläge gemacht.
Wenn du aber an deinem kuriosen Code festhalten willst, warum auch immmer, hier trotzdem eine Lösung.
Setze am Code Anfang die Variable s auf drei, benutze bei Set die s Variable, und erhöhe sie bei jeder MsgBox um 1.
Das ganze bleibt trotzdem Kuddel Muddel, aber wenigstens könnte es damit klappen.

Rückantwort ob es geholfen hat wäre trotzdem nett.

mfg Piet



s = 3 '1. Column auf 3 setzen
Set rngBereich = Columns(s)
s = s + 1

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige