Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Anzeige
Inhaltsverzeichnis

VBA - Spaltenbreite abhängig von Art des Aufrufs

Forumthread: VBA - Spaltenbreite abhängig von Art des Aufrufs

VBA - Spaltenbreite abhängig von Art des Aufrufs
01.03.2026 08:12:44
Christian
Hallo, ich bitte euch um Hilfe.
Bei nachstehendem Makro.

Ist es möglich, dass wenn ich es per Call UpdateCheck aus dem Makro namens drittesMakro heraus aufrufe, das dann und auch nur dann für Update!F die Spaltenbreite 10,42 gelten soll.
Ansonsten sollen auch für Spalte F die bieherigen Regeln gelten?

Geht das?
Danke
Christian

Call UpdateCheck

Option Explicit


Public Sub UpdateCheck()

Dim ws As Worksheet
Dim v As Variant
Dim i As Long
Dim calcState As XlCalculation

'Performance-Boost
With Application
.ScreenUpdating = False
.EnableEvents = False
calcState = .Calculation
.Calculation = xlCalculationManual
End With

Set ws = ThisWorkbook.Worksheets("Update")

'Bereich in Array laden (1 Zugriff statt 27)
v = ws.Range("A1:AA1").Value2

'Ultra-schnelle Prüfung
For i = 1 To 27

If LenB(v(1, i)) = 0 Then
ws.Columns(i).ColumnWidth = 10.08
Else
ws.Columns(i).AutoFit
End If

Next i

CleanExit:
'Alles sauber zurücksetzen
With Application
.Calculation = calcState
.EnableEvents = True
.ScreenUpdating = True
End With

End Sub
Anzeige

13
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: VBA - Spaltenbreite abhängig von Art des Aufrufs
01.03.2026 08:32:58
Alwin Weisangler
Hallo Christian,

Ich habe hier leider nur ein Tablett zur Hand. Deshalb kein Code, aber ein Weg: Parametrisiere einfach diese Prozedur, dann kannst du im Aufruf den gewünschten Wert im entsprechenden Parameter mitgeben.

Gruß Uwe
AW: VBA - Spaltenbreite abhängig von Art des Aufrufs
01.03.2026 12:08:07
snb
Sub M_snb_000()

M_snb 0
End Sub


Sub M_snb(Optional y)

With Sheets("Update").Columns(1).Resize(, 27)
.AutoFit

sn = .Rows(1)
For jj = 1 To UBound(sn, 2)
If sn(1, jj) = "" Then c00 = c00 & "," & Chr(64 + jj) & 1
Next

.Range(Mid(Replace(c00, "[", "AA"), 2)).EntireColumn.ColumnWidth = 10.08
If Not IsMissing(y) Then .Columns(6).ColumnWidth = 10.42
End With
End Sub


Anzeige
AW: VBA - Spaltenbreite abhängig von Art des Aufrufs
02.03.2026 11:12:39
snb
Reicht schon:

Sub M_snb(y)

With Columns(1).Resize(, 27)
.AutoFit
.Rows(1).SpecialCells(4).ColumnWidth = 10.09
If Not IsMissing(y) Then .Columns(6).ColumnWidth = 12.07
End With
End Sub

AW: VBA - Spaltenbreite abhängig von Art des Aufrufs
01.03.2026 17:15:54
Christian
Hallo SNB,

ich hoffe ich habe deinen Vorschlag verstanden,

1. M_snb_000 das nur die Hauptroutine aufruft,

2. allle Spaltenbreiten Autofit

3. erste Zeile in Array laden

4. leere Zeilen in der ersten Reihe sammeln

5. Spaltenbreite = 10.08 wenn Zelle leer ist

6. Breite F = 10.08 wenn Parameter übergeben wurde.

Und ich kann dann weil y optinal ist, entscheiden, welche der beiden Subs ich starte,,,

Hoffe ich habs richtig verstanden, weil wenn ja, könnte das wirklich eine Lösung sein. Ich werde es gleich mal testen...

Gruß
Christian
Anzeige
AW: VBA - Spaltenbreite abhängig von Art des Aufrufs
01.03.2026 17:26:51
snb
""Und ich kann dann weil y optinal ist, entscheiden, welche der beiden Subs ich starte,,,""

Du startest immer M_snb_000 entweder als

M_snb
oder
M_snb 'etwas'
AW: VBA - Spaltenbreite abhängig von Art des Aufrufs
01.03.2026 18:37:29
snb
Alternative.

Sub M_snb_000()

M_snb
End Sub


Sub M_snb(Optional y)

With Sheets("Update").Columns(1).Resize(, 27)
.AutoFit

