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

VBA

VBA
07.09.2023 17:43:25
famo
wie kann ich eine info erhalten welche spalte ####### anzeigt. Das Arbeitsblatt wird von Laien bedient. Ich will dazu ein vba Makro schreiben bei dem man nur mit klick die Spalte breiter macht. mir genügt es nur wenn ich einen Zellstatus oder sowas erhalte der mir sagt in spalte x steht an zeile y ##########. Das Makro bau ich mir dann schon selbst zusammen

vorab besten Dank

5
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: VBA
07.09.2023 17:53:13
Fennek
Hallo,

mit "Cells(i,j).Text" wird "######" anstelle des Werts angezeigt. Versuche


Dim rng As Range
Set rng = ActiveSheet.Cells.Find("####", , xlValues, xlPart)


mfg
AW: VBA Spaltenbreite
07.09.2023 18:23:58
Yal
Hallo Famo,

Du möchtest bestimmt die Spalten, die "###" haben, verbreiten, aber nicht gleichzeitig andere Spalte schmaller machen.
Sonst wäre Autofit die Lösung.

Alternativ wäre, Breite lesen, Autofit, Breite zurückstellen, falls schmaller geworden:

Sub Spaltenbreite_korrigieren()

Dim i
Dim SpB() As Single

ReDim SpB(1 To ActiveSheet.UsedRange.Columns.Count)
'aktuelle Breite merken
For i = 1 To ActiveSheet.UsedRange.Columns.Count
SpB(i) = Columns(i).ColumnWidth
Next
'Breite automatisch setzen
ActiveSheet.UsedRange.Columns.AutoFit
'Spalten, die schmaller gestellt wurden, auf originale Breite wiedereinstellen
For i = 1 To ActiveSheet.UsedRange.Columns.Count
Columns(i).ColumnWidth = WorksheetFunction.Max(SpB(i), Columns(i).ColumnWidth)
Next
End Sub


VG
Yal
Anzeige
AW: VBA
07.09.2023 20:13:31
daniel
Hi
alle Spalten mit einer Zelle mit # am Anfang verbreitern bis das # verschwindet:

Dim Zelle As Range

Do
Set Zelle = Cells.Find(what:="##*", lookat:=xlWhole, LookIn:=xlValues)
If Zelle Is Nothing Then Exit Do
Zelle.EntireColumn.AutoFit
Loop

das Tabellen blatt darf aber keinen Text mit "##" am Anfang enthalten, denn die bleiben ja und dann hast du eine Endlosschleife
Gruß Daniel
AW: VBA
08.09.2023 11:20:22
Yal
Sollte zufälligerweise irgendeinen Eintrag, der tatsächlich mit "##" anfängt (ohne dass es durch Spaltenbreite verursacht wurde), hast Du damit eine schöne Endlosschleife.
Unwahrscheinlich, gebe ich zu. Aber im Hinterkopf zu behalten.

Trotz sehr lange Programmiererfahrung (oder veilleicht deswegen) baue ich inzwischen Fallschirmklausel in Do Loop-Schleifen:
Dim Zelle As Range

Dim F 'Fallschirm
Do
F = F + 1
Set Zelle = Cells.Find(what:="##*", lookat:=xlWhole, LookIn:=xlValues)
If Zelle Is Nothing Or F > 1000000 Then Exit Do
Zelle.EntireColumn.AutoFit
Loop


VG
Yal
Anzeige
AW: VBA
08.09.2023 11:42:19
daniel
Hi
ja kann man nachen, wobei ich, wenn ich so eine Endlosscheifen absicherung haben will, das DO durch FOR ersetze.

For x = 1 to 100000

set Zelle = Cells.Find(....)
if Zelle is Nothing then Exit for
Zelle.EntireColumn.autofit
Next

das nächste problem wäre dann aber, dass ggf nach dem Text die folgenden Spalten nicht mehr gefunden werden, weil die suche immer den Text mit ## findet.
hier müsste man dann auch noch sicherstellen, dass die Suche auch die danach liegenden Zellen finden kann:
set Zelle = Cells.Find(what:="##", After:=Zelle...)


eine andere Möglichkeit,das Problem zu lösen wäre, dass man die Suche gleich auf die Zellen mit Zahlen einschränkt, dann werden Zellen mit Text gar nicht erst in die Suche einbezogen.
Do

set Zelle Cells.SpecialCells(xlcelltypeconstants, 1).Find(what:="#", ...)
...
Loop

Problem hierbei ist, dass man hierbei auch unterscheiden muss, ob Konstante (xlcelltypeconstants) oder Formeln (xlcelltypeformulas) vorliegen.
kommt beides vor, muss man den Code für beide Varianten getrennt ausführen.

Gruß Daniel

Anzeige

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige