返回列表 上一主題 發帖

[發問] Userform最大化(且內容比例自動放大?)

回復 21# GBKEE


    感謝超版大大,這個超好用的了(而且程式碼很簡短)
只是表單偵測的高度部分,他會偵測整個螢幕的高度
無法只偵測到工作列的高度就好

導致工作列的位置會蓋掉userform的顯示
不過不打緊,userfrom最下方不要放元件就好!
PKKO

TOP

回復 26# GBKEE

超版大大,確實視窗已經到工作列上方了

可是...
1.比例不對,原本對齊在水平線上的兩個元件,會變成一上一下
2.雖然視窗跑到工作列上方了,可是內容並沒有壓縮,導致原本要顯示的元件,無法顯示出來(被邊界卡掉了)
PKKO

TOP

本帖最後由 PKKO 於 2015-5-22 22:08 編輯

回復 27# bobomi


    大大,我只能說您太神了!
這個自己拉的方式非常棒!
優點如下:
一、比妳之前的只有拉高度才會變更比例的好
二、可以有儲存功能
三、比例即便有問題也可以解決(文字原本顯示四個字,只有出現三個字,現在也可自行靠拉寬一點就顯示出來正確比例,所以四個字都可以顯示)

目前嘗試之後發現以下問題
1.若是有變更ListBox並且,自動調整欄位時,程式碼會崩潰在下方開頭的位置
  1. ocx.Left = ocx_xy(0) * Rw
  2. ocx.Top = ocx_xy(1) * Rh
  3. ocx.Width = ocx_xy(2) * Rw
  4. ocx.Height = ocx_xy(3) * Rh
複製代碼
A:我目前已有簡陋的解決方式,在啟動更新listBox 的時候checkUpdate = True
然後在Private Sub UserForm_Layout() 的第一行輸入    If checkUpdate = True Then checkUpdate = False: Exit Sub
這樣更新listBox的時候就不會執行,等到listbox結束之後他又會再更新一次畫面就OK了,因次第一個問題得到一個完美但簡陋的解決方式
附上我自己寫的listbox 快速使用程式碼
  1. Function LIST顯示(UserForm, LISTBOX, RNG)
  2.         checkUpdate = True
  3.         '將資料顯示在LISTBOX 上
  4.         LISTBOX.ColumnCount = UBound(RNG, 2)
  5.         LISTBOX.List = RNG 'ListBox 的顯示方式
  6.         '自動調整的程式
  7.         '新增以下code
  8.         Dim sWidth As String, dTotal As Double
  9.         Dim oTemp As Object
  10.         
  11.         Set oTemp = UserForm.Controls.Add("Forms.TextBox.1")
  12.         With oTemp
  13.           .AutoSize = True'在這行程式碼的地方會啟動Private Sub UserForm_Layout()導致錯誤
  14.           .MultiLine = True
  15.           .WordWrap = False
  16.           .SelectionMargin = False
  17.           .Font.Name = LISTBOX.Font.Name
  18.           .Font.Size = LISTBOX.Font.Size
  19.         End With
  20.         
  21.         For j = 0 To LISTBOX.ColumnCount - 1
  22.           oTemp.Text = ""
  23.           For i = 0 To LISTBOX.ListCount - 1
  24.             oTemp.Text = oTemp.Text & LISTBOX.List(i, j) & vbCr
  25.           Next
  26.           dTotal = dTotal + oTemp.Width
  27.           sWidth = sWidth & oTemp.Width + 10 & ";"
  28.         Next
  29.         UserForm.Controls.Remove oTemp.Name
  30.         LISTBOX.ColumnWidths = sWidth
  31. End Function
複製代碼
2.若我有4個userForm,要如何自動存取同一個GetSetting、SaveSetting,讓四個視窗的大小都會相同
A:目前我還在研究這個部分
PKKO

TOP

回復 27# bobomi


    大大您好,前一篇的問題我都找到答案了,在SaveSetting ThisWorkbook.Name, "SSS"=>全部的USERFORM都指向同一個名稱即可n個表單都相同大小
另外還有一個問題(抱歉,問題很多...)

就是縮小按鈕會出現錯誤,不能縮小
我目前作法是將縮小按鈕沒得點,有辦法讓他不會出現錯誤,然後縮小到工作列,等到要用的時候再點一下工作列的檔案就會自動跳出原本大小的表單嗎?
  1. ocx.Left = ocx_xy(0) * Rw
  2. ocx.Top = ocx_xy(1) * Rh
  3. ocx.Width = ocx_xy(2) * Rw
  4. ocx.Height = ocx_xy(3) * Rh
複製代碼
錯誤發生在上方的height那邊
PKKO

TOP

回復 32# bobomi


    大大,新版的使用上怪怪的

在切換不同表單的時候
下方程式碼的地方會無法執行
  1. Private Sub UserForm_Activate()
  2.   modForm.UserForm_SetButton Me
  3. End Sub
複製代碼
PKKO

TOP

        靜思自在 : 虛空有盡.我願無窮,發願容易行願難。
返回列表 上一主題