sp = [transpose(address(1,row(1:27)))]
sn = .Rows(1)
For jj = 1 To UBound(sn, 2)
If sn(1, jj) > "" Then sp(jj) = ""
Next

.Range(Join(Filter(sp, "$"), ",")).EntireColumn.ColumnWidth = 10.08
If Not IsMissing(y) Then .Columns(6).ColumnWidth = 10.42
End With
End Sub

Anzeige
AW: VBA - Spaltenbreite abhängig von Art des Aufrufs
01.03.2026 17:30:30
Christian
ja gut, hatte zum Testen im Editor mit F8 die beiden Subs durchlaufen lassen und wenn ich mit M_snb_000 begonnen habe wurde die Breite F geändert, wenn ich mit dem anderen begonnen habe, nicht
funktioniert...
01.03.2026 17:19:18
Christian
wie gesagt funktioniert, vielen Dank

an Ralf und Uwe,

sorry für meine dann falschen Einwände, dass man Parameter auch optional machen kann habe ich einfach nicht gewusst.

Gruß
Christian
Anzeige
AW: VBA - Spaltenbreite abhängig von Art des Aufrufs
01.03.2026 08:49:07
Christian
Hallo Uwe,

das war mein ursprünglicher Plan, bevor ich hier gepostet hatte. Problem ist, ich kann das Makro dann nicht mehr unabhängig von anderen Makros ausführen, weil dann der Parameter fehlt. Dazu bräuchte ich dann ein zweites Makro.

Und wenn ich schon ein zweites Makro mache, kann ich mir das mit den Parametern auch sparen und mir das zweite von vorneherein so programmieren, wie ich es will.

Aber wenn es nicht anders geht nehme ich dann wohl die zweite Lösung.

Danke
Christian

und noch einen schönen Sonntag
Anzeige
AW: VBA - Spaltenbreite abhängig von Art des Aufrufs
01.03.2026 09:45:08
Alwin Weisangler
Hallo Christian,

doch eben genau dieser Weg macht es ja gerade möglich, aus einer anderen Prozedur heraus mit dem gewünschten Parameter diese aufzurufen.

Gruß Uwe
AW: VBA - Spaltenbreite abhängig von Art des Aufrufs
01.03.2026 17:04:36
Christian
Hallo Uwe,

ja das habe ich verstanden. Mein Einwand war, dass ich es dann eben nicht mehr seperat ohne andere Prozedur starten kann, bzw. dafür dann ein seperates Makro bräuchte.

Gruß
Christian
Anzeige
AW: VBA - Houston calling
01.03.2026 09:51:37
GerdL
Moin Christian,

es geht.
Option Explicit



Public Sub UpdateCheck(Optional F1042 As Variant)

Dim ws As Worksheet
Dim v As Variant
Dim i As Long
Dim calcState As XlCalculation

'Performance-Boost
With Application
.ScreenUpdating = False
.EnableEvents = False
calcState = .Calculation
.Calculation = xlCalculationManual
End With

Set ws = ThisWorkbook.Worksheets("Update")

'Bereich in Array laden (1 Zugriff statt 27)
v = ws.Range("A1:AA1").Value2

'Ultra-schnelle Prüfung
For i = 1 To 27

If LenB(v(1, i)) = 0 Then
If Not IsMissing(F1042) And i = 6 Then
ws.Columns(i).ColumnWidth = F1042
Else
ws.Columns(i).ColumnWidth = 10.08
End If
Else
ws.Columns(i).AutoFit
End If

Next i

CleanExit:
'Alles sauber zurücksetzen
With Application
.Calculation = calcState
.EnableEvents = True
.ScreenUpdating = True
End With

End Sub
Sub zweitesMakro()
Call UpdateCheck
End Sub
Sub drittesMakro()
Call UpdateCheck(10.42)
End Sub

Gruß Gerd
Anzeige
AW: VBA - Houston calling
01.03.2026 17:08:23
Christian
Hallo Gerd,

danke für deine Antwort.
Wie ich schon Uwe sagte, damit habe ich das Problem, dass ich das Makro nicht mehr seperat also unabhängig von einer anderen Prozedur aufrufen kann, weil dann die Parameter fehlen.

Dazu bräuchte ich dann ein seperates Makro und wenn ich schon ein zweites Makro mache kann ich auch direkt eins schreiben, in dem ws.Columns("F").ColumnWidth = 10.42 steht, dann brauche ich den Umweg über die Parameter nicht mehr

Gruß
Christian

"und warum die Anspielung auf Apollo 13"?
Anzeige

Forumthreads zu verwandten Themen

Anzeige
Anzeige