Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

Spaltenbreite in Pixel

86 views
Skip to first unread message

Manfred Fritz

unread,
Apr 1, 2010, 3:20:50 AM4/1/10
to
Hallo leute

Hab noch ein problem.

ich ben�tige den Umrechnungsfaktor, von der spaltenbreite auf Pixel, bzw.
kann man die pixelangane irgendwie Auslesen?

mfg Manfred


Peter Schleif

unread,
Apr 1, 2010, 3:45:26 AM4/1/10
to
Manfred Fritz schrieb am 01.Apr.2010 09:20 Uhr:
>
> ich benötige den Umrechnungsfaktor, von der spaltenbreite auf Pixel, bzw.
> kann man die pixelangane irgendwie Auslesen?

MsgBox SpaltenbreiteInPixel(Range("A:A"))

Peter

Private Declare Function GetDC Lib "user32" ( _
ByVal hwnd As Long) As Long

Private Declare Function GetDeviceCaps Lib "gdi32" ( _
ByVal hdc As Long, ByVal nIndex As Long) As Long

Private Declare Function ReleaseDC Lib "user32" ( _
ByVal hwnd As Long, ByVal hdc As Long) As Long

Function SpaltenbreiteInPixel(r As Range) As Integer
Dim faktorX As Double
Dim faktorY As Double
Dim dc As Long

dc = GetDC(0)
faktorX = GetDeviceCaps(dc, 88) / 72
faktorY = GetDeviceCaps(dc, 90) / 72
ReleaseDC 0, dc

SpaltenbreiteInPixel = _
CInt((ActiveWindow.PointsToScreenPixelsX(r.Width) _
- ActiveWindow.PointsToScreenPixelsX(0)) * faktorX)
End Function

Manfred Fritz

unread,
Apr 1, 2010, 4:33:13 AM4/1/10
to
danke peter

mfg Manfred

"Peter Schleif" <peter....@gmx.de> schrieb im Newsbeitrag
news:hp1ium$auj$1...@news.eternal-september.org...


> Manfred Fritz schrieb am 01.Apr.2010 09:20 Uhr:
>>

>> ich ben�tige den Umrechnungsfaktor, von der spaltenbreite auf Pixel, bzw.

Manfred Fritz

unread,
Apr 1, 2010, 6:58:01 AM4/1/10
to
2. Frage
kann man eine zahl in Width zur�ckgeben:
r.Width =breite ??????
bei mir gehts ned
w�rde es zum spaltenbreitendefinieren brauchen


"Manfred Fritz" <manfre...@magwien.gv.at> schrieb im Newsbeitrag
news:12701109...@proxy.dienste.wien.at...

Bernhard Sander

unread,
Apr 1, 2010, 7:44:37 AM4/1/10
to
Hallo Manfred,

> 2. Frage
> kann man eine zahl in Width zurückgeben:
> r.Width =breite ??????
Setze mal den Cursor im VBA-Editor auf das Wort Width und drück F1.
Da steht erläutert, wann Schreib-Lesezugriff besteht und wann nur Lesezugriff.

Gruß
Bernhard Sander

Peter Schleif

unread,
Apr 1, 2010, 8:06:46 AM4/1/10
to
Manfred Fritz schrieb am 01.Apr.2010 12:58 Uhr:
> 2. Frage
> kann man eine zahl in Width zurückgeben:
> r.Width =breite ??????

Die Breite stellst Du mit r.ColumnWidth = ?????? ein

Peter

Manfred Fritz

unread,
Apr 1, 2010, 9:37:03 AM4/1/10
to
gibt es da einen umrechnungsfaktor?
von r.width auf r.ColumnWidth

will nämlich wenn man pixel eingibt sich die spaltenbreite ändert


"Peter Schleif" <peter....@gmx.de> schrieb im Newsbeitrag

news:hp228l$69j$1...@news.eternal-september.org...

Peter Schleif

unread,
Apr 1, 2010, 9:58:58 AM4/1/10
to
Manfred Fritz schrieb am 01.Apr.2010 15:37 Uhr:
>
> von r.width auf r.ColumnWidth
>
> will nämlich wenn man pixel eingibt sich die spaltenbreite ändert

.ColumnWidth hat wieder einen anderen Umrechnungs-Faktor als .Width
Die wird in Characters gemessen. Frag' mich bitte nicht warum. :-)

Hatte ohnehin eine unnötig komplizierte Funktion gepostet, die Teil
eines Projekts war, bei dem die absolute Bildschirm-Position einer Zelle
berechnen werden musste. Das ist etwas aufwendiger als nur die Breite
und ich habe den komplizierteren Original-Code nicht ausreichend
bereinigt. Ich bitte dies zu entschuldigen.

