Board logo

標題: [發問] excel列高隨電腦windows 7 設定不同而有差異 [打印本頁]

作者: baconbacons    時間: 2014-12-25 09:00     標題: excel列高隨電腦windows 7 設定不同而有差異

下列的巨集遇到一個問題無法解決 想請教除了手動調整windows設定外 能否以巨集方式自動處理?
因為表格(列高、欄寬均有固定規格)有複製需要 故以下列程式碼處理
但此程式碼在本人電腦運作正常 在他人電腦會發生表格跑掉情形
經過確認原始表格的列高數值(右鍵確認列高)是固定的  但問題出在於windows 7設定
控制台>外觀及個人化>讓螢幕上的內容更容易閱讀
我的設定是100%,他人的設定是125%
導致我的表格在預覽時都正常 但他人的電腦在預覽第三頁之後就開始跑掉(第4頁的資料跑到第3頁…等)
請教該如何處理?
  1.     If myPhoto <> "" Then                                             
  2.         j = 25
  3.         Set Rng = Rows("1:24")
  4.             Rng.Copy                                                         
  5.         For i = 1 To (countPhoto - 1)
  6.             With ActiveSheet.Cells(j, 1)                                 
  7.                  .PasteSpecial Paste:=xlPasteAll
  8. '                .PasteSpecial Paste:=xlPasteFormats                          
  9.             End With
  10.             j = j + 24
  11.         Next i
  12.         Application.CutCopyMode = False
複製代碼

作者: luhpro    時間: 2014-12-26 00:16

本帖最後由 luhpro 於 2014-12-26 00:17 編輯
下列的巨集遇到一個問題無法解決 想請教除了手動調整windows設定外 能否以巨集方式自動處理?
因為表格(列 ...
baconbacons 發表於 2014-12-25 09:00

用 Excel VBA 抓登錄檔資料的方式我還不是很熟,
這裡只能先提供 Windows 7 相關登錄資料檔訊息:

[HKEY_CURRENT_USER\Control Panel\Desktop\WindowMetrics]
"AppliedDPI"=dword:00000060

如上例此值 = Hex 60 , 即 10 進位值 = 96 (其意 為 96 DPI -> 此時螢幕解析度的 DPI 標準值, 即此為 100% 時的 DPI 數)  (Hex 為 16 進位值, DPI : 每英吋像點數)

[HKEY_CURRENT_USER\Control Panel\Desktop]
"LogPixels"=dword:00000060

依上例標準 DPI 數做計算,
當此值 = Hex 60 時, 10進位值 = 96 (其意 為 96 DPI, = 100%)
當此值 = Hex 78 時, 10進位值 = 120 (其意 為 120 DPI, = 125%)

程式碼就請大家幫忙補囉.
作者: baconbacons    時間: 2014-12-26 19:28

回復 2# luhpro
感謝luhpro大的提醒
也找了論壇文章只有看到Hsieh大的文章提到螢幕解析度的取得
Hsieh大:取得系統資訊/使用者資訊
只是LogPixels好像和解析度又不完全一樣,網路上資料說叫邏輯圖素,它的基本意思是「以每英寸的圖素數為單位的非實際解析度」
雖然還不知道怎麼解決 但也是學了一課先  靜待其他前輩提供意見 感謝
作者: stillfish00    時間: 2014-12-27 10:16

回復 1# baconbacons
可以試試用放大縮小,使某範圍顯示在一整頁
EX:  假設1~24行為一頁
  1. Sub AutoZoom()
  2.   ActiveSheet.Range("1:24").Select
  3.   ActiveWindow.Zoom = True
  4. End Sub
複製代碼

作者: baconbacons    時間: 2014-12-29 11:41

回復 4# stillfish00
stillfish00大:

我直接將ActiveWindow.Zoom的值設定為100  但問題還是沒解決 我想縮放比例和LogPixels好像是意思不同
ActiveWindow.Zoom = 100
煩請stillfish00大再指教
作者: GBKEE    時間: 2014-12-29 13:34

回復 5# baconbacons
試試看

ThisWorkbook 模組的活頁簿事件
  1. Option Explicit
  2. Const My_Width = 9.11  '指定欄的寬度
  3. Const My_Height = 20.4 '指定列的高度
  4. Private Sub Workbook_Open()
  5.     儲存格的調整 ActiveSheet
  6. End Sub
  7. Private Sub Workbook_SheetActivate(ByVal Sh As Object)
  8.     儲存格的調整 Sh
  9. End Sub
  10. Private Sub 儲存格的調整(Sh As Worksheet)
  11.     With Sh.Cells
  12.         .ColumnWidth = My_Width
  13.         .RowHeight = My_Height
  14.     End With
  15. End Sub
複製代碼

作者: baconbacons    時間: 2014-12-29 14:27

回復 6# GBKEE
GBKEE大:
問一個笨問題,是要把這三個Private Sub都貼在ThisWorkbook的模組再執行嗎?
還是貼在原本自己的程式碼中?因為我的儲存格並非每一列高、每一欄寬都固定大小
而是將24列合併儲存格後,以此合併儲存格為樣板去複製,所以才會有下列程式碼的作法
Set Rng = Rows("1:24")
            Rng.Copy
作者: GBKEE    時間: 2014-12-29 15:05

回復 7# baconbacons
ThisWorkbook的
Private Sub Workbook_Open()
在檔案開啟時自動執行的程式.
Private Sub Workbook_SheetActivate(ByVal Sh As Object)
在活頁簿中選擇作用中工作表時自動執行的程式.

你的情況可能須在這程式中一一指定個別儲存格的欄寬,列高
作者: stillfish00    時間: 2014-12-29 15:37

回復 5# baconbacons
沒有要你設定為100啊,是要你在copy完執行一次 4# 的 AutoZoom,讓他去自動調整
作者: baconbacons    時間: 2014-12-29 16:45

回復 9# stillfish00
stillfish00大:
嘗試你的建議程式碼  還是會超出該頁面  我想可能不是縮放比例的關係
因為我的工作表列高值和別人電腦的列高值 完全一樣
我電腦的登錄檔設定值 = Hex 60 時, 10進位值 = 96 (其意 為 96 DPI, = 100%)
別人電腦登錄檔設定值 = Hex 78 時, 10進位值 = 120 (其意 為 120 DPI, = 125%)
結果就是我印出來都正常 別人印出來就開始出現錯位情形
感謝stillfish00大
作者: baconbacons    時間: 2014-12-30 09:18

回復 6# GBKEE
GBKEE大:
經過嘗試 雖然可以固定列高 但這方法在改變螢幕比例(不是縮放比例)後仍會發生相同的問題
再麻煩 GBKEE大
作者: baconbacons    時間: 2015-1-5 14:07

回復 8# GBKEE
GBKEE大:
試過提供的方法 還是無法解決跳頁的問題  再拜託GBKEE大了…




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