Board logo

標題: [發問] 視窗解析度的問題 [打印本頁]

作者: bowwow1975    時間: 2012-8-15 16:30     標題: 視窗解析度的問題

  1. Private Sub Workbook_Open()
  2.      SetXLResolution
  3. End Sub


  4. Declare Function GetSystemMetrics Lib "user32" (ByVal nIndex As Long) As Long
  5. Public Const SM_CXSCREEN = 0
  6. Public Const SM_CYSCREEN = 1


  7. Sub SetXLResolution()
  8. Dim VWidth As Integer
  9. Dim VHeight As Integer
  10. ' 高寬自動設為螢幕大小的 80%
  11. VWidth = GetSystemMetrics(SM_CXSCREEN)
  12. VHeight = GetSystemMetrics(SM_CYSCREEN)

  13. With Excel.Application
  14.      .WindowState = xlNormal ' 先將窗口還原
  15.      .Width = VWidth * 0.8 * 0.75 ' Points (~ 0.75 pixels)
  16.      .Height = VHeight * 0.8 * 0.75
  17.      .Left = VWidth * 0.1 * 0.75
  18.      .Top = VHeight * 0.1 * 0.75
  19. End With
  20. End Sub
複製代碼
某網站的一篇文章!
http://www.officefans.net/cdb/viewthread.php?tid=76420

但是有兩個問題
VBA 不讓
  1. Declare Function GetSystemMetrics Lib "user32" (ByVal nIndex As Long) As Long
  2. Public Const SM_CXSCREEN = 0
  3. Public Const SM_CYSCREEN = 1
複製代碼
這一段放在 End 後面!
就連 Workbook_open 也說錯誤!

最前面那一段 code 是放在 thisworkbook 沒有錯吧!
作者: bowwow1975    時間: 2012-8-15 17:04

不好意思,我解釋清楚一點
有兩個點:
第一、我開啟 Excel 的時候,因為內建背景圖,但我是用 1920x1080 設計的,但是換一台電腦就會螢幕太大!
第二、同樣的事情也發生在表單~~~~

這兩個視窗大小可以依據使用者的解析度做調整嗎?
作者: Hsieh    時間: 2012-8-15 22:43

回復 2# bowwow1975
  1. Declare Function GetSystemMetrics Lib "user32" (ByVal nIndex As Long) As Long
  2. Public Const SM_CXSCREEN = 0  '設置公共常數,取得螢幕解析度的X值
  3. Public Const SM_CYSCREEN = 1  '設置公共常數,取得螢幕解析度的Y值
複製代碼
這段程式碼應該放在一般模組內,因為公共常數只能放在一般模組
以下為Thisworkbook模組程式碼
  1. Private Sub Workbook_Open()
  2. VWidth = GetSystemMetrics(SM_CXSCREEN) '取得螢幕解析度的X值
  3. VHeight = GetSystemMetrics(SM_CYSCREEN) '取得螢幕解析度的Y值
  4. With Excel.Application
  5. 'VWidth / 1960得到與原設計解析度X值的比例
  6. 'VWidth / 1080得到與原設計解析度Y值的比例

  7.      .WindowState = xlNormal ' 先將窗口還原
  8.      .Width = VWidth * (VWidth / 1960) * 0.75 ' Points (~ 0.75 pixels)
  9.      .Height = VHeight * (VHeight / 1080) * 0.75
  10.      .Left = 0
  11.      .Top = 0
  12. End With
  13. End Sub
複製代碼

作者: bowwow1975    時間: 2012-8-16 09:31

系統說沒有定義這個 Sub 或 Function.

我是點擊 Thisworkbook 插入模組,然後在 Module1 填寫上面那一段!
作者: bowwow1975    時間: 2012-8-16 09:34

本帖最後由 bowwow1975 於 2012-8-16 09:35 編輯

好像是指 GetSystemMetrics 這個定義?

如果不行的話,可能就得全部改成 800x600 的,至少大家都可以用!
作者: bowwow1975    時間: 2012-8-16 09:50

試著改成這樣也不行!
  1. Private Sub Workbook_Open()
  2. SetXLResolution
  3. End Sub
  4. Sub SetXLResolution()
  5. Dim VWidth As Integer
  6. Dim VHeight As Integer
  7. VWidth = GetSystemMetrics(SM_CXSCREEN) '取得螢幕解析度的X值
  8. VHeight = GetSystemMetrics(SM_CYSCREEN) '取得螢幕解析度的Y值
  9. With Excel.Application
  10. 'VWidth / 1960得到與原設計解析度X值的比例
  11. 'VWidth / 1080得到與原設計解析度Y值的比例

  12.      .WindowState = xlNormal ' 先將窗口還原
  13.      .Width = VWidth * (VWidth / 1960) * 0.75 ' Points (~ 0.75 pixels)
  14.      .Height = VHeight * (VHeight / 1080) * 0.75
  15.      .Left = 0
  16.      .Top = 0
  17. End With
  18. End Sub
複製代碼

作者: white945    時間: 2012-8-16 09:53

回復 5# bowwow1975

[attach]12137[/attach]
作者: bowwow1975    時間: 2012-8-16 10:32

感謝~~~ It is work now!

雖然原始碼的結果和我想的不一樣!
表單還是一樣大,Excel 只是更改視窗大小,內容還是一樣超出視窗!!

不過已經讓我學到一些東西了,感謝各位大大幫忙!




歡迎光臨 麻辣家族討論版版 (http://forum.twbts.com/)