Hier die Funktionen zum Umrechnen und eine Hilfsfunktion für die
Auslösung. Die drei Declare-Function-Anweisung habe ich nicht nochmal
notiert:

- Width in Pixel
- Pixel in ColumnWidth
- Width in ColumnWidth
- Hilfsfunktion dpi

Peter


'3x Private Declare Function .... wie gehabt

Function WidthToPixel(ByVal breite As Double) As Integer
WidthToPixel = CInt(breite * dpi / 72)
End Function

Function PixelToColumnWidth(ByVal breite As Integer) As Double
PixelToColumnWidth = CDbl(breite * 13 / dpi)
End Function

Function WidthToColumnWidth(ByVal breite As Double) As Double
WidthToColumnWidth = CDbl(breite * 13 / 72)
End Function

Function dpi(Optional direction As String = "x") As Integer
Dim dc As Long

dc = GetDC(0)
dpi = IIf(direction="x",GetDeviceCaps(dc,88),GetDeviceCaps(dc,90))
ReleaseDC 0, dc
End Function

Manfred Fritz

unread,
Apr 2, 2010, 12:35:55 AM4/2/10
to
vielen dank Peter

was würde ich nur ohne dich machen =)

auf das wäre ich nie gekommen.
seit 1 Jahr beschäftige ich mich mit makros (schon fast meine tägliche
arbeit) und mache immer aufwendigere und kleinere makros aber so was
übersteigt noch meinen horizont. -.-

mfg Manfred


"Peter Schleif" <peter....@gmx.de> schrieb im Newsbeitrag

news:hp28r0$k5b$1...@news.eternal-september.org...

Manfred Fritz

unread,
Apr 2, 2010, 2:27:28 AM4/2/10
to
geht das auch mit der zeilenh嚙篁e ?

"Manfred Fritz" <manfre...@magwien.gv.at> schrieb im Newsbeitrag

news:12701829...@proxy.dienste.wien.at...
> vielen dank Peter
>
> was w嚙緝de ich nur ohne dich machen =)
>
> auf das w嚙緝e ich nie gekommen.
> seit 1 Jahr besch嚙篆tige ich mich mit makros (schon fast meine t嚙篇liche

> arbeit) und mache immer aufwendigere und kleinere makros aber so was

> 嚙箭ersteigt noch meinen horizont. -.-


>
> mfg Manfred
>
>
> "Peter Schleif" <peter....@gmx.de> schrieb im Newsbeitrag
> news:hp28r0$k5b$1...@news.eternal-september.org...
>> Manfred Fritz schrieb am 01.Apr.2010 15:37 Uhr:
>>>
>>> von r.width auf r.ColumnWidth
>>>

>>> will n嚙練lich wenn man pixel eingibt sich die spaltenbreite 嚙緯dert


>>
>> .ColumnWidth hat wieder einen anderen Umrechnungs-Faktor als .Width
>> Die wird in Characters gemessen. Frag' mich bitte nicht warum. :-)
>>

>> Hatte ohnehin eine unn嚙緣ig komplizierte Funktion gepostet, die Teil


>> eines Projekts war, bei dem die absolute Bildschirm-Position einer Zelle
>> berechnen werden musste. Das ist etwas aufwendiger als nur die Breite
>> und ich habe den komplizierteren Original-Code nicht ausreichend
>> bereinigt. Ich bitte dies zu entschuldigen.
>>

>> Hier die Funktionen zum Umrechnen und eine Hilfsfunktion f嚙緝 die
>> Ausl嚙編ung. Die drei Declare-Function-Anweisung habe ich nicht nochmal

Peter Schleif

unread,
Apr 2, 2010, 4:01:01 AM4/2/10
to
Manfred Fritz schrieb am 02.Apr.2010 08:27 Uhr:
> geht das auch mit der zeilenhöhe ?

Bei der Höhe gibt es keinen Unterschied zwischen Height und RowHeight.
Die Umrechnung Pixel->Height ist wie bei Width. Die umgekehrte Richtung
ist einfach die Umkehrfunktion. PixelToHeight und PixelToRowHeight sind
identisch.

Function HeightToPixel(ByVal hoehe As Double) As Integer
HeightToPixel = CInt(hoehe * dpi / 72)
End Function

Function PixelToHeight(ByVal hoehe As Integer) As Double
PixelToHeight = CDbl(hoehe * 72 / dpi)
End Function

Function PixelToRowHeight(ByVal hoehe As Integer) As Double
PixelToRowHeight = CDbl(hoehe * 72 / dpi)
End Function


Peter

0 new messages