2016-11-28 7 views
1

Ich programmiere derzeit ein wenig VBA-Code in einer Excel-Arbeitsmappe, um automatisch Protokolle anzuzeigen. Also habe ich 2 Blätter in meinem Arbeitsbuch. einer von ihnen zeigt die aktuellen Protokolle, geordnet nach Notfällen. Der andere zeigt die neuen Protokolle für die angegebene Abteilung. Die Arbeitsmappe ist mit unserer Protokolldatenbank verbunden und aktualisiert die Daten alle 5 Minuten über eine Ansicht in der SQL-Datenbank. Meine Frage ist derzeit, ich habe die Zeile Höhe auf meinen Bildschirm eingestellt. Ich muss sicherstellen, dass die Zeilenhöhe dynamisch eingestellt ist, um immer die gleiche Anzahl an Zeilen anzuzeigen. Wenn ein Benutzer zum Beispiel 5 Zeilen sehen möchte, möchte ich, dass er das kann (über das Formular, das ich erstellt habe). Ich würde dann eine Schriftrolle für 5 Zeilen verwenden. Also hier ist mein Code:Fit X Zeilen auf Excel mit VBA

'Check how many "Urgent" Logs are showing 
Dim XRange As Range 
    Set XRange = Cells(Rows.Count, 4).End(xlUp) 
    Set XRange = Range(Range("C1"), XRange) 
    AnswerUrgent = Application.CountIf(XRange, "Urgent") 

'Check how many "High" Logs are showing 
Dim YRange As Range 
    Set YRange = Cells(Rows.Count, 4).End(xlUp) 
    Set YRange = Range(Range("C1"), YRange) 
    AnswerHigh = Application.CountIf(YRange, "High") 

'Check how many logs to show 
    TotalAns = AnswerUrgent + AnswerHigh 

    For X = 1 To (Round(TotalAns/4) + 1) 
    If X > 1 Then 
     ActiveWindow.SmallScroll Down:=ScrollBy '(move down by 4 rows) 
    End If 

'Responsive sleep is to sleep and do events after each 250MS so the form will be 
'accessible 
' *4 to get 1 sec 
    ResponsiveSleep (DelayInSec * 4) 
    Next X 

Was ich tun möchte, ist dies dynamisch zu machen. Wenn der Benutzer 5 Zeilen zum Anzeigen auswählt, möchte ich in der Lage sein, 5 von ihnen anzuzeigen und durch 5 zu scrollen.

Ich möchte nicht für das ganze Blatt obwohl skalieren. Ich meine, ich möchte den Zoom nicht verwenden, um das ganze Blatt auf meinen Bildschirm zu bringen.

Danke! Vollbild zu gehen (ohne Titelleiste und alles)

+0

Ich glaube nicht, dass es eine native Möglichkeit gibt, den Bildlauf für die Leiste in Excel selbst zu ändern, würde nicht helfen, die Bildlaufleiste im Benutzerformular zu machen? – Sgdva

+0

Ziel ist es, das Scrollen selbst zu machen. Es ist ein "Nur anzeigen" -Bildschirm, auf dem Protokolle angezeigt werden. – InfiniteLoop

+0

Gibt es eine Möglichkeit, die maximal darstellbare Höhe zu erhalten? Entweder in Absolut oder Pixel? Dies kann mir helfen, die gesamten anzeigbaren Zeilen zu finden (Höhe/Anzahl der gewünschten Zeilen). – InfiniteLoop

Antwort

0

ich den Weg gefunden haben, dies zu tun ... Ich beschloss, einen Weg zu finden, und so konnte ich folgendes:

Sub FormatWindow(ScrollBy) 



    Dim Xres As Integer 
    Dim Yres As Integer 
    Dim MaxXPoint As Single 
    Dim MaxYpoint As Single 
    Dim RowHeightForFour As Integer 



Xres = GetSystemMetrics(SM_CXSCREEN) 
Yres = GetSystemMetrics(SM_CYSCREEN) 


'1 pixel = 0.75 Point 
MaxXPoint = (Xres * 0.75) 
MaxYpoint = (Yres * 0.75) 

'Set the first row to 5% of screen 
PointForFirstRow = ((MaxYpoint * 5)/100) 

'Get the rest of the space to display rows 
MaxPointAfterFirstRow = MaxYpoint - ((MaxYpoint * 5)/100) 


'Set the first row to take 5% of the total displayable Y resolution 
ActiveSheet.Rows(1).RowHeight = PointForFirstRow 

'Get how many points per row 
PointPerRow = MaxPointAfterFirstRow/ScrollBy 

      Dim ws As Worksheet 
      For Each ws In Worksheets 

'If the sheet's name is not "Start", Apply the Height to all the rows. 
      If Not (ws.Name = "Start") Then 
      ws.Range("A2:A" & ws.Rows.Count).RowHeight = PointPerRow 
      End If 

      Next ws 

End Sub 

this helps jemand anderes!

Verwandte Themen